一开始用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生成的DLL、LIB和sqlite3.h 放到项目的文件夹下,把项目=》属性=》链接器=》输入=》附加依赖项:输入SQLITE的lib文件名
按http://www.sqlite.com.cn/MySqlite/4/494.Html所写的,产生一个MySQLite类
下面就是应用这个类:
在自己在处理的类进加入成员变量:MySQLite *sqlite;
打开数据库:sqlite->sqlite_connect("\\ResidentFlash\\MyTH880H.db");
if(!result)
AfxMessageBox(_T("创建表失败"));
else
AfxMessageBox(_T("创建成功"));
插入数据:
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 );//
读二进制文件:
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