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

前端之家收集整理的这篇文章主要介绍了将sqlite3编译成给WINCE使用的DLL,并封装成C++的步骤(使用VS2005)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


利用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.cshell.c这两个文件)

3. 设置project的一些属性


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

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

@H_403_52@

再次,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()); } }
原文链接:https://www.f2er.com/sqlite/200164.html

猜你在找的Sqlite相关文章