嵌入式数据库SQLite3相关操作---数据库移植篇
时间:2011-04-11 来源:☆&寒 烟☆
一.准备工作:
主机环境:虚拟机下Fedora9
交叉编译器:arm-linux-gcc-4.4.3
软件包:sqlite-3.6.18.tar.bz2
把sqlite-3.6.18.tar.bz2解压到主机的/nfs_dir/目录下,并重命名为sqlite,在同一级目录下在新建目录sqlite_arm,这个目录来放编译后产生的文件。
二.配置SQLite
在sqlite目录终端下进行如下配置:
./configure --prefix=/nfs/sqlite/sqlite_arm --disable-tcl --host=arm-linux
make
make install
经过上述的命令将编译好的文件安装到sqlite-arm目录下,在sqlite-arm目录下会生成bin、lib、include目录,bin目录下是sqlite3可执行文件,lib目录下包含运行sqlite3所依赖的库,include目录下是sqlite的C语言API的头文件,编程时会用到。
三.移植
分别将bin下的文件下载到开发板的/usr/bin目录中,lib下的所有文件下载到开发板的/usr/lib目录中即可。注意这里说的是所有。包括符号连接,即一个不留:
cp –dr ./lib/ /usr/lib/
四.登录开发板的Linux,执行:
sqlite3 demo.db
sqlite3是一个sqlite的命令行访问程序,demo.db是新建的数据库的名字,必须以db作后缀。如果能进行下边的操作说明一切OK.
#sqlite3 test.db |
这里以SQLite官方站点http://sqlite.org的quick start文档中的测试程序为例对移植到ARM-Linux上的SQLite3进行测试。该程序清单如下:
#include <stdio.h> #include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName) { int i; for(i=0; i<argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char **argv) { sqlite3 *db; char *zErrMsg = 0; int rc; if( argc!=3 ){ fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]); } rc = sqlite3_open(argv[1], &db); if( rc ){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); } rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg); if( rc!=SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); } sqlite3_close(db); return 0; } |
使用如下命令编译测试程序:
arm-linux-gcc -o test test.c -lsqlite3 -L/nfs/sqlite/sqlite_arm/lib -I/nfs/sqlite/sqlite_arm/include
使用如下命令去掉调试信息:
arm-linux-strip test
六.在上面新建的数据库目录下测试:
#./test_sqlite test.db "select * from film"
应该会看到如下的结果:
number = 1
name = aaa
number = 2
name = bbb
好了,挺简单的吧,sqlite也是一个关系性数据库,可以做的其实也是比较少的,或者说要学的新东西还是挺少的,以前的数据库连oracle,DB2都玩的转,何况这个小家伙,塞牙缝都不够啊.下节我们会讲讲sqlite3中的一些基本的编程接口,有了这些接口,C编程问题还不是手到擒来啊.