sqlite MySQL并发_sqlite并发问题

我正在使用一个使用sqlite数据库的iPhone应用程序.该应用程序在后台线程中使用主线程中的UI下载Internet数据.后台下载线程可以在数据库上执行INSERT,UPDATE和SELECT. UI层还可以通过执行UPDATE和SELECT与数据库交互.如果我在后台线程下载时没有与UI进行大量交互,一切正常.但是,当在下载过程中执行主(UI)线程上的大量UPDATE时,我开始遇到问题.

应用程序在尝试运行数据库功能时始终退出.它退出EXC_BAD_ACCESS,我没有看到任何错误.例如,它最后一次退出时以sqlite3_step结束:

sqlite3_stmt *statement;

const char *query = "INSERT OR IGNORE INTO `names` (`id`,`name`) VALUES (?,?);";

if(sqlite3_prepare_v2(database,query,-1,&statement,NULL) != sqlITE_OK){

NSAssert1(0,@"Error while creating insert statement. '%s'",sqlite3_errmsg(database));

return NO;

}

sqlite3_bind_int(statement,1,id);

sqlite3_bind_text(statement,2,name,sqlITE_TRANSIENT);

if(sqlite3_step(statement) != sqlITE_DONE)

NSAssert1(0,@"Error while inserting. '%s'",sqlite3_errmsg(database));

sqlite3_finalize(statement);

它并不总是退出sqlite3_step,有时会退出sqlite3_prepare_v2或sqlite3_exec.我已经尝试将这些语句放在循环中,如果它没有返回OK,请再试一次,但这也不起作用:

int returnCode = 0;

do{

returnCode = sqlite3_step(statement);

if(returnCode != sqlITE_DONE){

usleep(20);

}

}while(returnCode != sqlITE_DONE);

我也尝试过sql事务,但这没有任何区别.我怎么解决这个问题?它似乎是一个相当基本的并发问题,但我没有看到任何适合我的东西.

谢谢你的帮助,

贾斯汀

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值