首页>
技术资讯>
详情

SQLite3 for WinCE or Mobile (EVC篇)

2016-05-14 来源:CC 阅读量: 0
关键词: WINCE

    在WinCE,Mobile上,对SQLite的开发,目前还是以。net compact framework的封装居多。

    在 http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers 可找到各种语言对 SQLite 的封装。

    下面将介绍如何在EVC下使用SQLite.

    1> 开发工具: EVC4.0 + SP2

    2> 编译出所需的 SQLite DLL.

    a> 在 http://sqlite-wince.sourceforge.net/ 中下载 SQLite for Windows CE 的DLL 源代码。

    b)。 打开eVC新建一个“WCE Dynamic-Link Library”工程,命名为:sqlite3

    c)。 在接下来的对话框中选择"An empty Windows CE DLL project",点击 FINISH,之后再点击 OK

    d)。 将源码中所有的 *.c *.h *.def 复制到工程文件夹下

    e)。 在 Source Files 中添加除shell.c和tclsqlite.c这两个文件以外所有 *.c 的SQLite源文件文件

    f)。 在 Header Files 中添加所有 *.h 的SQLite源文件文件

    g)。 将 SQLite 源文件中的 sqlite3.def 文件添加到在工程的Source File中

    h)。 在eVC中选好你要编译的平台,例如“Win32(WCE ARMV4I) Release”

    i)。 好了,开始编译,Build(F7)一下

    3> 编译出DLL后,需要使用C++对DLL中的功能进行封装。有如下资源可参考:

    a> http://www.codeproject.com/KB/database/CppSQLite.aspx

    b> http://www.adp-gmbh.ch/sqlite/wrapper.html

    如上 a,b 资源,尽管已对 SQLite Dll 中的功能进行封装,然而 WinCE,Mobile上使用的是UNICODE编码,而 a,b 却并未支持UNICODE.所以真正要用到的是 a 资源中的 unicode 版本,如下:

    http://softvoile.com/development/CppSQLite3U/

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

    主要代码如下:

    #define FILE_DB_NAME    TEXT("unitech.db")

    //获取程序当前路径

    void GetCurrentDirectory(CString &szPath)

    {

    wchar_t pBuf[256];

    GetModuleFileName(NULL,pBuf,sizeof(pBuf)/sizeof(wchar_t));

    szPath=pBuf;

    szPath = szPath.Left(szPath.ReverseFind('\\')+1);

    }

    void CDemo2Dlg::OnButton1()

    {

    CString strDbPath;

    GetCurrentDirectory(strDbPath);

    strDbPath += FILE_DB_NAME;

    CppSQLite3DB db;

    try

    {

    //打开或新建一个数据库

    db.open(strDbPath);

    //判断表名是否存在

    if(db.tableExists(L"tblTest"))

    {

    AfxMessageBox(L"Table: tblTest is existed!");

    }

    else //不存在

    {

    AfxMessageBox(L"Table: tblTest not existed!");

    //新建表

    db.execDML(L"create table tblTest(empno varchar(20), empname varchar(20))");

    }

    //插入一笔记录

    db.execDML(L"insert into tblTest values('编号', '姓名')");

    //插入一笔记录

    db.execDML(L"insert into tblTest values('精瑞电脑', 'Answer')");

    //删除一笔记录

    db.execDML(L"delete from tblTest where empno='编号'");

    //插入10笔记录(使用事务)

    TCHAR buf[256];

    db.execDML(L"begin transaction;");

    for (int i = 0; i < 10; i++)

    {

    memset(buf, 0, sizeof(buf));

    wsprintf(buf, L"insert into tblTest values ('no%d', 'name%d');", i, i);

    db.execDML(buf);

    }

    db.execDML(L"commit transaction;");

    //更新一笔记录

    db.execDML(L"update tblTest set empname='answer' where empno='no1'");

    //获取总笔数

    int count = db.e

热门推荐 查看更多