【问题标题】:problem in inserting the vlaues into database将值插入数据库的问题
【发布时间】:2011-08-01 08:14:54
【问题描述】:

我熟悉 sqlite 并尝试将值插入数据库但给出异常。 tf1 和 tf2 是文本字段的对象。这是我的代码:

@synthesize tf1,tf2,添加,显示; -(id)initApp { 如果(![超级初始化]) 返回零; //DB 存储在应用程序包中 NSString *DBName = @"kbase.sqlite"; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingString:DBName]; db = [FMDatabase databaseWithPath:path]; [db setLogsErrors:TRUE]; [db setTraceExecution:TRUE]; 如果(![数据库打开]) { NSLog(@"无法打开数据库"); 返回0; } 别的 { NSLog(@"数据库打开成功"); } 回归自我; } - (void)viewDidLoad { [超级视图DidLoad]; [自初始化应用程序]; [添加 addTarget:self action:@selector(insertButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; [disp addTarget:self action:@selector(displaytButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; } -(IBAction)insertButtonClicked :(id)sender { NSLog(@"插入"); NSLog(@"db.....%@",db); [db executeUpdate:@"插入信息值 (?,?)", tf1.text, tf2.text]; [自我辞职FirstResponder]; } -(IBAction)displayButtonClicked:(id)sender { NSString *str1 = tf2.text; NSString *returnResult = [[NSString alloc]init]; FMResultSet *rs = [db executeQuery:@"select name from info where rollno = 1"]; 而 ([rs 下一个]) { returnResult = [rs stringForColumn:@"rollno"]; [tf1 setText:returnResult]; [tf2 setText:returnResult]; } }

数据库成功打开,打印插入后控制终止 例外:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** - [NSURL executeQuery:]:无法识别的选择器发送到实例 0x3d30ef0”

我无法配置问题。请帮忙。

【问题讨论】:

  • 显示executeUpdate的代码
  • 如您所见,一个 NSURL 对象获取了查询方法。您可以在触发语句之前转储数据库的类名吗?请发布您如何设置数据库的代码。
  • 你在 executeUpdate 方法中做了什么?可以出示一下代码吗?
  • @rakesh 喜欢,@chetan bhalara:我更新了我的代码!请检查代码
  • @chetan : 我使用 sqlite manager 创建 bd 和 table!

标签: iphone sqlite


【解决方案1】:

似乎db 在此上下文中不存在。如果db 是一个类变量,请确保它没有在其他地方发布。只需在执行上方添加一个NSLog(@"%@", db); 即可对其进行测试。

【讨论】:

  • db 是 FMDatabase 类对象!
  • 抱歉显示路径:localhost/Users/gauravmurghai/Library/Application%20Support/iPhone%20Simulator/User/Library/Preferences/.GlobalPreferences.plist。我之前没有在 UITextField 中设置过!
【解决方案2】:

我想你的方法

[db executeUpdate:@"insert into info values (?,?)" withValue1:tf1.text withValue2:tf2.text];

代替

[db executeUpdate:@"插入信息值(?,?)", tf1.text, tf2.text];

【讨论】:

  • 让我解释一下。我已经通过 sqlite manager 创建了数据库,并且只声明了列名“name”、“rollno”。我将此数据库拖到我的资源文件夹中。所以它给出了例外
猜你喜欢
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 2016-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多