[国嵌攻略][182][Sqlite嵌入式数据库移植]
数据库系统构成
在计算机系统中,保存数据的方式一般有两种:
1.普通文件方式
2.数据库方式
相比于普通文件方式,使用数据库来管理大批量数据具有更高的效率与安全性。
数据库系统一般由三个部分构成
1.数据库
2.数据库管理系统
3.数据库访问应用
sqlite属于数据库管理系统。在数据库中,数据都是以表的形式存在。表与表之间,可能存在关系。sql(结构化查询语言),是一种特殊的编程语言,用于访问数据库中的数据。
移植sqlite到开发板
1.解压
tar zxvf sqlite-autoconf-3070800.tar.gz
2.配置
mkdir _install
./configure –-host=arm-linux –-prefix=${PWD}/_install
3.修改Makefile
搜索-DPACKAGE_STRING=\"sqlite\ 3.7.8\"
删除3.7.8路径前空格,-DPACKAGE_STRING=\"sqlite\3.7.8\"
4.编译
make
5.安装
make install
生成的sqlite数据库管理系统在_install/bin/目录下,拷贝到.../rootfs/sbin/目录下。
生成的库函数在_install/lib/目录下,拷贝到.../rootfs/lib/目录下。
编译数据库访问应用程序
arm-linux-gcc -L .../_install/lib -lsqlite3 -I .../_install/include db.c -o db
使用数据库访问程序
1.创建
./db student.db “create talbe stu(number smallint not null primary key, name varchar(20));”
2.插入
./db student.db “insert into stu values(1, ‘xiao ming’);” 字符串用单引号
./db student.db “insert into stu values(2, ‘xiao hong’);” 字符串用单引号
3.查询
./db student.db “select * from stu where name like %xiao%;”
4.删除
./db student.db “delete from stu where number = 2;”
db.c
#include <stdio.h> #include <sqlite3.h> int main(int argc, char **argv); static int callback(void *notUsed, int argc, char **argv, char **colName); int main(int argc, char **argv){ //检测参数项 if(argc != 3){ printf("Usage:\n\t%s <database> <sql statement>\n", argv[0]); return -1; } //打开数据库 sqlite3 *db; int isErr; isErr = sqlite3_open(argv[1], &db); if(isErr){ //显示错误值 printf("Can not open: %s", sqlite3_errmsg(db)); //关闭数据库 sqlite3_close(db); return -1; } //访问数据库 char *errMsg; int isExec; isExec = sqlite3_exec(db, argv[2], callback, 0, &errMsg); if(isExec != SQLITE_OK){ //显示错误值 printf("Can not exec: %s", errMsg); //关闭数据库 sqlite3_close(db); return -1; } //关闭数据库 sqlite3_close(db); return 0; } static int callback(void *notUsed, int argc, char **argv, char **colName){ //显示回调数据 int i; char *value; for(i = 0; i < argc; i++){ printf("%s ", argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; }