二. 在wince上使用sqlite数据库:
1. 环境:EVC4 + sp4
1). 在 http://sqlite-wince.sourceforge.net/ 中下载 SQLite for Windows CE 的DLL 源代码.
2). eVC里新建一个“WCE Dynamic-Link Library”工程,命名为:sqlite
3). 在接下来的对话框中选择"An empty Windows CE DLL project",点击 FINISH,之后再点击 OK
4). 将源码中所有的 *.c *.h *.def 复制到工程文件夹下
5). 添加所有除shell.c和tclsqlite.c文件外所有文件到项目中。
6). 编译生成sqlite.lib和sqlite.dll.
2. 在 http://softvoile.com/development/CppSQLite3U/下载 高人用C++封装的sqlite的类,(基于上面生成的sqlite.lib)
一般来讲,我们都会是先在windows上使用sqlite的数据库,并导入基础数据。然后把数据库copy到wince里,再操作。
此类是封装的sqlite的unicode函数,能在windows下和wince下都正常使用,但有一点要注意:
如果要在windows下使用,因为VC6默认是建的_MBCS项目,而如果要调用unicode的函数,生成utf16数据以供在wince下能正常显示中文,则需要把项目的编译参数从_MBCS
改为:UNICODE _UNICODE。
3. 这下我们就可以在evc4里面操作sqlite数据库了:
//打开数据库
CppSQLite3DB db;
//打开或新建一个数据库
db.open(L"//ding.db");
//新建表
db.execDML(L"create table sninfo(id nchar(12), area nvarchar(6), info nvarchar(60),source nchar(6), target nchar(6))");
//查询
CppSQLite3Query q = db.execQuery(L"select * from sninfo where area='广州区'");
CString strTemp;
while (!q.eof())
{
strTemp.Format(_T("%s-%s-%s-%s"),q.fieldValue(0),q.fieldValue(3),q.fieldValue(4),q.fieldValue(1));
m_list.AddString(strTemp); //显示到listbox控件中
q.nextRow();
}
q.finalize();
db.close();
4.对sqlite的数据库操作就介绍到这里,我目前也就用了这么多,更多的我也需要学习,在windows下用sqlite要注意一点的是,数据库的路径中不要含有中文字,否则会打开失败,如果非要用中文,那必须得转成utf-8才行,sqlite内部是通过utf-8来读取的。(wince下可以正常使用中文路径,因为wince默认就是unicode编码)
三. 后记
对比了一下sqlce和sqlite在查询50W记录时的性能,都可以在2秒钟之内完成,(一开始我没建index,查了4分多钟,晕),一定记得要建索引哦。否则查询N慢。
文笔不好,水平有限,记录的不是很清楚,写得不对的地方还请大家指正,一起学习一起进步。