sqlite使用说明及在ppc上的移植.doc_第1页
sqlite使用说明及在ppc上的移植.doc_第2页
sqlite使用说明及在ppc上的移植.doc_第3页
sqlite使用说明及在ppc上的移植.doc_第4页
sqlite使用说明及在ppc上的移植.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录1SQLite简介12SQLite编译安装12.1交叉编译库12.2交叉编译应用程序23SQLite3常用命令24常用SQL语句示例35常用API56事务处理67封装后的API78API demo程序7i1 SQLite简介SQLite是一个开源的嵌入式关系数据库,它在2000年由D. Richard Hipp发布,它的减少应用程序管理数据的开销,SQLite可移植性好,可以工作在许多嵌入式操作系统下,比如QNX,VxWorks,Palm OS, Symbin和Windows CE,同时,SQLite是一个轻量级的嵌入式数据库,很适合用于嵌入式设备。SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程,但在进程内部,它却是完整的自包含的数据库引擎。2 SQLite编译安装官网下载地址:/sqlite-amalgamation-3.6.22.tar.gz基于实际项目需求,以下主要讲述交叉编译的步骤:2.1 交叉编译库$ tar zxf sqlite-amalgamation-3.6.22.tar.gz$ cd sqlite-3.6.22$ CC=ppc_8xx-gcc LD=ppc_8xx-ld ./configure -host=ppc-linux$ make然后将生成的动态库拷贝到根文件系统/usr/lib中.2.2 交叉编译应用程序由于在主机上已经有x86版本的libsqlite3.so,我们交叉编译生成的libsqlite3.so不能在主机上make install,否则会覆盖掉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中.3 SQLite3常用命令$ sqlite3 test.db /创建/打开数据库文件sqlitesqlite create table table_name(id integer primary key, name text, gender text, age integer); /创建表格示例sqlite .tables /显示test.db中存在的表格sqlite .schema table_name /显示表名及各字段的名称/数据类型sqlite .drop table table_name /删除表sqlite .import data.txt table_name /从数据文件data.txt中导入数据到表格中, data.txt中每一列用|分隔, |两边不要空格,文件末尾不要有空行:例如 1|richardstallman|male|24sqlite .exit /退出4 常用SQL语句示例/插入一条记录到表里insert into table_name values (5, li, female, 23);/ 查询id字段大于2的记录,并根据年龄字段按降序排列select * from table_name where id2 order by age desc;/ 查询id字段大于2的记录,并只显示id,name,gender三个字段select id2, name, gender from table_name;/ 显示表中的所有记录select * from table_name;/ 从第三行开始,查询10条记录:select * from table_name limit 3,10;/ 删除id字段等于5或name字段为tom的记录delete from table_name where id=5 or name=tom;/ 更新表中name字段为zh的记录的age和name字段的值update table_name set age=25, name=zhang where name=zh;/部分匹配地模糊查询,模糊查询效率很低,尽量不要使用select * from table_name where id like %216%;5 常用APIint sqlite3_open(const char *filepath, sqlite3 *db);int sqlite3_exec(sqlite3 *db,/* An open database */const char *sql,/* SQL to be executed */sqlite_callback,/* Callback function */void *,/* 1st argument to callback function */char *errmsg/* Error msg written here */;int sqlite3_get_table(sqlite3 *db, /* An open database */const char *sql, /* SQL command string */char *dbresult, /* the address of a char *buffer which to hold enquiry result */int *nRow,/* Row of segment */int *nColumn,/* Column of segment */char *errmsg);/* error message buffer */int sqlite3_close(sqlite3 *db);6 事务处理sqlite 是支持事务处理的。如果你知道你要同步删除很多数据,不仿把它们做成一个统一的事务。通常一次 sqlite3_exec 就是一次事务,如果你要删除1万条数据,sqlite就做了1万次:开始新事务-删除一条数据-提交事务-开始新事务- 的过程。这个操作是很慢的。因为时间都花在了开始事务、提交事务上。你可以把这些同类操作做成一个事务,这样如果操作错误,还能够回滚事务。事务的操作没有特别的接口函数,它就是一个普通的 sql 语句而已。分别如下:int result;result = sqlite3_exec( db, begin transaction, 0, 0, &zErrorMsg ); /开始一个事务result = sqlite3_exec( db, commit transaction, 0, 0, &zErrorMsg ); /提交事务result = sqlite3_exec( db, rollback transaction, 0, 0, &zErrorMsg ); /回滚事务7 封装后的APIint db_init(const char *db_filepath, db_handler *db);int db_sql(db_handler *db, const char *sql, char *dbresult, int *nRow, int *nColumn, char *errmsg);int db_term(db_handler *db, char *dbresult);8 API demo程序/* test_db.c */#include db.hint main( int argc, char *argv) db_handler *db; int result; char *errmsg = NULL; char *dbResult; int nRow, nColumn; int i , j; int index; if (argc != 2) fprintf(stderr, Usage: %s n, argv0); return -1; result = db_init(argv1, &db); if(result != DB_OK) /failed to open database return -1; result = db_sql( db, select * from table1, &dbResult, &nRow, &nColumn, &errmsg ); if(DB_OK = result) / SQL operation is success / dbResult 的字段值是连续的,从第0索引到第 nColumn - 1索引都是字段名称,从第 nColumn 索引开始才是字段值 index = nColumn; printf(found %d recordn, nRow); for(i = 0; i nRow ; i+) printf(record %dn, i+1); for( j = 0 ; j nColumn; j+ ) printf(segment name:%s ttsegment value:%sn, dbResultj, dbResultindex); +index; printf(-n); db_term(db, dbResult); return 0;/* Makefile */

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论