Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 尝试打开(创建)SQLite数据库时出错(“;EXC#u BAD#u ACCESS”;)_Objective C_Sqlite - Fatal编程技术网

Objective c 尝试打开(创建)SQLite数据库时出错(“;EXC#u BAD#u ACCESS”;)

Objective c 尝试打开(创建)SQLite数据库时出错(“;EXC#u BAD#u ACCESS”;),objective-c,sqlite,Objective C,Sqlite,这是密码。。。有人知道怎么了吗?另外,为什么在调试设备(iPhone 3GS)时,“errmsg”的第二个NSLog会导致调试器崩溃 //获取数据库文件的路径 NSArray*SearchPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,是); NSString*documentPath=[searchPaths objectAtIndex:0]; NSString*databasePath

这是密码。。。有人知道怎么了吗?另外,为什么在调试设备(iPhone 3GS)时,“errmsg”的第二个NSLog会导致调试器崩溃

//获取数据库文件的路径
NSArray*SearchPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,是);
NSString*documentPath=[searchPaths objectAtIndex:0];
NSString*databasePath=[documentPath stringByAppendingPathComponent:@“ppcipher.s3db”];
常量字符*CDATA基本路径=[databasePath cStringUsingEncoding:NSUTF8StringEncoding];
NSLog(@“databasePath:%@”,databasePath);
NSString*sqlCommand=@“创建表CARDATA(卡id文本主键不为NULL,卡名称文本不为NULL,”
@“卡片类型文本、cide值文本、创建日期文本、默认当前日期、用户注释文本、gps位置文本”;
const char cSQLCommand=[sqlCommand cStringUsingEncoding:NSUTF8StringEncoding];
char*errmsg=NULL;
NSFileManager*fileManager=[NSFileManager defaultManager];

[fileManager removeItemAtPath:databasePath错误:NULL];// 它崩溃是因为
errmsg
不是Objective-C对象,而您使用
%@
替换时需要它
errmsg
是一个
char*
,这意味着您应该使用
%s

至于它为什么会崩溃

sqlite3\u open
定义为:

int sqlite3_open(
  const char *filename,   /* Database filename (UTF-8) */
  sqlite3 **ppDb          /* OUT: SQLite db handle */
);
您的
db
被声明为
sqlite3*
。换句话说,你传递了错误的东西。你应该做:

sqlite3_open(cDatabasePath, &db)

虽然您希望了解SQLite C API,但我仍然认为您应该使用FMDB。它确实减轻了这些错误,让您能够专注于代码的真正问题。

只有受虐狂才会在Objective-C(SQLite包装器)或(对象图管理器)中直接使用SQLite C API。我尊重您的意见。。。然而,我选择直接使用API,主要是为了学习。。。你能告诉我为什么会出现sqlite3_开放错误吗?我讨厌Objective-C!对于像我这样的.NET程序员来说,这是毫无意义的!我正在努力学习,但正如你所看到的,这对我来说是一场真正的斗争。。。谢谢你的帮助,我真的很感激。几分钟后我会有另一个求助请求:D
sqlite3_open(cDatabasePath, &db)