sqlite使用说明及在ppc上的移植.docx

上传人:b****5 文档编号:8798512 上传时间:2023-05-15 格式:DOCX 页数:8 大小:84.32KB
下载 相关 举报
sqlite使用说明及在ppc上的移植.docx_第1页
第1页 / 共8页
sqlite使用说明及在ppc上的移植.docx_第2页
第2页 / 共8页
sqlite使用说明及在ppc上的移植.docx_第3页
第3页 / 共8页
sqlite使用说明及在ppc上的移植.docx_第4页
第4页 / 共8页
sqlite使用说明及在ppc上的移植.docx_第5页
第5页 / 共8页
sqlite使用说明及在ppc上的移植.docx_第6页
第6页 / 共8页
sqlite使用说明及在ppc上的移植.docx_第7页
第7页 / 共8页
sqlite使用说明及在ppc上的移植.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

sqlite使用说明及在ppc上的移植.docx

《sqlite使用说明及在ppc上的移植.docx》由会员分享,可在线阅读,更多相关《sqlite使用说明及在ppc上的移植.docx(8页珍藏版)》请在冰点文库上搜索。

sqlite使用说明及在ppc上的移植.docx

sqlite使用说明及在ppc上的移植

目录

1SQLite简介1

2SQLite编译安装1

2.1交叉编译库1

2.2交叉编译应用程序2

3SQLite3常用命令2

4常用SQL语句示例3

5常用API5

6事务处理6

7封装后的API7

8APIdemo程序7

1SQLite简介

SQLite是一个开源的嵌入式关系数据库,它在2000年由D.RichardHipp发布,它的减少应用程序管理数据的开销,SQLite可移植性好,可以工作在许多嵌入式操作系统下,比如QNX,VxWorks,PalmOS,Symbin和WindowsCE,同时,SQLite是一个轻量级的嵌入式数据库,很适合用于嵌入式设备。

SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程,但在进程内部,它却是完整的自包含的数据库引擎。

2SQLite编译安装

官网下载地址:

http:

//www.sqlite.org/sqlite-amalgamation-3.6.22.tar.gz

基于实际项目需求,以下主要讲述交叉编译的步骤:

2.1交叉编译库

$tarzxfsqlite-amalgamation-3.6.22.tar.gz

$cdsqlite-3.6.22

$CC=ppc_8xx-gccLD=ppc_8xx-ld./configure--host=ppc-linux

$make

然后将生成的动态库拷贝到根文件系统/usr/lib中.

2.2交叉编译应用程序

由于在主机上已经有x86版本的libsqlite3.so,我们交叉编译生成的libsqlite3.so不能在主机上makeinstall,否则会覆盖掉x86版本的libsqlite3.so.我们编译应用程序时要把交叉编译出的libsqlite3.so拷到应用程序工程目录中,最好是和应用程序的Makefile同一级目录中,同时要把sqlite3.h头文件拷到同一级目录中,并在Makefile中用-L.–I.分别指定库和头文件路径,最后将交叉编译生成的应用程序和在主机上建好的XX.db数据库文件拷贝到目标板上同一级目录中,将交叉编译出的libsqlite3.so拷到目标板的/usr/lib目录中,同时在/usr/lib中建立一个指向libsqlite3.so的软链接libsqlite3.so.0,否则会报错。

另外如果需要在目标板上使用sqlite3的命令行命令,则还需要将交叉编译出的可执行文件sqlite3拷贝到目标板上/usr/bin中.

3SQLite3常用命令

$sqlite3test.db//创建/打开数据库文件

sqlite>

sqlite>createtabletable_name(idintegerprimarykey,nametext,gendertext,ageinteger);//创建表格示例

sqlite>.tables//显示test.db中存在的表格

sqlite>.schematable_name//显示表名及各字段的名称/数据类型

sqlite>.droptabletable_name//删除表

sqlite>.importdata.txttable_name//从数据文件data.txt中导入数据到表格中,data.txt中每一列用|分隔,|两边不要空格,文件末尾不要有空行:

例如1|richardstallman|male|24

sqlite>.exit//退出

4常用SQL语句示例

//插入一条记录到表里

insertintotable_namevalues(5,'li','female',23);

//查询id字段大于2的记录,并根据年龄字段按降序排列

