-1

我无法在 sqlite 数据库中的表上进行选择。

我有以下代码将 .sqlite 文件复制到用户目录:

    // copy the database to the user's directory
- (void)checkAndCreateDB {
    // Check if the SQL database has already been saved to the users phone, if not then copy it over
    BOOL success;

    // Create a FileManager object, we will use this to check the status
    // of the database and to copy it over if required
    NSFileManager *fileManager = [NSFileManager defaultManager];

    // Check if the database has already been created in the users filesystem
    success = [fileManager fileExistsAtPath:databasePath];

    // If the database already exists then return without doing anything
    if(success) return;

    // If not then proceed to copy the database from the application to the users filesystem

    // Get the path to the database in the application package
    NSString *databasePathFromApp = [[NSBundle mainBundle] pathForResource:databaseName ofType:nil];
    // Copy the database from the package to the users filesystem
    [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
    [fileManager release];
}

并在这里选择:

sqlite3 *database;

categories = [[NSMutableArray alloc] init];

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
        const char *sqlStatement = "select * from category";
        sqlite3_stmt *compiledStatement;
    NSLog(@"get");
        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
        NSLog(@"test");
        while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
                NSString *cId = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
                NSString *cName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];

                Category *category = [[Category alloc] initWithId:cId name:cName];
                [categories addObject:category];
                [categories release];
            } 

    }
        // Release the compiled statement from memory
        sqlite3_finalize(compiledStatement);

    }
    sqlite3_close(database);

日志仅显示:“get”。“测试”不存在。

我希望有一个人可以帮助我。

4

3 回答 3

0

如果指定的数据库不存在,sqlite3_open 将创建一个新的(空)数据库。为了确保这不是正在发生的事情,请尝试使用 sqlite3_open_v2 并使用 SQLITE_OPEN_READWRITE 作为标志参数。这样,如果您尝试打开一个不存在的数据库,您将收到错误消息。

于 2012-07-14T09:57:15.830 回答
0

我相信您的数据库副本代码在传递nil给. 尝试传递正确的文件扩展名并添加代码以检测复制操作的成功或失败(并使您的方法返回)并从那里获取它。ofType[NSBundle pathForResource]checkAndCreateDBBOOL

您的数据库选择代码对我来说看起来不错,所以我猜您有一个空数据库,如@Micheal 的回答中所述。

于 2012-07-14T10:07:41.800 回答
-1

这里有一个使用 SQLite 的示例项目,您可以参考:https ://github.com/AaronBratcher/ABSQLite

它有用于以更传统的数据库方式访问 SQLite 的类,我觉得这让事情变得更容易。

于 2013-07-11T15:22:26.280 回答