1

同じデータベースに 2 つのテーブルがあります。

最初のテーブル データは、以下のコードを使用して正常に挿入されます。

       NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES);
       NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *databasePath = [documentsDirectory stringByAppendingPathComponent:@"test.sqlite"];
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {

(sqlite3_exec(database, "BEGIN TRANSACTION", 0, 0, 0))==SQLITE_OK

   if ( sqlite3_exec(database, [insertStatement UTF8String], NULL, NULL, &error) == SQLITE_OK)
        {

            NSLog(@"------- inserted here ----");
        }
        else
        {
            NSLog(@"Error: %s", error);

     if(sqlite3_exec(database, "COMMIT", 0, 0, 0) ==SQLITE_OK){
           NSLog(@"-------data sucessfully inserted ");
      }
      else {
         NSLog(@"-------data insertion failed");
          sqlite3_exec(database, "ROLLBACK", 0, 0, 0);
      }

       (sqlite3_exec(database, "END TRANSACTION", 0, 0, 0));
        sqlite3_close(database);


}
else {
   NSLog(@"-------sqlite open error ");
}

ログに記録すると、データが正常に挿入されます。

しかし、2番目のテーブルに挿入するために同じコードを使用すると、データが挿入されず、ログが取得されます

NSLog(@"-------data insertion failed")

また、各操作でデータベースを開閉し、ハンドルを解放しています。

sqlite でデータベースへの書き込みが許可されていないと思いますが、その理由がわかりません。以前の操作でデータベースを閉じたので。

同じデータベースファイルの2番目のテーブルにデータが挿入されないという同じ問題に遭遇した人はいますか?

追記: 構文エラーはありません。1 番目のテーブルに挿入しないと、2 番目のテーブルに挿入されますが、これは奇妙です。

4

1 に答える 1

3

このコードで試してみてください。

-(NSString*) GetDatabasePath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
        NSUserDomainMask, YES) ;
    NSString *documentsDirectory = [paths objectAtIndex:0] ;
    return [documentsDirectory stringByAppendingPathComponent:@"test.sqlite"] ;
}

-(void)InsertPurchase 
{
        sqlite3_stmt *statement=nil;
        NSString *path = [self GetDatabasePath];
        NSString *query;

        if(sqlite3_open([path UTF8String],&db) == SQLITE_OK)
        {
            query = [NSString stringWithFormat: @"Your insert query"];

            if(sqlite3_prepare_v2(db, [query UTF8String], -1, &statement, NULL)
                        == SQLITE_OK)
            {
                sqlite3_step(statement);
            }
            sqlite3_finalize(statement);
        }
        sqlite3_close(db);
}
于 2012-08-17T12:45:47.447 に答える