WINCE下使用SQLite数据库

前端之家收集整理的这篇文章主要介绍了WINCE下使用SQLite数据库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
sqlite是一个开源的跨平台的轻型数据库,WINCE本身也有一个自带数据库sqlCE ,但占用的资源会比较大。最近项目中考虑用到sqlite,因此特别研究了一下,下面介绍一下具体的移植方法。@H_502_1@

一、下载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测试

新建一个sqlite测试程序,测试代码如下:

  1. #include<windows.h>@H_502_1@@H_502_1@@H_502_1@
  2. @H_502_1@
  3. //sqlite3的回调函数@H_502_1@@H_502_1@@H_502_1@
  4. int@H_502_1@sqliteQueryResultCallBack(@H_502_1@void@H_502_1@*para,@H_502_1@int@H_502_1@n_column,87); background-color:inherit; font-weight:bold">char@H_502_1@**column_value,87); background-color:inherit; font-weight:bold">char@H_502_1@**column_name)@H_502_1@@H_502_1@
  5. @H_502_1@
  6. int@H_502_1@main(@H_502_1@int@H_502_1@argc,87); background-color:inherit; font-weight:bold">char@H_502_1@*argv[])@H_502_1@@H_502_1@
  7. {@H_502_1@
  8. sqlite3*db=NULL;//声明sqlite关键结构指针@H_502_1@@H_502_1@@H_502_1@
  9. int@H_502_1@result;@H_502_1@@H_502_1@
  10. //打开或创建数据库@H_502_1@@H_502_1@@H_502_1@
  11. result=sqlite3_open("NAND2\\sqlite.db"@H_502_1@,&db);@H_502_1@@H_502_1@
  12. if@H_502_1@(result!=sqlITE_OK)@H_502_1@@H_502_1@
  13. //数据库打开失败@H_502_1@@H_502_1@@H_502_1@
  14. return@H_502_1@-1;@H_502_1@@H_502_1@
  15. }@H_502_1@
  16. char@H_502_1@*errmsg=NULL;@H_502_1@@H_502_1@
  17. //数据库操作代码@H_502_1@@H_502_1@@H_502_1@
  18. #if1@H_502_1@@H_502_1@@H_502_1@
  19. //创建一个测试表,表名叫MyTable,有2个字段:ID和name。其中ID是一个自动增加的类型,以后insert时可以不去指定这个字段,它会自己从0开始增加@H_502_1@@H_502_1@@H_502_1@
  20. result=sqlite3_exec(db,"createtableMyTable(IDintegerprimarykeyautoincrement,namenvarchar(32))"@H_502_1@,NULL,&errmsg);@H_502_1@@H_502_1@
  21. printf("创建表失败,错误码:%d,错误原因:%s\n"@H_502_1@,result,errmsg);@H_502_1@@H_502_1@
  22. }@H_502_1@
  23. //插入记录@H_502_1@@H_502_1@@H_502_1@
  24. "insertintoMyTable(name)values('张三')"@H_502_1@,248); line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> printf("插入记录失败,错误码:%d,错误原因:%s\n"@H_502_1@,"insertintoMyTable(name)values('李四')"@H_502_1@,248); line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> #endif@H_502_1@@H_502_1@@H_502_1@
  25. //开始查询数据库@H_502_1@@H_502_1@@H_502_1@
  26. result=sqlite3_exec(db,"select*fromMyTable"@H_502_1@,sqliteQueryResultCallBack,&errmsg);@H_502_1@@H_502_1@
  27. //关闭数据库@H_502_1@@H_502_1@@H_502_1@
  28. sqlite3_close(db);@H_502_1@
  29. return@H_502_1@0;@H_502_1@@H_502_1@
  30. printf("******************************\n"@H_502_1@);@H_502_1@@H_502_1@
  31. printf("记录包含%d个字段\n"@H_502_1@,n_column);@H_502_1@@H_502_1@
  32. for@H_502_1@(@H_502_1@int@H_502_1@i=0;i<n_column;i++)@H_502_1@@H_502_1@
  33. printf("字段名:%s字段值:%s\n"@H_502_1@,column_name[i],column_value[i]);@H_502_1@@H_502_1@
  34. return@H_502_1@0;@H_502_1@@H_502_1@
  35. }@H_502_1@
    }@H_502_1@
四、sqlite可视化管理工具@H_502_1@ @H_502_1@

sqlite本身没有可视化管理工具,只提供了一个命令行的管理工具sqlite.exe。有一个第三方的可视化管理工具sqlite Expert,用着还可以,下载地址:@H_502_1@http://www.sqliteexpert.com/download.html

猜你在找的Sqlite相关文章