【发布时间】:2012-12-24 19:53:05
【问题描述】:
使用MacOS终端我创建了一个数据库名称database.sql并插入了一些记录。使用 iOS 我可以检索插入的值。
但是使用iOS 代码我尝试将记录插入数据库,但它没有将记录输入数据库。
我应该设置需要设置一些权限吗?这是我的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
[self openDB];
}
-(IBAction)save:(id)sender{
[self insertRecordIntoTableNamed:@"Contacts"
field1Value:fname.text
field2Value:lname.text
field3Value:comp.text
field4Value:email.text
field5Value:pnumber.text
field6Value:mnumber.text
field7Value:add.text
field8Value:city.text
field9Value:state.text];
}
-(void)openDB{
NSString *sqlfile=[[NSBundle mainBundle]pathForResource:@"database" ofType:@"sql"];
if(sqlite3_open([sqlfile UTF8String], &db)!= SQLITE_OK){
sqlite3_close(db);
NSLog(@"Database connected");
NSAssert(0,@"Database failed to open");
}
else
{
NSLog(@"Database connected");
}
}
-(void) insertRecordIntoTableNamed:(NSString *) tableName
field1Value:(NSString *) field1Value
field2Value:(NSString *) field2Value
field3Value:(NSString *) field3Value
field4Value:(NSString *) field4Value
field5Value:(NSString *) field5Value
field6Value:(NSString *) field6Value
field7Value:(NSString *) field7Value
field8Value:(NSString *) field8Value
field9Value:(NSString *) field9Value {
NSString *sql = [NSString stringWithFormat:@"INSERT INTO %@ VALUES ('%@','%@','%@','%@',%@,%@,'%@','%@','%@');",tableName, field1Value, field2Value,field3Value,field4Value,field5Value,field6Value,field7Value ,field8Value,field9Value];
NSLog(@"%@",sql);
// char *err;
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil)== SQLITE_OK)
{
if (SQLITE_DONE!=sqlite3_step(statement))
{
sqlite3_close(db);
NSAssert(0, @"Error updating table.");
}
else{
NSLog(@"Success");
NSLog(@"%@",sql);
}
}
sqlite3_finalize(statement);
}
@end
这是我所做的:
使用 CHMOD 更改文件夹和路径权限
将
sqlite3_exec()拆分为sqlite3_prepare()、sqlite3_step()和sqlite3_finalize()- 我得到相同的输出 - 已创建查询但未在数据库中创建记录- 我可以检索记录信息
【问题讨论】:
-
哪个步骤(如果有)报告它失败了,你得到了什么错误信息?
-
我没有收到任何错误,运行我的项目后,如果我插入数据并检索它,它会显示数据但如果我运行程序并再次尝试检索我之前输入的数据没有显示任何结果您知道为什么会发生这种情况吗谢谢您的回复
-
是的,您几乎肯定会尝试对资源包中的文件进行操作,而且这是只读的。必须将其复制到您的应用拥有的可写目录中。
-
@chiron,你的副本工作了吗?下面的答案和代码有帮助吗?
标签: iphone ios objective-c ipad sqlite