分类: 数据库开发技术
2010-07-04 11:05:26
在对sqlite3 insert into等操作时速度比较慢。
原因:它以文件的形式存在磁盘中,每次访问时都要打开一次文件,如果对数据库进行大量的操作,就很慢。
解决办法:用事物的形式提交,因为开始事务后,进行的大量操作语句都保存在内存中,当提交时才全部写入数据库,此时,数据库文件也只用打开一次。如果操作错误,还可以回滚事务。
接口:事务的操作没有特别的接口函数,就是一个普通的sql语句而已,分别如下:
|
|
开发过程遇到这样的问题:
分别对两个数据库文件的不同表进行操作,执行顺序为:open db A->begin trasaction->open db B->select from db
B->close db B->select from db A->rollbak or commit->close db A
测试发现,select from db B这一步会出错,错误信息为library routine called out of sequence,出错后执行rollback,这一步也会报错。
原来以为原因是:开始一个事务只能对一个数据库进行操作。
测试发现,即使不开始事务,执行顺序为:open db A->open db B->select from db B->close db B->select from db A->close db A,仍会出现ibrary routine called out of sequence的错误。
难道打开一个数据库,在关闭其之前不能打开其他数据库?
难道sqlite的并发执行需要用户自己来控制?
今天发现,以上出错原因可能是总控程序和子程序的全局变量一致(都是sqlite3 *db),导致总控程序的全局变量被修改。
具体还需进一步研究。