首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在iPhone上的SQLite数据库中插入1000行需要16秒?

在iPhone上的SQLite数据库中插入1000行需要16秒?
EN

Stack Overflow用户
提问于 2010-11-27 18:52:07
回答 6查看 1.9K关注 0票数 6

我尝试在我的sqlite数据库中插入1000行,但是花费了超过16秒的时间。我的代码中有没有什么地方是我看不到的?

代码语言:javascript
运行
复制
 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

谢谢!

EN

回答 6

Stack Overflow用户

发布于 2010-11-27 20:21:37

这是由于SQLite的自动提交。您需要使用以下命令调用sqlite3_exec

代码语言:javascript
运行
复制
BEGIN TRANSACTION

现在像以前一样插入所有记录。在你做完这件事之后。执行:

代码语言:javascript
运行
复制
COMMIT TRANSACTION

这应该能起到作用。

此外,this FAQ question还将解释为什么它的速度要慢得多。它实际上比常见问题中所说的每秒几十次查询要快得多,但由于iPhone上闪存的性质,这似乎是正常的。

票数 13
EN

Stack Overflow用户

发布于 2010-11-27 20:10:22

最后,我在insert查询中添加了这两行:

代码语言:javascript
运行
复制
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

感谢您的帮助!

票数 7
EN

Stack Overflow用户

发布于 2010-11-27 18:55:50

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4291244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档