织梦CMS - 轻松建站从此开始!

罗索

将sqlite3编译成给WINCE使用的DLL,并封装成C++的步骤(使用VS200

落鹤生 发布于 2010-07-13 22:26 点击:次 
利用 VS2005 编译 SQLite3.5.1
TAG:

1, 到http://sourceforge.net/projects/sqlite-wince/files/

下载 sqlite-wince-3.x下面的

sqlite-wince-3.3.5

2. 创建一个Win32 Smart Device Project,项目名字为sqlite3,Application Type选择DLL,创建项目完成后,将所有sqlite-wince-3.3.5下面的文件拷贝到项目的目录(除了tclsqlite.c和shell.c这两个文件)

3. 设置project的一些属性,

首先将sqlite3.cpp改名为sqlite.c,并注释掉整个文件里面的代码,包括include的头文件,因为我们待会儿会按照C语言来编译,而不是C++,如果按照C++编译,会有很多语法错误,当然,你也可以逐条修改语法错误,然后编译(这个我没试过,应该没问题);另外,从项目中删掉stdafx.cpp,这个文件没用。

其次,将编译模式改为c模式(TC)。位置:Project->Properties->Configuration Properties->C/C++->Advanced->Compile As

再次,Project->Properties->C/C++->Precompiled Header->Create/Use Precompiled Header: Not using precompiled  Header 

再次,Project->Properties->Linker->Input-> Module Definition File:  输入“sqlite3.def”

再次,有可能会出现unresolved external symbol @__security_check_cookie@4这个链接错误,做如下操作即可:Project->Properties->C/C++->Code Generation, Buffer Security Check选择No

上述过程完成后即可得到一个sqlite3.lib和sqlite3.dll

4. 如果想使用c++封装,可以到下面下载:http://softvoile.com/development/CppSQLite3U/ 

下面的代码是测试(代码是转载的)

4> 有了 SQLite DLL 及 CppSQLite3U 后,便可以很方便地使用 SQLITE :(步骤3中,a链接页画下就有DEMO)

主要代码如下:

  1. #define FILE_DB_NAME    TEXT("unitech.db") 
  2.  
  3. //获取程序当前路径 
  4. void GetCurrentDirectory(CString &szPath) 
  5.     wchar_t pBuf[256]; 
  6.     GetModuleFileName(NULL,pBuf,sizeof(pBuf)/sizeof(wchar_t)); 
  7.     szPath=pBuf; 
  8.     szPath = szPath.Left(szPath.ReverseFind('\\')+1); 
  9.  
  10. void CDemo2Dlg::OnButton1()  
  11.     CString strDbPath; 
  12.     GetCurrentDirectory(strDbPath); 
  13.     strDbPath += FILE_DB_NAME; 
  14.  
  15.     CppSQLite3DB db; 
  16.     try 
  17.     { 
  18.         //打开或新建一个数据库 
  19.         db.open(strDbPath); 
  20.          
  21.         //判断表名是否存在 
  22.         if(db.tableExists(L"tblTest")) 
  23.         { 
  24.             AfxMessageBox(L"Table: tblTest is existed!"); 
  25.         } 
  26.         else //不存在 
  27.         { 
  28.             AfxMessageBox(L"Table: tblTest not existed!"); 
  29.             //新建表 
  30.             db.execDML(L"create table tblTest
  31. (empno varchar(20), empname varchar(20))"); 
  32.         } 
  33.  
  34.         //插入一笔记录 
  35.         db.execDML(L"insert into tblTest values(' 编号', '姓名')"); 
  36.         //插入一笔记录 
  37.         db.execDML(L"insert into tblTest values(' 精瑞电脑', 'Answer')"); 
  38.  
  39.         //删除一笔记录 
  40.         db.execDML(L"delete from tblTest where empno=' 编号'"); 
  41.  
  42.         //插入10笔记录(使用事务) 
  43.         TCHAR buf[256]; 
  44.         db.execDML(L"begin transaction;"); 
  45.         for (int i = 0; i < 10; i++) 
  46.         { 
  47.             memset(buf, 0, sizeof(buf)); 
  48.             wsprintf(buf, L"insert into tblTest
  49.  values ('no%d', 'name%d');", i, i); 
  50.             db.execDML(buf); 
  51.         } 
  52.         db.execDML(L"commit transaction;"); 
  53.  
  54.         //更新一笔记录 
  55.         db.execDML(L"update tblTest set empname='answer' where empno='no1'"); 
  56.      
  57.         //获取总笔数 
  58.         int count = db.execScalar(L"select count(*) from tblTest;"); 
  59.         TCHAR szCount[50]; 
  60.         memset(szCount, 0, sizeof(szCount)); 
  61.         wsprintf(szCount, L"Count:%d", count); 
  62.         AfxMessageBox(szCount); 
  63.  
  64.         //获取每一笔 
  65.         CppSQLite3Query q = db.execQuery(L"select * from tblTest"); 
  66.         while (!q.eof()) 
  67.         { 
  68.             AfxMessageBox(q.fieldValue(0)); 
  69.             q.nextRow(); 
  70.         } 
  71.         q.finalize(); 
  72.  
  73.         db.close(); 
  74.         AfxMessageBox(L"OK"); 
  75.     } 
  76.     catch(CppSQLite3Exception ex) 
  77.     { 
  78.         AfxMessageBox(ex.errorMessage()); 
  79.     } 

 

(dotphoenix)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201007/9821.html]
本文出处:CSDN博客 作者:dotphoenix
顶一下
(3)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容