1

私はsqliteデータベースに取り組んでおり、データベースに挿入しようとしていますが、「挿入中にエラーが発生しました」というエラーが発生します。データベースがロックされています。いくつかの投稿を検索し、resetおよびfinalizeステートメントも記述しましたが、同じエラーが発生します。

これが私のコードです

    if(addStmt == nil) 
    {
        //const char *sql = "insert into Limittabel (limitAmt) Values(?)";
        //const char *sql="INSERT INTO Limittabel (limitAmt, Profileid) VALUES(?, ?)";
        const char *sql="insert into Limittabel (limitAmt,Profileid) Values (?,?)";
       // Insert into Limittabel (limitAmt,Profileid) Values ($500,1)

        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, [limitAmt UTF8String], -1, SQLITE_TRANSIENT);
//    NSString *str_id_poi = [[NSString alloc] initWithFormat:@"%d", [Profileid integerValue]];
//    sqlite3_bind_text(addStmt, 2, [str_id_poi UTF8String], -1, SQLITE_TRANSIENT);
    //sqlite3_bind_text(addStmt, 2, [ UTF8String], -1, SQLITE_TRANSIENT);
     NSLog(@"***Storing END on Database ***");
    if(SQLITE_DONE != sqlite3_step(addStmt))
    {
        NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
    }  // sqlite3_finalize(addStmt);

    else{

        //sqlite3_last_insert_rowid;
        limitid = sqlite3_last_insert_rowid(database);
         NSLog(@"YES THE DATA HAS BEEN WRITTEN SUCCESSFULLY");
    }

    sqlite3_finalize(addStmt);
    }
    sqlite3_reset(addStmt);
    //sqlite3_finalize(addStmt);
}

データベースを開いていない場合はデータベースロックエラーが発生し、データベースを開いている場合は「そのようなテーブルはありません」エラーが発生します。助けてください。ありがとう

4

4 に答える 4

1

「データベースを開かないと、データベースロックエラーが発生します」というコメントがわかりません。データベースを開かないとデータベースを使用できないからです。最初にデータベースを開かずにSQLite関数を呼び出すことは意味がありません。多分私はこのコメントを理解していません。

しかし、それを少し無視すると、後で「データベースを開くと、「そのようなテーブルはありません」というエラーが発生します」と言います。データベースを正しく検索していると確信していますか?問題は、データベースを開いても見つからない場合、空のデータベースが作成されることです。これがあなたに起こっていないことを確認しますか?これがあなたに起こったかもしれないなら、あなたはしたいかもしれません

  1. シミュレーターをリセットするか(シミュレーターを使用している場合)、アプリを削除して再インストールし、sqlite3_open作成された可能性のある空白のデータベースが削除されることを確認します。と

  2. データベースを開く前にデータベースが存在することを確認するか、の発生をsqlite3_opensqlite3_open_v23番目のパラメーターSQLITE_OPEN_READWRITEとの4番目のパラメーターに置き換えてくださいNULLXcodeでデータベースにアクセスするときにSQLiteがクエリを準備しないを参照してください

  3. 余談ですが、これをバンドルから開くのか、それとも開くのかについては言及しませんDocumentsが、通常は、プログラムでバンドルからコピーDocumentsして、そこから開くことをお勧めします。

  4. シミュレーターでこれを行っている場合、Macからシミュレーターで使用されているデータベースを調べると役立つことがあります。したがって、「〜/ Library / Application Support / iPhone Simulator / 5.1 / Applications /」に移動します(5.1を使用しているシミュレータのバージョンに置き換えます...Libraryが非表示の場合は、で再表示しますTerminalchflags nohidden ~/Library、次に特定のアプリケーションのディレクトリに移動し、そのフォルダに移動して、MacコマンドラインプログラムDocumentsでデータベースを開きます。sqlite3これを使用してデータベースを調べ、データベースが期待どおりであることを確認できます。

「そのようなテーブルがない」エラーについてのほんの少しの考え。

于 2012-08-07T06:01:11.627 に答える
0

最初にデータベースを開き、次にデータベースに変更を加え、エラーが発生した場合は、データベースにテーブルが存在するかどうかを確認することをお勧めします。つまり、そのようなテーブルが作成されているかどうかを確認します。

于 2012-08-06T12:12:17.160 に答える
0

SQLiteデータベースからデータを作成、開く、挿入、および取得するためのリンクは次のとおりです。それはあなたを助けます。

SQLite Dataseデータベースからの作成、挿入、取得ここをクリック

于 2012-08-06T11:44:37.953 に答える
0

このコードを試してください、

if(sqlite3_open([YourDatabasePath UTF8String],&db) == SQLITE_OK)
{
    NSString *querySQL = [NSString stringWithFormat: @"insert into Limittabel (limitAmt,Profileid) Values (?,?)"];

    char *errmsg=nil;

    if(sqlite3_exec(db, [querySQL UTF8String], NULL, NULL, &errmsg)==SQLITE_OK)
    {
       NSLog(@"YES THE DATA HAS BEEN WRITTEN SUCCESSFULLY");
    }

}
sqlite3_close(db);

このコードが機能しない場合は、クエリに問題があります。クエリをもう一度確認してください。このコードは私の側で機能します。

于 2012-08-06T12:57:33.837 に答える