zoukankan      html  css  js  c++  java
  • SQLite3 for WinCE or Mobile (EVC篇) (转载)

    在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, 
    0sizeof(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.execScalar(L"select count(*) from tblTest;");
            TCHAR szCount[
    50];
            memset(szCount, 
    0sizeof(szCount));
            wsprintf(szCount, L
    "Count:%d", count);
            AfxMessageBox(szCount);

            
    //获取每一笔
            CppSQLite3Query q = db.execQuery(L"select * from tblTest");
            
    while (!q.eof())
            {
                AfxMessageBox(q.fieldValue(
    0));
                q.nextRow();
            }
            q.finalize();

            db.close();
            AfxMessageBox(L
    "OK");
        }
        
    catch(CppSQLite3Exception ex)
        {
            AfxMessageBox(ex.errorMessage());
        }
    }

     

    5> 成功完成,Enjoy it~~~

    6> 下载:

        a> SQLite3 For WinCE Source

        b> CppSQLite3U For WinCE Source

        c> Demo Source

        d> Demo Exe

    7> 推荐一个SQLite的可视化工具:

        SQLiteSpy: http://www.yunqa.de/delphi/doku.php/products/sqlitespy/index

        下载

  • 相关阅读:
    在使用SMO时,检索IsSystemObject属性将导致性能急剧下降的解决方法
    在没有安装.NET Framework 3.5的机器上使用LINQ等特性
    我的网站中的组织层次结构图信息与AD的同步问题
    有关视图状态(ViewState)的一些问题
    窗体控件visible属性问题
    SiteMapNode的几个特殊属性
    创建本地数据库时发生错误及其解决方案
    在基于Windows验证的Web应用程序中检索当前用户的所有角色
    在数据库恢复之前将数据库置为单用户模式
    将ASP.NET网站嵌入到MOSS站点下面的做法
  • 原文地址:https://www.cnblogs.com/Jade2009/p/1344992.html
Copyright © 2011-2022 走看看