2012-08-17 62 views
1

我在同一個數據庫上有兩個表。在sqlite3的同一個數據庫上的插入語句不起作用iphone

對於第一表的數據被成功插入使用以下代碼:如我登錄

 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 "); 
} 

的數據被成功插入。

但是,當我使用相同的代碼插入到第二個表,沒有數據插入我得到登陸

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

我也開,並在每個操作關閉數據庫和釋放手柄。

我認爲SQLite不允許我寫數據庫,但不明白爲什麼?因爲我已經用較早的操作關閉了數據庫。

是否有人在同一個數據庫文件的第二個表沒有數據插入時遇到同樣的問題。

Addt注意:沒有語法錯誤,如果我沒有插入第一張桌子上,那麼在第二張桌子上插入是很奇怪的。

+0

檢查查詢?無論是否合適。 – Krunal 2012-08-17 12:42:48

回答

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); 
} 
+0

我使用相同的只是額外的交易更快的執行,但我的問題是爲什麼我的第二張表沒有被插入相同的數據庫?即使在第一次插入後關閉結束交易之後?此外,如果我重寫第一個然後第二個表運作良好,這是與相同的數據庫內寫入問題,但在差異。表 – Vacca 2012-08-17 13:42:10

+0

讓我看看Db的完整代碼。 – Krunal 2012-08-18 04:25:13

+0

我碰巧用你的準備語句取代了我的(sqlite3_exec(database,[insertStatement UTF8String],NULL,NULL,&error)== SQLITE_OK),它可以工作。 Thankx Krunal – Vacca 2012-08-20 16:12:49