sqlite linux移植,SQLite移植和使用

一、环境介绍

1、主机环境:ubuntu10.04

2、交叉编译器:arm-none-linux-gnueabi-gcc-4.3.2

3、软件包:sqlite-3.6.1.tar.bz2

4、把sqlite-3.6.1.tar.bz2解压到主机的/opt/studyarm/sqlite-transplant目录下,并重命名为sqlite,在同一级目录下在新建目录sqlite-arm,这个目录来放编译后产生的文件。

二、移植步骤

1、配置sqlite

在sqlite目录下进行如下配置:

./configure --prefix=/QT/sqlite3 --disable-tcl --host=arm-none-linux-gnueabi

2、编译

make

3、安装

make install

该命令将编译好的文件安装到sqlite-arm目录下,在sqlite-arm目录下会生成bin、lib、include目录,bin目录下是sqlite3可执行文件,lib目录下包含运行sqlite3所依赖的库,另外在编译,另外在编译sqlite应用程序时,必须指明所依赖的头文件和库。

4、去掉调试信息(可选)

文件编译后会产生许多调试信息,下载到开发板将会占用较多存储器。我在编译后lib目录下文件大小达到2.2M,占用了不少Flash,为减小Flash占用去掉不必要的调试信息。在sqlite_arm目录下执行如下命令:

arm-linux-strip bin/*

arm-linux-strip lib/*

去掉调试信息后文件大小减小许多。将sqlite_arm /bin目录下的文件sqlite3拷贝到根文件系统的bin目录下,并将sqlite_arm/lib目录下的文件拷贝到根文件系统的lib目录下。

三、测试

1、

[rootMrFeng]#sqlite3 test.db

sqlite version 3.6.18

Enter ".help" for instructions

Enter sql statements terminated with a ";"

sqlite> create table film (number,name);

sqlite> insert into film values (1,'aaa');

sqlite> insert into film values (2,'bbb');

sqlite> select * from film;

1|aaa

2|bbb

sqlite>.quit

[rootMrFeng]#

蓝色部分为输入。

2、测试程序

这里以sqlite官方站点http://sqlite.org的quick start文档中的测试程序为例对移植到ARM-Linux上的sqlite3进行测试。该程序清单如下:

//test_sqlite.c

#include

#include

static int callback(void *NotUsed,int argc,char **argv,char **azColName)

{

int i;

for(i=0; 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,&zErrMsg);

if( rc!=sqlITE_OK )

{

fprintf(stderr,"sql error: %s/n",zErrMsg);

}

sqlite3_close(db);

return 0;

}

使用如下命令编译测试程序:

arm-linux-gcc -o test_sqlite test_sqlite.c -lsqlite3 -L/opt/studyarm/sqlite-transplant/sqlite_arm/lib -I/opt/studyarm/sqlite-transplant/sqlite_arm/include

使用如下命令去掉调试信息:

arm-linux-strip test_sqlite

3、在上面新建的数据库目录下测试:

[rootMrFeng]#./test_sqlitetest.db"select * from film"

number = 1

name = aaa

number = 2

name = bbb

[rootMrFeng]#

四、使用

下面是常用的指令:

sqlite3 *db=NULL;

char *zErrMsg = 0;//提示信息

int rc;

//打开指定的数据库文件,如果不存在将创建一个同名的数据库文件

rc = sqlite3_open("zieckey.db",&db);

//关闭

sqlite3_close(db);

//创建一个表,如果该表存在,则不创建,并给出提示信息,存储在 zErrMsg 中

char *sql = " CREATE TABLE SensorData( ID INTEGER PRIMARY KEY,SensorID INTEGER,SiteNum INTEGER,Time VARCHAR(12),SensorParameter REAL);" ;

sqlite3_exec( db,sql,&zErrMsg );

//插入数据

sql = "INSERT INTO \"SensorData\" VALUES( NULL,1,'200605011206',18.9 );" ;

sqlite3_exec( db,&zErrMsg );

sql = "INSERT INTO \"SensorData\" VALUES( NULL,'200605011306',16.4 );" ;

sqlite3_exec( db,&zErrMsg );

//查询数据

/*

int sqlite3_get_table(sqlite3*,const char *sql,char***result,int *nrow,int *ncolumn,char **errmsg );

result中是以数组的形式存放你所查询的数据,首先是表名,再是数据。

nrow,ncolumn分别为查询语句返回的结果集的行数,列数,没有查到结果时返回0

*/

int nrow = 0,ncolumn = 0;

char **azResult; //二维数组存放结果

sql = "SELECT * FROM SensorData ";

sqlite3_get_table( db,&azResult,&nrow,&ncolumn,&zErrMsg );

int i = 0 ;

printf( "row:%d column=%d \n",nrow,ncolumn );

printf( "\nThe result of querying is : \n" );

for( i=0 ; i

printf( "azResult[%d] = %s\n",i,azResult);

//删除数据

sql = "DELETE FROM SensorData WHERE SensorID = 1 ;" ;

sqlite3_exec( db,&zErrMsg );

//释放掉 azResult 的内存空间

sqlite3_free_table( azResult );

总结

以上是编程之家为你收集整理的SQLite移植和使用全部内容,希望文章能够帮你解决SQLite移植和使用所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值