随笔分类 - SQLite
摘要:上一篇介绍的sqlite3_exec 是使用回调来执行对select结果的操作。还有一个方法可以直接查询而不需要回调。但是,我个人感觉还是回调好,因为代码可以更加整齐,只不过用回调很麻烦,你得声明一个函数,如果这个函数是类成员函数,你还不得不把它声明成static的(要问为什么?这又是C++基础了。C++成员函数实际上隐藏了一个参数:this,C++调用类的成员函数的时候,隐含把类指针当成函数的第一个参数传递进去。结果,这造成跟前面说的sqlite 回调函数的参数不相符。只有当把成员函数声明成static 时,它才没有多余的隐含的this参数)。虽然回调显得代码整齐,但有时候你还是想要非回调的
阅读全文
摘要:打开数据库链接sqlite3_open用法原型:int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */);用这个函数开始数据库操作。需要传入两个参数,一是数据库文件名,比如:E:/test.db。文件名不需要一定存在,如果此文件不存在,sqlite会自动建立它。如果它存在,就尝试把它当数据库文件来打开。二是sqlite3**,即前面提到的关键数据结构。这个结构底层细节如何,你不要管它。函数返回值表...
阅读全文
摘要:sqlite 插入数据很慢的原因:sqlite在没有显式使用事务的时候会为每条insert都使用事务操作,而sqlite数据库是以文件的形式存在磁盘中,就相当于每次访问时都要打开一次文件,如果对数据进行大量的操作,时间都耗费在I/O操作上,所以很慢。解决方法是显式使用事务的形式提交:因为我们开始事务后,进行的大量操作的语句都保存在内存中,当提交时才全部写入数据库,此时,数据库文件也就只用打开一次。我在没有显式使用事务形式插入100条数据时用了12.226s;用显式事务形式,插入100条只用了0.172s,插入1000000条也才34.891s,相关很大吧。显式使用事务的例子:#include
阅读全文
摘要:1. 生成 .lib 文件 从http://www.sqlite.org下载SQLite3.dll和SQLite3.def文件,以vc++6.0为例:第一步:找到lib.exe所在目录一般都在X:\Program Files\Microsoft Visual Studio\VC98\Bin下,在“运行”中输入cmd,然后切换到该目录下第二步:使用LIB命令生成.lib文件很多网页上都介绍,使用LIB /DEF:sqlite3.def /machine:IX86即可生成,可是我使用它时遇到一些小问题。这里就不说了,说说应该注意的几点问题吧。第一个,你的sqlite3.def要是没有在 X:\P.
阅读全文