2012-04-11 81 views
1

我的代碼是:sqlite的數據保存錯誤

const char *sqlInsertString; 
sqlite3_stmt *addStatement; 
sqlInsertString=sqlite3_mprintf("insert into AnimalTable(name,propertyID,animalID,breed,dateofbirth,sex,notes,imageData) values" "('%s','%s','%s','%s','%s','%s','%s','%d')",nameString,propertyString,animalidString,breedString,dateofbirth,sexString,notesString,imageData); 
    if (sqlite3_open([sqlFile UTF8String],&database)==SQLITE_OK) { 
     sqlite3_prepare_v2(database, sqlInsertString, -1, &addStatement, NULL); 
     if (sqlite3_step(addStatement)==SQLITE_DONE) { 
      sqlite3_bind_blob(addStatement, 1, [imageData bytes], [imageData length], NULL); 
      sqlite3_finalize(addStatement); 
      NSLog(@"Data saved"); 

     } 
     else 
      NSLog(@"Some Error occurred"); 
    } 

    sqlite3_close(database); 

我想我做錯了什麼,不能看着辦吧。 它顯示一些錯誤發生味精,每當我添加數據到sqlite。 而且還得到異常NSInternalInconsistencyException沒有這樣的表:AnimalTable。 但AnimalTable存在,當我在sqlmanager中執行查詢它正常運行。

+0

offtopic:請使用爲將來的項目FMDatabase:https://github.com/ ccgus/FMDB – CarlJ 2012-04-11 11:55:10

回答

1

下面的代碼是使用的存儲BLOB類型的數據存儲,

願這有助於你

if(sqlite3_prepare_v2(database, sqlInsertQry, -1, &compiledStmt, NULL) == SQLITE_OK){ 
       for (NSDictionary *dObj in arForData) { 
        sqlite3_bind_blob(compiledStmt,1,[[dObj valueForKey:@"NotiData"] bytes],[[dObj valueForKey:@"NotiData"] length],NULL); 
        PUT_Date(2,@"fireDate"); 


        NSUInteger err = sqlite3_step(compiledStmt); 
        if (err != SQLITE_DONE){ 
         //NSLog(@"error while binding %d %s",err, sqlite3_errmsg(database)); 
         //NSLog(@"%@",dObj); 
        } 
        sqlite3_reset(compiledStmt); 
       } 
       sqlite3_finalize(compiledStmt);  
      }