我有这段代码,sqlite3_prepare_v2语句没有返回OK ...任何想法为什么?
// Setup the SQL Statement and compile it for faster access
const char *sqlStatement = "SELECT * FROM CardData";
sqlite3_stmt *compiledStatement;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *saveDirectory = [paths objectAtIndex:0];
NSString *databasePath = [saveDirectory stringByAppendingPathComponent:@"ppcipher.s3db"];
// [dm openDatabaseWithPassword:password]; // open the d/b
sqlite3 *database;
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
sqlite3_key(database,password,9);
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
答案 0 :(得分:1)
以下是一些可能性:
databasePath
不正确,您正在创建一个新数据库而不是打开您想要的数据库;请参阅sqlite3_open_v2和SQLITE_OPEN_READONLY
以检测此
架构不包含CardData
表。尝试使用select * from sqlite_master;
password
不正确,无法解密数据库
答案 1 :(得分:0)
我相信sqlite3_prepare_v2中的第三个参数是
“zSql的最大长度(以字节为单位)”
你在那里设置-1。也许尝试将其设置为
if(sqlite3_prepare_v2(database, sqlStatement, strlen(sqlStatement), &compiledStatement, NULL) == SQLITE_OK) {