一开始用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