2012-08-10 49 views
1

我在iPad開發項目中寫入SQLite數據庫時遇到問題。這裏是我的代碼,用insert語句寫入數據庫。當我執行語句時,Sqlite不會發回錯誤,但數據仍未保存在數據庫中。在iOS/iPad開發中寫入SQLite

我的INSERT語句的簡化版本:

//Insert Into POHeader(CustID, CatalogName) Values('0', 'webdemo') 


@try { 
     NSFileManager *fileMgr = [NSFileManager defaultManager]; 
     NSString *dbPath = [[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:@"Orders.db"]; 
     BOOL success = [fileMgr fileExistsAtPath:dbPath]; 
     if(!success) 
     { 
      NSLog(@"Cannot locate database file '%@'.", dbPath); 
     } 
     if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK)) 
     { 
      NSLog(@"An error has occured: %@", sqlite3_errmsg(db)); 
     } 

    sql = [self prepareSqlForPOHeader]; 
    sqlite3_stmt *sqlStatement; 

    int sqlResult = (sqlite3_prepare_v2(db, sql, -1, &sqlStatement, NULL)); 

    if (sqlResult != SQLITE_OK)// (sqlite3_prepare_v2(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK) 
    { 
     NSLog(@"Problem with prepare statement: %@", sqlite3_errmsg(db)); 
    }else{ 
     //success 
    } 

    sqlite3_finalize(sqlStatement); 

} 
@catch (NSException *exception) { 
    NSLog(@"Problem with prepare statement: %@", sqlite3_errmsg(db)); 
} 
@finally { 
    sqlite3_close(db); 
} 
+0

不完全是我的區域,但不應該有實際執行準備好的語句的東西嗎? (sqlite3_step?) – 2012-08-10 15:49:32

+0

只是一個雖然我研究這更多。應用程序中的數據庫通過刪除資源文件夾中的現有SQLite數據庫來創建。這是否會使其成爲只讀,SQLite不會因某種原因返回此錯誤? – Mike 2012-08-10 15:50:53

回答

0

你忘了添加這一行:sqlite3_step(sqlStatement);

變化,如代碼:

if ((sqlite3_prepare_v2(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK) 
{ 
    NSLog(@"Problem with prepare statement: %@", sqlite3_errmsg(db)); 
} 
else 
{ 
    sqlite3_step(sqlStatement); 
    sqlite3_finalize(sqlStatement); 
} 

SQLite Tutorials

希望它會幫助你。

+0

這正是缺少的東西。感謝您的幫助! – Mike 2012-08-10 18:03:15

+0

@ user731659:高興:) – 2012-08-10 18:04:41

0

執行語句,將工作

+0

謝謝你們兩位。它似乎工作到一定程度,但仍然沒有完全提交插入到數據庫。如果我連續執行兩次相同的查詢,它會給我一個'主鍵'錯誤,我認爲這是一個好兆頭,因爲它顯示查詢正在執行。但是,如果我在第一次插入後運行select語句,數據不在數據庫中。我在這裏錯過了什麼嗎?它是否寫入了一些沒有被提交到實際DB中的臨時數據庫? – Mike 2012-08-10 17:16:12

+0

老兄你甚至不執行插入。閱讀Sqlite – 2012-08-10 17:27:36

+0

我現在看到它。我沒有意識到sqlite3_step是實際執行的。感謝您的幫助。 – Mike 2012-08-10 18:06:23