【问题标题】:SQLite3: database not being savedSQLite3:数据库未保存
【发布时间】:2011-10-05 03:03:46
【问题描述】:

我正在创建一个 Mac 应用程序,它将一些数据保存到 SQLite 数据库。问题是:当我关闭数据库并再次打开它时,数据不存在。这是我的代码:

NSString *sql = [NSString stringWithFormat:@"INSERT INTO people(name, artist, id, album, location, cover) VALUES('%@', '%@', %d, '%@', '%@', '%@');", name, artist, ID, album, path, cover];

 sqlite3 *database = NULL;      
 sqlite3_open([[[NSBundle mainBundle] pathForResource:@"db" ofType:@"database"]
   cStringUsingEncoding:NSUTF8StringEncoding], &database);  

 sqlite3_stmt *statement;       
 sqlite3_prepare_v2(database, "CREATE TABLE IF NOT EXISTS people(name TEXT, id INT, artist TEXT, album TEXT, cover TEXT, location TEXT);", -1, &statement, NULL);   
 sqlite3_step(statement);
 sqlite3_finalize(statement);       
 sqlite3_prepare_v2(database, [sql cStringUsingEncoding:NSUTF8StringEncoding], -1, &statement, NULL);   
 sqlite3_step(statement);
 sqlite3_finalize(statement);

 statement = NULL;
 sqlite3_close(database);

【问题讨论】:

  • 在那里放置一些错误处理怎么样?您没有检查任何这些函数调用,它们几乎都可能失败。
  • 另外,您确定要将数据库保存到应用程序包中吗?这不是推荐的位置。
  • 我做了检查,似乎一切正常。我还注意到,当我在 Application Support 目录上创建一个新数据库时,我能够将数据保存到其中。但是,当我再次打开它时,我无法将任何数据保存到其中:(

标签: database cocoa macos sqlite save


【解决方案1】:

您可以使用此代码检查您的插入:

sqlite3_stmt *stmt;
char *errmsg;
const char *sql = [isql cStringUsingEncoding:NSUTF8StringEncoding];

if (sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) != SQLITE_OK) {
    NSLog(@"SQL Warning: Erro ao executar a instrução '%s'.", sqlite3_errmsg(database));
    sqlite3_reset(stmt);
    sqlite3_finalize(stmt);
    return;
}

if(!sqlite3_exec(database, sql, nil, &stmt, &errmsg) == SQLITE_OK) NSLog(@"SQL Warning: '%s'.", sqlite3_errmsg(database));

sqlite3_reset(stmt);
sqlite3_finalize(stmt);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多