iphone上的sqlite可以打开db,但不能准备语句
我是使用sqlite的新手,所以我可能错过了一些基本的东西 我已经创建了一个数据库并将其复制到我的应用程序的文档目录中。我可以打开它,但当我调用sqlite3\u prepare\u v2时,我收到SQLITE\u错误,“SQL错误或缺少数据库” 这是我的密码:iphone上的sqlite可以打开db,但不能准备语句,iphone,sqlite,Iphone,Sqlite,我是使用sqlite的新手,所以我可能错过了一些基本的东西 我已经创建了一个数据库并将其复制到我的应用程序的文档目录中。我可以打开它,但当我调用sqlite3\u prepare\u v2时,我收到SQLITE\u错误,“SQL错误或缺少数据库” 这是我的密码: sqlite3 *database; if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) { sqlite3_stmt *compiledStatem
sqlite3 *database;
if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK)
{
sqlite3_stmt *compiledStatement;
NSString *sqlStatement = @"select * from dbname";
int result = sqlite3_prepare_v2(database, [sqlStatement UTF8String], -1, &compiledStatement, nil);
...
}
相同的sql语句在终端中工作
我在一些地方发现了这个问题,要么没有答案,要么解决不了我的问题。我希望这里有人能帮忙。谢谢
编辑:
使用Firefox的SQLite管理器使其正常工作,这是通过终端创建的数据库文件出现问题。由于您使用的是
SQLite 3\u open
,如果在dbPath
中的给定位置尚未存在新的空数据库,则会自动创建该数据库。如果改为使用sqlite3\u open\u v2
,则可以控制它只打开现有数据库,而不是在缺少数据库时创建数据库。只需在第三个参数中传递标志SQLITE\u OPEN\u READWRITE
如果数据库没有按预期复制到applications documents文件夹中,则后一种方法应该能够捕捉到这一点
希望这有帮助
克劳斯dbPath的作用是什么?dbPath是应用程序文档区域中的sqlite数据库文件的路径。谢谢,我打赌是这样的,它可能打开了一个新的数据库而不是我的sqlite文件。