WINCE下使用SQLite数据库
2014-04-04 14:23
387 查看
转自:http://blog.csdn.net/firehood_/article/details/8129612
SQLite是一个开源的跨平台的轻型数据库,WINCE本身也有一个自带的数据库SQLCE ,但占用的资源会比较大。最近项目中考虑用到 SQLite,因此特别研究了一下,下面介绍一下具体的移植方法。
一、下载SQLite源码
去SQLite官网http://www.sqlite.org/download.htm下载最新的source code。我下载的是sqlite-amalgamation-3071401.zip。解压后会得得到四个文件(shell.c、sqlite3.c、sqlite3.h、sqlite3ext.h)。
二、编译生成WINCE下DLL
1. 在VS2005下新建一个Win32智能设备项目,选择相应的SDK,并选择应用程序类型为DLL。
2. 将sqlite-amalgamation-3071401.zip解压后的sqlite3.c、sqlite3.h文件拷贝到工程目录下并添加至工程目录。如下图所示。
3.在预处理中增加SQLITE_ENABLE_RTREE和SQLITE_ENABLE_COLUMN_METADATA宏定义。如图所示:
4.编译项目,会提示“error LNK2019: 无法解析的外部符号 localtime_s,该符号在函数 osLocaltime 中被引用”错误,此错误的解决方法是将localtime_s替换成_localtime64_s即可。
5.编译成功后会发现目录下会生成SQLite.dll文件,但会发现没有lib文件,这样在使用这个DLL时是没法编译的,所以还需要导出.lib文件,解决方法是在SQLite官网上下载sqlite-dll-win32-x86-XXXXXX.zip文件,解压后将目录下的sqlite3.def文件拷贝到DLL工程目录,在项目属性--链接器--输入--模块定义文件中添加sqlite3.def,如下图所示,然后编译即可。
这样SQLite的编译工作就大功告成了。
三、WINCE 下SQLite测试
新建一个SQLite测试程序,测试代码如下:
[cpp] view
plaincopy
#include <windows.h>
// sqlite3的回调函数
int SQLiteQueryResultCallBack( void * para, int n_column, char ** column_value, char ** column_name )
int main(int argc,char* argv[])
{
sqlite3 * db = NULL; //声明sqlite关键结构指针
int result;
// 打开或创建数据库
result = sqlite3_open("NAND2\\sqlite.db", &db );
if( result != SQLITE_OK )
{
//数据库打开失败
return -1;
}
char * errmsg = NULL;
// 数据库操作代码
#if 1
// 创建一个测试表,表名叫 MyTable,有2个字段: ID 和 name。其中ID是一个自动增加的类型,以后insert时可以不去指定这个字段,它会自己从0开始增加
result = sqlite3_exec( db, "create table MyTable( ID integer primary key autoincrement, name nvarchar(32) )", NULL, NULL, &errmsg );
if(result != SQLITE_OK )
{
printf("创建表失败,错误码:%d,错误原因:%s\n", result, errmsg );
}
// 插入记录
result = sqlite3_exec( db, "insert into MyTable( name ) values ( '张三' )", 0, 0, &errmsg );
if(result != SQLITE_OK )
{
printf("插入记录失败,错误码:%d,错误原因:%s\n", result, errmsg );
}
// 插入记录
result = sqlite3_exec( db, "insert into MyTable( name ) values ( '李四' )", 0, 0, &errmsg );
if(result != SQLITE_OK )
{
printf("插入记录失败,错误码:%d,错误原因:%s\n", result, errmsg );
}
#endif
// 开始查询数据库
result = sqlite3_exec( db, "select * from MyTable", SQLiteQueryResultCallBack, NULL, &errmsg );
// 关闭数据库
sqlite3_close( db );
return 0;
}
// sqlite3的回调函数
int SQLiteQueryResultCallBack( void * para, int n_column, char ** column_value, char ** column_name )
{
printf( "******************************\n" );
printf("记录包含 %d 个字段\n", n_column );
for(int i = 0 ; i < n_column; i ++ )
{
printf( "字段名:%s 字段值:%s\n", column_name[i], column_value[i] );
}
printf( "******************************\n" );
return 0;
}
四、SQLite可视化管理工具
SQLite本身没有可视化管理工具,只提供了一个命令行的管理工具SQLite.exe。有一个第三方的可视化管理工具Sqlite Expert,用着还可以,下载地址: http://www.sqliteexpert.com/download.html
SQLite是一个开源的跨平台的轻型数据库,WINCE本身也有一个自带的数据库SQLCE ,但占用的资源会比较大。最近项目中考虑用到 SQLite,因此特别研究了一下,下面介绍一下具体的移植方法。
一、下载SQLite源码
去SQLite官网http://www.sqlite.org/download.htm下载最新的source code。我下载的是sqlite-amalgamation-3071401.zip。解压后会得得到四个文件(shell.c、sqlite3.c、sqlite3.h、sqlite3ext.h)。
二、编译生成WINCE下DLL
1. 在VS2005下新建一个Win32智能设备项目,选择相应的SDK,并选择应用程序类型为DLL。
2. 将sqlite-amalgamation-3071401.zip解压后的sqlite3.c、sqlite3.h文件拷贝到工程目录下并添加至工程目录。如下图所示。
3.在预处理中增加SQLITE_ENABLE_RTREE和SQLITE_ENABLE_COLUMN_METADATA宏定义。如图所示:
4.编译项目,会提示“error LNK2019: 无法解析的外部符号 localtime_s,该符号在函数 osLocaltime 中被引用”错误,此错误的解决方法是将localtime_s替换成_localtime64_s即可。
5.编译成功后会发现目录下会生成SQLite.dll文件,但会发现没有lib文件,这样在使用这个DLL时是没法编译的,所以还需要导出.lib文件,解决方法是在SQLite官网上下载sqlite-dll-win32-x86-XXXXXX.zip文件,解压后将目录下的sqlite3.def文件拷贝到DLL工程目录,在项目属性--链接器--输入--模块定义文件中添加sqlite3.def,如下图所示,然后编译即可。
这样SQLite的编译工作就大功告成了。
三、WINCE 下SQLite测试
新建一个SQLite测试程序,测试代码如下:
[cpp] view
plaincopy
#include <windows.h>
// sqlite3的回调函数
int SQLiteQueryResultCallBack( void * para, int n_column, char ** column_value, char ** column_name )
int main(int argc,char* argv[])
{
sqlite3 * db = NULL; //声明sqlite关键结构指针
int result;
// 打开或创建数据库
result = sqlite3_open("NAND2\\sqlite.db", &db );
if( result != SQLITE_OK )
{
//数据库打开失败
return -1;
}
char * errmsg = NULL;
// 数据库操作代码
#if 1
// 创建一个测试表,表名叫 MyTable,有2个字段: ID 和 name。其中ID是一个自动增加的类型,以后insert时可以不去指定这个字段,它会自己从0开始增加
result = sqlite3_exec( db, "create table MyTable( ID integer primary key autoincrement, name nvarchar(32) )", NULL, NULL, &errmsg );
if(result != SQLITE_OK )
{
printf("创建表失败,错误码:%d,错误原因:%s\n", result, errmsg );
}
// 插入记录
result = sqlite3_exec( db, "insert into MyTable( name ) values ( '张三' )", 0, 0, &errmsg );
if(result != SQLITE_OK )
{
printf("插入记录失败,错误码:%d,错误原因:%s\n", result, errmsg );
}
// 插入记录
result = sqlite3_exec( db, "insert into MyTable( name ) values ( '李四' )", 0, 0, &errmsg );
if(result != SQLITE_OK )
{
printf("插入记录失败,错误码:%d,错误原因:%s\n", result, errmsg );
}
#endif
// 开始查询数据库
result = sqlite3_exec( db, "select * from MyTable", SQLiteQueryResultCallBack, NULL, &errmsg );
// 关闭数据库
sqlite3_close( db );
return 0;
}
// sqlite3的回调函数
int SQLiteQueryResultCallBack( void * para, int n_column, char ** column_value, char ** column_name )
{
printf( "******************************\n" );
printf("记录包含 %d 个字段\n", n_column );
for(int i = 0 ; i < n_column; i ++ )
{
printf( "字段名:%s 字段值:%s\n", column_name[i], column_value[i] );
}
printf( "******************************\n" );
return 0;
}
四、SQLite可视化管理工具
SQLite本身没有可视化管理工具,只提供了一个命令行的管理工具SQLite.exe。有一个第三方的可视化管理工具Sqlite Expert,用着还可以,下载地址: http://www.sqliteexpert.com/download.html
相关文章推荐
- 数据库模型设计,第一范式、第二范式、第三范式简单例子理解
- SQL 分离和附加数据库
- MySQL管理命令、备份与恢复、授权远程访问
- 查看Oracle数据库中的,已经连接好的..当前用户状况
- 源码包编译安装mysql5.6脚本
- [Oracle]密码及账号策略设定
- SQLServer 中Case When的用法
- 少量数据通过Excel表格数据导入server SqlServer查询
- 关于登录SQL Server 原来的数据库及创建的user消失,重启电脑后恢复的原因 推荐
- 一段python从mysql数据库中取数据并且求平均值的代码
- mysqldump导入导出mysql数据库
- Mysql+Corosync+Pacemaker+DRBD
- 经典SQL语句大全
- SQL查询语句大全集锦
- MapReduce与MySQL交互
- SQL Union和SQL Union All用法
- 如何学习Oracle-eygle的方法经验谈
- Navicat 9.1、10.0 简体中文最新版,注册码(For Mysql)
- plsql7连接oracle11G看不到jobs列表的问题
- 在sql2008的实例 中 编写存储过程 读取 版本为sql2005 的实例 中的某个数据库里的数据