wince中实现SQLite数据库及二进制文件保存与读取

    一开始用CE自带的EDB写,总出问题,在长的字根本就不好用。后来在网上找到了SQLITE,对说还行。。。这不就开始行动了。。。

    网上的资料比较多,推荐区这里:http://www.sqlite.com.cn/POPlist.asp?classid=4

    对于前期准备工作,当然是网上写的一样,按下面一步一步实现就可以:

编译出所需的 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)一下

 

   把编译SQLITE生成的DLLLIBsqlite3.h 放到项目的文件夹下,把项目=》属性=》链接器=》输入=》附加依赖项:输入SQLITElib文件名

   按http://www.sqlite.com.cn/MySqlite/4/494.Html所写的,产生一个MySQLite类

   下面就是应用这个类:

   在自己在处理的类进加入成员变量:MySQLite *sqlite;

   打开数据库:sqlite->sqlite_connect("\\ResidentFlash\\MyTH880H.db");

   建表:
ExpandedBlockStart.gif 代码
  result  =  sqlite -> sqlite_exec( " CREATE TABLE SAMPLE(NAME NCHAR(13) PRIMARY KEY, TIME NCHAR(25),ZONE NCHAR(18),SAMPLEDATA BLOB); " );
    
if ( ! result)
        AfxMessageBox(_T(
" 创建表失败 " ));
    
else
        AfxMessageBox(_T(
" 创建成功 " ));

插入数据:

ExpandedBlockStart.gif 代码
     char   * p = " 21210259.DUS " ;
    
char  time[ 25 ];
    
char  zone[ 18 ];
    BYTE samData[
546 ];
    memcpy(time,SettingData.time,
25 );
    memcpy(zone,SettingData.remark,
18 );
    memcpy(samData,
& SettingData, 546 );
    
bool  result;
    
char  buf[ 256 ];
    sprintf(buf,  " insert into sample values ('%s','%s','%s',?); " ,p,time,zone);
    sqlite3_stmt 
* stat; // 写二进制数据时要用的结构
    sqlite3_prepare(sqlite -> db,buf,  - 1 & stat,  0  ); // 准备插入数据
    sqlite3_bind_blob(stat, 1 ,samData, 546 , NULL );  // 把内容和字段绑定
    result = sqlite3_step( stat ); // 执行
    sqlite3_finalize( stat ); //

 

读二进制文件:

 

ExpandedBlockStart.gif 代码
  sqlite3_stmt  * stat; // 写二进制数据时要用的结构
    sqlite3_prepare(sqlite -> db,  " select * from sample; " - 1 & stat,  0 ); 
    sqlite3_step(stat); 
   
// 得到纪录中的BLOB字段 
     const   void   *  test  =  sqlite3_column_blob(stat,  3 ); 
     // 拷贝该字段 
   memcpy( & SettingData,test, 546 );

 

 搞定,还在就是在CE下显示UINICODE问题,我用CString.format居然不好用,乱码。。。

直接这么写就好了, char *str1;CStirng str(str1);这么写就行。。。NND

真是搞死人呀!上传我在CE下生成成功的那3个文件:SQLite

转载于:https://www.cnblogs.com/sankye/articles/1866300.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值