Iphone 在Sqlite3 i-phone中插入值数组

Iphone 在Sqlite3 i-phone中插入值数组,iphone,objective-c,cocoa-touch,sqlite,Iphone,Objective C,Cocoa Touch,Sqlite,我试图使用for循环在sqlite表中插入一组值。它只插入一组值。我在这里发布我的代码: NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *databasePath = [documentsDirectory string

我试图使用for循环在sqlite表中插入一组值。它只插入一组值。我在这里发布我的代码:

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);
    }       
}
NSArray*path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString*documentsDirectory=[paths objectAtIndex:0];
NSString*databasePath=[DocumentsDirectoryStringByAppendingPathComponent:@“myDatabase.sql”];

对于(int i=0;i不要这样做!不要像那样在循环中打开/关闭SQLite连接!从循环外部打开数据库句柄,而不仅仅是在其上使用指针。在这种请求中,插入格式是不安全的,因为SQL语句可能是用某种注入代码编译的。请改用
sqlite3_stmt
并将值绑定到它。另外,如果只编译一个
sqlite3\u stmt
实例并重用它,这将比一直编译新语句提供更好的性能


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

您必须首先准备一个sqlite语句以在表中插入数据。请尝试以下操作:

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);
}
sqlite3\u stmt*语句=nil
const char*sql=“插入表名(col1,col2)值(?,)”;
if(sqlite3\u prepare\u v2(数据库,sql,-1,&语句,NULL)!=SQLITE\u OK)
{
NSLog(@“创建add语句时出错。“%s”,sqlite3_errmsg(数据库));
}
对于(int i=0;i