select*fromtable_namewhereid>2orderbyagedesc;

//查询id字段大于2的记录,并只显示id,name,gender三个字段

selectid>2,name,genderfromtable_name;

//显示表中的所有记录

select*fromtable_name;

//从第三行开始,查询10条记录:

select*fromtable_namelimit3,10;

//删除id字段等于5或name字段为’tom’的记录

deletefromtable_namewhereid=5orname='tom';

//更新表中name字段为‘zh’的记录的age和name字段的值

updatetable_namesetage=25,name='zhang'wherename='zh';

//部分匹配地模糊查询,模糊查询效率很低,尽量不要使用

select*fromtable_namewhereidlike'%216%';

5常用API

intsqlite3_open(constchar*filepath,sqlite3**db);

intsqlite3_exec(

sqlite3*db,/*Anopendatabase*/

constchar*sql,/*SQLtobeexecuted*/

sqlite_callback,/*Callbackfunction*/

void*,/*1stargumenttocallbackfunction*/

char**errmsg/*Errormsgwrittenhere*/

};

intsqlite3_get_table(

sqlite3*db,/*Anopendatabase*/

constchar*sql,/*SQLcommandstring*/

char***dbresult,/*theaddressofachar**bufferwhichtoholdenquiryresult*/

int*nRow,/*Rowofsegment*/

int*nColumn,/*Columnofsegment*/

char**errmsg);/*errormessagebuffer*/

intsqlite3_close(sqlite3*db);

6事务处理

sqlite是支持事务处理的。

如果你知道你要同步删除很多数据,不仿把它们做成一个统一的事务。

通常一次sqlite3_exec就是一次事务,如果你要删除1万条数据,sqlite就做了1万次:

开始新事务->删除一条数据->提交事务->开始新事务->…的过程。

这个操作是很慢的。

因为时间都花在了开始事务、提交事务上。

你可以把这些同类操作做成一个事务,这样如果操作错误,还能够回滚事务。

事务的操作没有特别的接口函数,它就是一个普通的sql语句而已。

分别如下:

intresult;

result=sqlite3_exec(db,"begintransaction",0,0,&zErrorMsg);//开始一个事务

result=sqlite3_exec(db,"committransaction",0,0,&zErrorMsg);//提交事务

result=sqlite3_exec(db,"rollbacktransaction",0,0,&zErrorMsg);//回滚事务

7封装后的API

intdb_init(constchar*db_filepath,db_handler**db);

intdb_sql(db_handler*db,constchar*sql,char***dbresult,int*nRow,int*nColumn,char**errmsg);

intdb_term(db_handler*db,char**dbresult);

8APIdemo程序

/*test_db.c*/

#include"db.h"

intmain(intargc,char**argv)

{

db_handler*db;

intresult;

char*errmsg=NULL;

char**dbResult;

intnRow,nColumn;

inti,j;

intindex;

if(argc!

=2)

{

fprintf(stderr,"Usage:

%s\n",argv[0]);

return-1;

}

result=db_init(argv[1],&db);

if(result!

=DB_OK)

{

//failedtoopendatabase

return-1;

}

result=db_sql(db,"select*fromtable1",&dbResult,&nRow,&nColumn,&errmsg);

if(DB_OK==result)

{

//SQLoperationissuccess

//dbResult的字段值是连续的,从第0索引到第nColumn-1索引都是字段名称,从第nColumn索引开始才是字段值

index=nColumn;

printf("found%drecord\n",nRow);

for(i=0;i

{

printf("record%d\n",i+1);

for(j=0;j

{

printf("segmentname:

%s\t\tsegmentvalue:

%s\n",dbResult[j],dbResult[index]);

++index;

}

printf("-------\n");

}

}

db_term(db,dbResult);

return0;

}

/*Makefile*/

OBJ+=app

SRC+=db.ctest_db.c

CFLAG=-lsqlite3-L.-I.

CC=gcc

CROSS_COMPILE=ppc_8xx-

$(OBJ):

$(SRC)

$(CROSS_COMPILE)$(CC)-o$@$^$(CFLAG)

clean:

rm-rf$(OBJ)

以下是在目标板上测试的截屏:

 

参考资料:

[1]SQLite中文社区

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2