2011-09-20 132 views
0

我想創建(成功),插入(問題在這裏)和選擇(只是爲了檢查我我是正確的)記錄到數據庫中。無法將數據插入到iPhone上的sqlite數據庫

我的整個代碼如下:

-(NSInteger) InsertDataInDatabae { 

    char *sqlStatement; 
    sqlite3 *pDb; 
    char *errorMsg; 
    int returnCode; 
    char *databaseName; 
    databaseName="WaitListAll.db"; 
    returnCode = sqlite3_open(databaseName, &pDb); 

    if(returnCode!=SQLITE_OK) { 
     NSLog(@"Error in opening Database"); 
     return -1; 
    } 
    sqlStatement="drop table if exists waitlistallTable"; 
    returnCode = sqlite3_exec(pDb, sqlStatement, NULL, NULL, &errorMsg); 

    if(returnCode!=SQLITE_OK) { 
     NSLog(@"Table could not be droped"); 
     return -1; 
    } 

    sqlStatement="create table waitlistallTable(source varchar(10),waitlistid varchar(10),""restaurantid varchar(10),consumerid varchar(10), timeadded varchar(10))"; 

    returnCode=sqlite3_exec(pDb, sqlStatement, NULL, NULL, &errorMsg); 
    if(returnCode!=SQLITE_OK) { 
     NSLog(@"Table could not be Created Error:%@",errorMsg);//**getting error here as:unrecognized token ""** 
     return -1; 
    } 

    NSInteger i; 
    for(i=0;i<[waitListAllRecordsArray count];i++) { 
     NSDictionary *objDict=[waitListAllRecordsArray objectAtIndex:i]; 
     NSString *src,*wid,*rid,*cid,*tadded; 
     src=[objDict objectForKey:@"SOURCE"]; 
     wid=[objDict objectForKey:@"WAITLISTID"]; 
     rid=[objDict objectForKey:@"RESTAURANTID"]; 
     cid=[objDict objectForKey:@"CONSUMERID"]; 
     tadded=[objDict objectForKey:@"TIMEADDED"]; 
     printf("\n %s %s %s %s %s",src,wid,rid,cid); 
     sqlStatement = sqlite3_mprintf("insert into waitlistallTable values(%s, %s, %s, %s, %s)",src,wid,rid,cid,tadded); 

     returnCode=sqlite3_exec(pDb, sqlStatement, NULL, NULL, &errorMsg); 

     if(returnCode!=SQLITE_OK) { 
      printf("Error in inserting record :%s",errorMsg); 
      return -1; 
     } 
    } 

    sqlite3_stmt *statement; 
    sqlStatement=sqlite3_mprintf("selet * from waitlistallTable"); 
    returnCode = sqlite3_prepare_v2(pDb, sqlStatement, strlen(sqlStatement), &statement,NULL); 
    if(returnCode!=SQLITE_OK) { 
     NSLog(@"Record could not be Inserted Error:%@",errorMsg); 
     return -1; 
    } 

    returnCode=sqlite3_step(statement); 
    while(returnCode==SQLITE_ROW) { 
     char *src,*wid,*rid,*cid,*tadded; 
     src=sqlite3_column_text(statement, 0); 
     wid=sqlite3_column_text(statement, 1); 
     rid=sqlite3_column_text(statement, 2); 
     cid=sqlite3_column_text(statement, 3); 
     tadded=sqlite3_column_text(statement, 4); 
     NSLog(@"%@\t %@\t %@ \t%@ %@",src,wid,rid, cid,tadded); 
    } 

    sqlite3_finalize(statement); 
    sqlite3_close(&pDb); 

    // sqlite3_free(sqlStatement); 
    //NSLog(@"%@\t %@\t %@ \t%@ %@",src,wid,rid, cid,tadded);  //NSLog(@"*******object for dictionary is **************%@",[objDict objectForKey:@"SOURCE"]); 
} 

任何建議將是非常有益的。 感謝

+0

你已經設置的所有列類型插入值到'varchar(10)'。如果它們超過10個字節,插入'NSString * src,* wid,* rid,* cid,* tadded;'值會是這個問題嗎? – denolk

+0

@denolk謝謝!讓我檢查一下! – Alok

+0

來自waitlistallTable的「selet *」錯誤或此問題中的拼寫錯誤? – Tim

回答

0

您正在嘗試插入的NSString對象與%s格式, 嘗試:

sqlStatement=sqlite3_mprintf("insert into waitlistallTable values(%s, %s, %s, %s, %s)",[src UTF8String],[wid UTF8String],[rid UTF8String],[cid UTF8String],[tadded UTF8String]); 

希望對大家有所幫助..!

+0

謝謝你!我必須從你的sqlStatement = sqlite3_mprintf(「insert into waitlistallTable values('%q','%q','%q','%q','%q')」,[src UTF8String],[ wid UTF8String],[rid UTF8String],[cid UTF8String],[tadded UTF8String]);剛剛添加'%q'並且工作正常 – Alok

0

INSERT INTO歷史(prescriptionname,prescriptiondate,doctorname,PERSONNAME,簡檔)VALUES(?,?,?,?,?)

使用上述格式

+0

ram!你能否詳細說明一下,以便你的答案可能有用!坦克 – Alok

相關問題