在iPhone上的SQLite DB中插入1000行16秒?

vin*_*ent 6 sqlite iphone

我试图在我的sqlite数据库中插入1000行,但是花了超过16秒..我的代码中有什么问题我没看到?

 NSLog(@"--start--");

 if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
  static sqlite3_stmt *compiledStatement;

  for(int k = 0; k < 1000; k++)
   sqlite3_exec(database, [[NSString stringWithFormat:@"insert into myTable (id, name) values ('%i', 'a')", k] UTF8String], NULL, NULL, NULL);

  sqlite3_finalize(compiledStatement);

  sqlite3_close(database);
 }

 NSLog(@"--stop--");


start : 2010-11-27 11:21:11.704 
stop  : 2010-11-27 11:21:27.908
Run Code Online (Sandbox Code Playgroud)

谢谢 !

Bas*_*Ben 13

这是由于SQLite的自动提交.你需要打电话sqlite3_exec:

BEGIN TRANSACTION
Run Code Online (Sandbox Code Playgroud)

现在像以前一样插入所有记录.完成后.执行:

COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)

这应该够了吧.

同时此FAQ问题将解释为什么它是如此的慢得多.它实际上比常见问题解答中所述的每秒几十个查询要快得多,但由于iPhone上闪存的性质,这似乎是正常的.


vin*_*ent 7

我最后在插入查询中添加了这两行:

sqlite3_exec(database, "BEGIN", 0, 0, 0);

sqlite3_exec(database, "COMMIT", 0, 0, 0);


start : 2010-11-27 13:07:26.022
stop  : 2010-11-27 13:07:26.285
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助 !


Ali*_*ini 1

您可能需要执行批量插入,而不是执行 1000 次 sql 操作