0

カスタム オブジェクトから sqlite データベースに挿入するためのメソッドがあります。

- (void)insertCustomEntity:(CustomEntity *)customEntity
{
   NSString *filePath = [FileMngr copyDatabaseToDocuments];

   sqlite3 *database;

   if (sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) {
       const char *sqlStatement = "INSERT OR REPLACE INTO Entities (id, type, timestamp, result) VALUES (?, ?, ?, ?)";
    sqlite3_stmt *compiledStatement;

        NSLog(@"Could not prepare statement: %s\n", sqlite3_errmsg(database));

       if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
           sqlite3_bind_int(compiledStatement, 1, customEntity.id);
           sqlite3_bind_int(compiledStatement, 2, customEntity.type);
           sqlite3_bind_int64(compiledStatement, 3, customEntity.timestamp);
           sqlite3_bind_int(compiledStatement, 4, customEntity.result);
       }

          if(sqlite3_step(compiledStatement) == SQLITE_DONE) {

          }
          else {
             NSLog(@"Step: %d\n", sqlite3_step(compiledStatement));
          }
       }

       sqlite3_finalize(compiledStatement);
   }

   sqlite3_close(database);
} 

しばらくテストを行っていて、データが挿入されていましたが、突然停止し、2番目のNSLog. 以前は機能していたのに、なぜこれが起こるのですか? sqlite3_step(compiledStatement)の中に配置するなど、いくつかの投稿で見つけたいくつかのオプションを試しましたsqlite3_prepare_v2が、挿入できません。私が間違っていることは何ですか?

前もって感謝します

4

1 に答える 1

1

よくわかりませんが、ブレースの一部が一致していないように見えますか? とにかく、エラー コード 5 は、データベースがロックされていることを示します。

http://www.sqlite.org/c3ref/c_abort.html

他の何かがデータベースにアクセスしているかどうかを確認します (または、コードを変更する必要がある状況でデータベースが閉じられていない)。それを解決するには、次の解決策を試してください:-

sqlite3 データベースがロックされています

于 2013-08-07T12:43:49.673 に答える