2012-01-11 19 views
-1

私は1つのアプリケーションを開発中です。データベースにデータを挿入する際の問題に直面しています。最初の挿入と更新は非常にうまく実行されます。私は挿入操作を実行したい場合、更新後、アプリはクラッシュします。私のコードの挿入と更新は次のようなものでしたデータの挿入と更新が完了した後にデータを挿入する方法

+(BOOL)update:(CalendarInfo*)clInfo 
{ 
    NSString *query = [NSString stringWithFormat:@"UPDATE ABC set A = '%@' where B =%d and C=%d",clInfo.a,clInfo.b,clInfo.c]; 
    sqlite3_stmt *stStatement; 

    if(sqlite3_prepare_v2(database, [query UTF8String], -1, &stStatement, nil)==SQLITE_OK) 
    { 
     if(SQLITE_DONE == sqlite3_step(stStatement)) 
      NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database)); 
     else 
      NSLog(@"updation Successful"); 
    } 
    return 0; 
} 

+(BOOL)insert:(CalendarInfo*)clInfo{ 

    sqlite3_stmt *addStmt = nil; 
    sqlite3 *contactDB; 
    NSArray *docPathArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *destPath = [NSString stringWithFormat:@"%@/example.sqlite",[docPathArr objectAtIndex:0]]; 

    if (sqlite3_open([destPath UTF8String], &contactDB)==SQLITE_OK) { 
     NSString *query2 = [NSString stringWithFormat:@"INSERT INTO ABC(C,B,A) VALUES(%d,%d,'%@')",clInfo.c,clInfo.b, clInfo.a]; 
     if(sqlite3_prepare_v2(database, [query2 UTF8String], -1, &addStmt, NULL) != SQLITE_OK) 
      NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database)); 
    } 

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

    sqlite3_reset(addStmt); 

    return 0; 
} 

私の問題を解決する方法を教えてください。

+0

どのコード行が実際にクラッシュしていますか? –

+0

if(SQLITE_DONE!= sqlite3_step(addStmt)) NSAssert1(0、@ "データの挿入中にエラー '%s'"、sqlite3_errmsg(database)); このループでは、2番目の行がクラッシュすると、 – user1138045

+0

がクラッシュします。コンソールにエラーがありますか? 'sqlite3_step'または' sqlite3_errmsg'(これは私の最後のコメントの「2行目だと思います)」でクラッシュしますか? –

答えて

0

あなたが投稿した限られたコードから、私の答えはあなたがここに異なるsqlite3インスタンスを持っていることと関係していると思います。これは意図的でしたか?

あなたが

sqlite3_open([destPath UTF8String], &contactDB);を呼び出してから、エラーが別のsqliteインスタンスをオフ結果取得しようと:

sqlite3_errmsg(database) 

どちらかがdatabaseまたはcontactDBを使用して、すべて設定する必要があります。

+0

なぜ、(SQLITE_DONE!= sqlite3_step(addStmt)) が満たされたのか?それが満たされなかった場合、問題は解決されます。 – user1138045

関連する問題