1

私はsqliteに取り組んでおり、データベースに値を挿入していますが、データベースがロックされているというエラーが発生しています これが私のコードです

-(void)addmoreDATADetails
{


    if(addStmt == nil) 
    {
        const char *sql = "insert into moreBankroll(MoreName) Values(?)";

        if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)
            NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
    }
    sqlite3_bind_text(addStmt, 1, [moreName UTF8String], -1, SQLITE_TRANSIENT);

    if(SQLITE_DONE != sqlite3_step(addStmt))
    {
        NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
    }
    else
    {

        moreId=sqlite3_last_insert_rowid(database);
    }
    sqlite3_reset(addStmt);


    }

私が追加している場合

XYZAppDelegate *appDelegate = (XYZAppDelegate *)[UIApplication sharedApplication].delegate;
  dbPath =[appDelegate getDBPath];
    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 

これは上記の関数で、そのようなテーブルはないと言っています

このコードは別のプロジェクトでは正常に機能していますが、私のプロジェクトでは機能していません。助けてください

4

2 に答える 2

2

他のスレッド/操作がクエリを実行しているため、DB はロックされています。iPhone で SQLite を使用するのは非常に面倒です。おそらく、FMDB ラッパーを使用して書き直すことを検討する必要があります。これは、すべてのロックを単独で処理し、データを照会します。 https://github.com/ccgus/fmdb

于 2012-08-08T14:17:31.523 に答える
1

データベースロックエラーは、データベース操作を作成していて、その中で別のデータベース操作を開始した場合にのみ発生します。2 つの操作がある場合は、それらを分離してみてください。これは、トランザクションを作成するたびにこのエラーが発生するためです。

この説明がお役に立てば幸いです。

于 2012-08-08T14:54:18.033 に答える