一、下载sqlite源码
去sqlite官网http://www.sqlite.org/download.htm下载最新的source code。我下载的是sqlite-amalgamation-3071401.zip。解压后会得得到四个文件(shell.c、sqlite3.c、sqlite3.h、sqlite3ext.h)。
二、编译生成WINCE下DLL
1. 在VS2005下新建一个Win32智能设备项目,选择相应的SDK,并选择应用程序类型为DLL。
2. 将sqlite-amalgamation-3071401.zip解压后的sqlite3.c、sqlite3.h文件拷贝到工程目录下并添加至工程目录。如下图所示。
3.在预处理中增加sqlITE_ENABLE_RTREE和sqlITE_ENABLE_COLUMN_MetaDATA宏定义。如图所示:
4.编译项目,会提示“error LNK2019: 无法解析的外部符号 localtime_s,该符号在函数 osLocaltime 中被引用”错误,此错误的解决方法是将localtime_s替换成_localtime64_s即可。
5.编译成功后会发现目录下会生成sqlite.dll文件,但会发现没有lib文件,这样在使用这个DLL时是没法编译的,所以还需要导出.lib文件,解决方法是在sqlite官网上下载sqlite-dll-win32-x86-XXXXXX.zip文件,解压后将目录下的sqlite3.def文件拷贝到DLL工程目录,在项目属性--链接器--输入--模块定义文件中添加sqlite3.def,如下图所示,然后编译即可。
这样sqlite的编译工作就大功告成了。
三、WINCE 下sqlite测试
- #include<windows.h>
- //sqlite3的回调函数
- intsqliteQueryResultCallBack(void*para,intn_column,87); background-color:inherit; font-weight:bold">char**column_value,87); background-color:inherit; font-weight:bold">char**column_name)
- intmain(intargc,87); background-color:inherit; font-weight:bold">char*argv[])
- {
- sqlite3*db=NULL;//声明sqlite关键结构指针
- intresult;
- //打开或创建数据库
- result=sqlite3_open("NAND2\\sqlite.db",&db);
- if(result!=sqlITE_OK)
- //数据库打开失败
- return-1;
- }
- char*errmsg=NULL;
- //数据库操作代码
- #if1
- //创建一个测试表,表名叫MyTable,有2个字段:ID和name。其中ID是一个自动增加的类型,以后insert时可以不去指定这个字段,它会自己从0开始增加
- result=sqlite3_exec(db,"createtableMyTable(IDintegerprimarykeyautoincrement,namenvarchar(32))",NULL,&errmsg);
- printf("创建表失败,错误码:%d,错误原因:%s\n",result,errmsg);
- }
- //插入记录
- "insertintoMyTable(name)values('张三')",248); line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> printf("插入记录失败,错误码:%d,错误原因:%s\n","insertintoMyTable(name)values('李四')",248); line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> #endif
- //开始查询数据库
- result=sqlite3_exec(db,"select*fromMyTable",sqliteQueryResultCallBack,&errmsg);
- //关闭数据库
- sqlite3_close(db);
- return0;
- printf("******************************\n");
- printf("记录包含%d个字段\n",n_column);
- for(inti=0;i<n_column;i++)
- printf("字段名:%s字段值:%s\n",column_name[i],column_value[i]);
- return0;
- }