利用VS2005编译sqlite3.5.1
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) 主要代码如下:
#define
FILE_DB_NAMETEXT("unitech.db")
// 获取程序当前路径 void GetCurrentDirectory(CString & szPath) { wchar_tpBuf[ 256 ]; GetModuleFileName(NULL,pBuf, sizeof (pBuf) / sizeof (wchar_t)); szPath = pBuf; szPath = szPath.Left(szPath.ReverseFind( ' // ' ) + 1 ); } void CDemo2Dlg::OnButton1() { CStringstrDbPath; GetCurrentDirectory(strDbPath); strDbPath += FILE_DB_NAME; Cppsqlite3DBdb; try { // 打开或新建一个数据库 db.open(strDbPath); // 判断表名是否存在 if (db.tableExists(L " tblTest " )) { AfxMessageBox(L " Table:tblTestisexisted! " ); } else // 不存在 { AfxMessageBox(L " Table:tblTestnotexisted! " ); // 新建表 db.execDML(L " createtabletblTest(empnovarchar(20),empnamevarchar(20)) " ); } // 插入一笔记录 db.execDML(L " insertintotblTestvalues('编号','姓名') " ); // 插入一笔记录 db.execDML(L " insertintotblTestvalues('精瑞电脑','Answer') " ); // 删除一笔记录 db.execDML(L " deletefromtblTestwhereempno='编号' " ); // 插入10笔记录(使用事务) TCHARbuf[ 256 ]; db.execDML(L " begintransaction; " ); for ( int i = 0 ;i < 10 ;i ++ ) { memset(buf, 0 , sizeof (buf)); wsprintf(buf,L " insertintotblTestvalues('no%d','name%d'); " ,i,i); db.execDML(buf); } db.execDML(L " committransaction; " ); // 更新一笔记录 db.execDML(L " updatetblTestsetempname='answer'whereempno='no1' " ); // 获取总笔数 int count = db.execScalar(L " selectcount(*)fromtblTest; " ); TCHARszCount[ 50 ]; memset(szCount, sizeof (szCount)); wsprintf(szCount,L " Count:%d " ,count); AfxMessageBox(szCount); // 获取每一笔 Cppsqlite3Queryq = db.execQuery(L " select*fromtblTest " ); while ( ! q.eof()) { AfxMessageBox(q.fieldValue( 0 )); q.nextRow(); } q.finalize(); db.close(); AfxMessageBox(L " OK " ); } catch (Cppsqlite3Exceptionex) { AfxMessageBox(ex.errorMessage()); } } |