sqlite3_prepare_v2语句中的错误

时间:2011-04-20 16:14:43

标签: objective-c sqlite

我有这段代码,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) {

2 个答案:

答案 0 :(得分:1)

以下是一些可能性:

  1. databasePath不正确,您正在创建一个新数据库而不是打开您想要的数据库;请参阅sqlite3_open_v2SQLITE_OPEN_READONLY以检测此

  2. 架构不包含CardData表。尝试使用select * from sqlite_master;

  3. 打印出架构
  4. password不正确,无法解密数据库

答案 1 :(得分:0)

我相信sqlite3_prepare_v2中的第三个参数是

  

“zSql的最大长度(以字节为单位)”

你在那里设置-1。也许尝试将其设置为

if(sqlite3_prepare_v2(database, sqlStatement, strlen(sqlStatement), &compiledStatement, NULL) == SQLITE_OK) {