利用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
@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