2013-07-09 35 views
0

有人幫助我。 我無法將數據插入到sqlite中。sqlite3_exec!= SQLITE_OK

輸出是「新增添加失敗」。

注意: - 數據庫已創建。 - 新聞是一個對象 我只是覺得問題在於這個功能。 你能告訴我我的代碼有什麼問題嗎? 謝謝。

- (void)addNews:(NSString *)content_caption content_date:(NSString *)content_date content_desk:(NSString *)content_desk content_id:(NSString *)content_id content_img:(NSString *)content_img content_type:(NSString *)content_type content_web_url:(NSString *)content_web_url{ 


char *error; 
if (sqlite3_open([databasePath UTF8String], &database)==SQLITE_OK) { 
    NSString *inserStmt = [NSString stringWithFormat:@"INSERT INTO dBase(CONTENT_CAPTION,CONTENT_DATE, CONTENT_DESK, CONTENT_ID, CONTENT_IMG, CONTENT_TYPE, CONTENT_WEB_URL) values (\'%@\',\'%@\',\'%@\',\'%@\',\'%@\',\'%@\',\'%@\')",content_caption, content_date, content_desk, content_id, content_img, content_type ,content_web_url]; 

    const char *insert_stmt = [inserStmt UTF8String]; 

    if (sqlite3_exec(database, insert_stmt, NULL, NULL, &error)==SQLITE_OK) { 
     NSLog(@"News added"); 

     News *news = [[News alloc]init]; 

     [news setContent_caption:content_caption]; 
     [news setContent_date:content_date]; 
     [news setContent_desk:content_desk]; 
     [news setContent_id:content_id]; 
     [news setContent_img:content_img]; 
     [news setContent_type:content_type]; 
     [news setContent_web_url:content_web_url]; 

     [arrayOfNews addObject:news]; 
    }else{ 
     NSLog(@"News added failed"); 
    } 
    sqlite3_close(database); 
} 

}

+1

我敢打賭數據庫處於應用程序包...谷歌「iOS無法在應用程序包中寫入文件」,你會看到很多愚蠢的。 – 2013-07-09 11:00:39

+0

你能爲我提供合適的解決方案嗎? @ H2CO3 – Template09

+0

我做過 - 谷歌那句話,你會看到它。 – 2013-07-09 11:05:23

回答

0

嘗試用這種

#define SQLITE_TRANSIENT ((sqlite3_destructor_type)-1) 

    const char *insertSql; 
    insertSql = nil; 
    insertSql = "INSERT INTO dBase(CONTENT_CAPTION,CONTENT_DATE, CONTENT_DESK, CONTENT_ID, CONTENT_IMG, CONTENT_TYPE, CONTENT_WEB_URL) values (?,?,?,?,?,?,?)"; 

    if (sqlite3_open([databasePath UTF8String], &database)==SQLITE_OK) { 

     sqlite3_bind_text(insert_statement, 1, [content_caption UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(insert_statement, 2, [content_date UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(insert_statement, 3, [content_desk UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(insert_statement, 4, [content_id UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(insert_statement, 5, [content_img UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(insert_statement, 6, [content_type UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(insert_statement, 7, [content_web_url UTF8String], -1, SQLITE_TRANSIENT); 

    } 
1

首先,你需要設置你的數據庫的路徑。做這樣的

//設置路徑

NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *docsDir = [dirPaths objectAtIndex:0]; 
    databasepath =[docsDir stringByAppendingPathComponent: @"yourDatabase"]; 
NSFileManager *fn=[NSFileManager defaultManager]; 
NSError *error; 
BOOL success=[fn fileExistsAtPath:databasepath]; 
    if(!success) { 
      NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"quizdb"]; 
    success = [fn copyItemAtPath:defaultDBPath toPath:databasepath error:&error]; 
} 

//接下來,您必須插入如下

sqlite3_stmt *statement; 
const char *dbpath=[databasepath UTF8String]; 
if(sqlite3_open(dbpath,&contactDB)==SQLITE_OK) 
{ 
    const char *sqlStatement = "insert into dBase(CONTENT_CAPTION,CONTENT_DATE, CONTENT_DESK, CONTENT_ID, CONTENT_IMG, CONTENT_TYPE, CONTENT_WEB_URL) VALUES (?,?,?,?,?,?,?)"; 
    if (sqlite3_prepare_v2(contactDB,sqlStatement,-1,&statement,NULL) == SQLITE_OK) 
    { 
     sqlite3_bind_text(statement, 1, [content_caption UTF8String], -1, SQLITE_TRANSIENT);  
     sqlite3_bind_text(statement, 2, [content_date UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 3 ,[content_desk UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 4, [content_id UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 5, [content_img UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 6, [content_type UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 7, [content_web_url UTF8String], -1, SQLITE_TRANSIENT);   
    } 
    if (sqlite3_step(statement)!= SQLITE_DONE) 
    { 
     NSLog(@"Save Error:%s",sqlite3_errmsg(contactDB)); 
    } 
    else { 

     NSLog(@"success"); 

     sqlite3_reset(statement); 
       } 
      sqlite3_finalize(statement); 
    } 
    sqlite3_close(contactDB); 

希望它會幫助你..

相關問題