SQLite数据库介绍
SQLite数据库是一种嵌入式数据库,他的目标是尽量简单,因此它抛弃了传统企业级数据库的种种复杂特性,只实现对于数据库而言的必备的功能。
尽管简单性是SQLite追求的首要目标,但是其功能和性能都非常出 {MOD},它具有这样一些特性:
- 支持ACID事务(ACID是Automic、Consisten、Isolated和Durable的缩写)
- 零配置,不需要任何管理性的配置过程
- 支持SQL92标准
- 所有数据存放单独的文件中,支持的最大文件可达2TB
- 数据库可以在不同字节的机器间共享
- 体积小
- 系统开销小,检索效率高
- 简单易用的API接口
- 可以和TCL、Python、C/C++、JAVA、Ruby、Lua、Perl、PHP等多种语言绑定
- 自包含,不依赖于外部支持
- 良好注释的代码
- 代码测试覆盖率高达95%以上
- 开放源码,可用于任何合法途径
SQLite移植
1、下载sqlite3源代码
http://sqlite.org/download.html
2、解压源代码
tar xvzf sqlite-amalgamation-3.6.1.tar.gz
3、配置交叉编译到arm linux平台
./configure --prefix=/home/rootfs/home/sqlite --target=arm-linux --host=arm-linux
- --host:指定交叉编译工具,一般为arm-linux、arm-linux-gnueabihf、arm-none-linux-gnueabi等,具体要和板子用的交叉编译工具对应
- --prefix:指定安装目录,编译后的文件会全部放在安装目录中。必须是绝对路径
4、编译
make
5、安装
make install
头文件和生成的库文件将安装到指定的目录中(拷贝)
6、编写自己的数据库应用
#i nclude
#i nclude
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i printf("%s = %s
", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("
");
return 0;
}
int main(int argc, char **argv){
sqlite3 *db;
char *zErrMsg = 0;
int rc;
if( argc!=2 ){
fprintf(stderr, "Usage: %s DATABASE
", argv[0]);
return 0;
}
rc = sqlite3_open(argv[1], &db);
if( rc ){
fprintf(stderr, "Can't open database: %s
", sqlite3_errmsg(db));
sqlite3_close(db);
return 0;
}
char *sql = " CREATE TABLE SensorData(
ID INTEGER PRIMARY KEY,
SensorID INTEGER,
SiteNum INTEGER,
Time VARCHAR(12),
SensorParameter REAL
);";
//使用sql字符串指定的sql语言 创建数据表SensorData
sqlite3_exec( db , sql , 0 , callback , &zErrMsg );
//插入数据到数据表 sql = "INSERT INTO 'SensorData' VALUES(1 , 1 , 1 , '200605011306', 16.4 );" ; sqlite3_exec( db , sql , 0 , callback , &zErrMsg ); int nrow = 0, ncolumn = 0; char **azResult; int i; sql = "SELECT * FROM SensorData "; sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg ); printf( "row:%d column=%d" , nrow , ncolumn ); printf( "The result of querying is :" ); for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ ){ printf( "azResult[%d] = %s
", i , azResult[i] ); } sqlite3_free_table( azResult ); if( rc!=SQLITE_OK ){ fprintf(stderr, "SQL error: %s
", zErrMsg); sqlite3_free(zErrMsg); } sqlite3_close(db); return 0;}exec_prefix=${prefix}libdir=${exec_prefix}/libincludedir=${prefix}/includeLibs = -L${libdir} -lsqlite3 -lpthreadCflags = -I${includedir} CROSS_COMPILE = arm-linux-CC = $(CROSS_COMPILE)gccLD = $(CROSS_COMPILE)ld radiodb: radiodb.o $(CC) $^ $(Libs) -o $@radiodb.o:radiodb.c $(CC) $(Cflags) -c $^ -o $@clean: rm -rf radiodb *.oin: cp radiodb /home/rootfs/home/sqlite
sql = "INSERT INTO 'SensorData' VALUES( 0 , 1 , 1 , '200605011206', 18.9 );" ;
sqlite3_exec( db , sql , 0 , callback , &zErrMsg );
//插入数据到数据表
//从数据表查询数据
7. 编写Makefile
prefix=/home/rootfs/home/sqlite
注意makefile里的红 {MOD}字体内容可以在sqlite安装目录的lib下的pkconfig下的文件查得。