2011-08-25 45 views
0

我想在for sqlite表中使用for循环插入一组值。它只插入一组值。我在这里张贴我的代码:在Sqlite3 i-phone中插入值的数组

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *databasePath = [documentsDirectory stringByAppendingPathComponent:@"myDatabase.sql"]; 

for(int i=0;i<[arr count];i++) 
{ 
    sqlite3 *database; 

    // Open the database from the users filessytem 
    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { 
     NSLog(@"\n inserting data \n"); 
     sqlite3_exec(database, [[NSString stringWithFormat:@"INSERT INTO AnswerConnect VALUES('%@')",[arr objectAtindex:i] ] UTF8String], NULL, NULL, NULL);  
     //sqlite3_finalize(compiledStatement); 
     sqlite3_close(database); 
    }  
} 

在此先感谢。

回答

1

你必须首先准备一个SQLite声明table.Try此项插入数据:

sqlite3_stmt *statement = nil  
const char *sql = "insert into tablename (col1,col2) Values(?, ?)"; 

if(sqlite3_prepare_v2(database, sql, -1, &statement, NULL) != SQLITE_OK) 
{ 
    NSLog(@"Error while creating add statement. '%s'", sqlite3_errmsg(database)); 
} 

for(int i=0;i<[arr count];i++) 
{ 
     sqlite3_bind_text(statement, 1,[[arr objectAtindex:i] UTF8String] , -1, SQLITE_TRANSIENT); 

    if(SQLITE_DONE != sqlite3_step(add_statement)) 
    { 
    NSLog(@"Error while inserting result data. '%s'", sqlite3_errmsg(database)); 
    } 
    //Reset the add statement. 
    sqlite3_reset(statement); 
} 
1

不要这样做!不要像这样循环打开/关闭SQLite连接!打开循环外的数据库句柄,而不仅仅是使用指针。在这种请求中,插入格式是不安全的,因为SQL语句可能会使用某种注入代码进行编译。改为使用sqlite3_stmt并将值绑定到它。另外,如果只编译sqlite3_stmt的一个实例并重新使用它,那么这会比编译新的语句提供更好的性能。

每个数据集有多少列?它是否像字符串一样从单个数据集中只插入一个值?