文档库 最新最全的文档下载
当前位置:文档库 › Sqlite使用文档

Sqlite使用文档

Sqlite使用文档
Sqlite使用文档

SQLite的配置和使用文档

一.引言:

本文将简要介绍如何在Linux和ARM-Linux平台上移植SQLite嵌入式数据库,以及一些简单的测试案例。

嵌入式数据库采用程序方式直接驱动,而传统数据库则采用引擎响应方式驱动。由于嵌入式数据库的体积通常很小,这使得嵌入式数据库常常应用在移动设备上。

SQLite是一种嵌入式数据库。SQLite的目标是尽量简单,因此它抛弃了传统企业级数据库的种种复杂特性,只实现那些对于数据库而言非常必要的功能。尽管简单性是SQLite追求的首要目标,但是其功能和性能都非常出色由于SQLite具有功能强大、接口简单、速度快、占用空间小等优点,因此特别适合于应用在嵌入式环境中。SQLite在手机、PDA、机顶盒等设备上已获得了广泛应用。

二.软硬件平台:

OS:fedora7;

编译器:gcc 版本 4.1.2 20070502 (Red Hat 4.1.2-12):

开发板:基于Sep4020的UB4020EVB(1.6) 开发套件;

Linux内核:Linux Kernel v2.6.16:

交叉编译器:gcc version 3.4.1:

Sqlite:sqlite-3.3.8

三.PC端编译环境的安装:

此处使用的为SQLite版本为sqlite-3.3.8.tar.gz,可以通过以下方式获得此压缩包https://www.wendangku.net/doc/2410148641.html,/sqlite-3.3.8.tar.gz(利用迅雷等工具下载)。

将此压缩包拷贝到/root目录下,在终端中进入此目录,并解压sqlite-3.3.8.tar.gz压缩包:

[root@localhost ~]# cd /root/

[root@localhost ~]# tar -zxvf sqlite-3.3.8.tar.gz

将sqlite-3.3.8更名为sqlit_pc,并进入sqlite_pc目录:

[root@localhost ~]# mv sqlite-3.3.8 sqlite_pc

[root@localhost ~]# cd sqlite_pc

//进入目录后采用默认配置生成Makefile文件:

[root@localhost sqlite_pc]# ./configure

配置结束后进行编译并且将所生成的文件安装:

[root@localhost sqlite_pc]# make

[root@localhost sqlite_pc]# make install

Make install 安装以后会生成以下文件,系统默认的目录为/usr/local:

lib:libsqlite3.a https://www.wendangku.net/doc/2410148641.html, libsqlite3.so libsqlite3.so.0

libsqlite3.so.0.8.6

include:sqlite3.h

bin: sqlite3

由于/usr/local为系统路径,此时只要在终端直接输入sqlite3 [数据库名] 即可打开(没有时创建)一个数据库文件。

例1:在终端输入以下语句:

[root@localhost sqlite-3.3.8]# sqlite3 prochip.db

SQLite version 3.3.8

Enter ".help" for instructions

sqlite>

此时就会正确的打开(没有时创建)prochip.db数据库文件。

sqlite> .e

退出数据库操作,具体的数据库操作在后节会有示例。

四.交叉编译环境下SQLite的安装:

此处使用的为SQLite版本为sqlite-3.3.8.tar.gz,可以通过以下方式获得此压缩包https://www.wendangku.net/doc/2410148641.html,/sqlite-3.3.8.tar.gz(利用迅雷等工具下载)。

将此压缩包拷贝到/usr/local/arm目录下,在终端中进入此目录,并解压sqlite-3.3.8.tar.gz压缩包:

[root@localhost sqlite_pc]# cd /usr/local/arm/

[root@localhost arm]# tar -zxvf sqlite-3.3.8.tar.gz

将此目录更名为sqlite_arm,然后进入此目录:

[root@localhost arm]# mv sqlite-3.3.8 sqlite_arm

[root@localhost arm]# cd sqlite_arm

与在PC环境下编译SQLite3不同,不能通过sqlite_arm目录下的configure 脚本来生成Makefile文件。而是必须手动修改Makefile文件。在sqlite_arm目录下有一个Makefile范例文件Makefile.linux-gcc

首先通过下面的命令拷贝此文件并重命名为Makefile:

[root@localhost sqlite_arm]# cp Makefile.linux-gcc Makefile

利用gedit打开Makefile文件并手动修改Makefile文件的内容。

[root@localhost sqlite_arm]#gedit Makefile

找到Makefile文件中的下面这样一行(line 17):

TOP = ../sqlite

将其修改为:

TOP = .

找到下面这样一行(line 73):

TCC = gcc -O6

将其修改为:

TCC = arm-linux-gcc -O6

找到下面这样一行(line 81):

AR = ar cr

将其修改为:

AR = arm-linux-ar cr

找到下面这样一行(line 83):

RANLIB = ranlib

将其修改为:

RANLIB = arm-linux-ranlib

找到下面这样一行(line 86):

MKSHLIB = gcc -shared

将其修改为:

MKSHLIB = arm-linux-gcc -shared

找到下面这样一行(line 96):

TCL_FLAGS = -I/home/drh/tcltk/8.4linux

将其修改为:

#TCL_FLAGS = -I/home/drh/tcltk/8.4linux

注释掉下面这一行(line 103):

LIBTCL = /home/drh/tcltk/8.4linux/libtcl8.4g.a -lm –ldl

将其修改为:

#LIBTCL = /home/drh/tcltk/8.4linux/libtcl8.4g.a -lm –ldl

原则上,对Makefile的修改主要包括两个方面:首先是将编译器、归档工具等换成交叉工具链中的对应工具,比如:gcc换成arm-linux-gcc,ar换成ar-linux-ar,ranlib换成arm-linux-ranlib等等;其次是去掉与TCL相关的编译选项,因为默认情况下,将会编译SQLite3的Tcl语言绑定,但是在移植到ARM-Linux的时候并不需要,因此将两个与TCL有关的行注释掉。

关闭并保存Makefile文件。

然后通过下面的命令修改main.mk文件,因为Makefile包含了这个文件。

[root@localhost sqlite_arm]# gedit main.mk

找到这个文件中的下面一行(line 63):

select.o table.o tclsqlite.o tokenize.o trigger.o \

把它替换成:

select.o table.o tokenize.o trigger.o \

也就是把该行上的tclsqlite.o去掉。这样编译的时候将不会编译SQLite3的Tcl语言绑定。

自此,修改工作就完成了,接下来就可以开始编译SQLite3了,这通过make 命令即可完成:

[root@localhost sqlite_arm]# make

编译完成之后,将在sqlite_arm目录下生成一下文件:

库函数文件:libsqlite3.a

头文件:sqlite3.h

应用程序; sqlite3

此时将sqlite3应用程序拷贝到文件系统的系统路径bin目录下,这样就可以

在嵌入式开发平台上使用SQLite了。

例2:打开嵌入式开发平台,在串口终端中输入语句。

/# sqlite3 prochip.db

SQLite version 3.3.8

Enter ".help" for instructions

sqlite>

此时就会正确的打开(没有时创建)prochip.db数据库文件。

sqlite> .e

退出数据库操作,具体的数据库操作在后节会有示例。

注:在嵌入式环境和PC环境下生成数据库文件的存储格式是相同的,在PC 端和嵌入式端可以操作同一个数据库。

五.SQLite命令行功能的使用介绍:

在SQLite的的使用中,在sqlite>下,我们可以直接使用一些命令行来直接对数据库进行操作,也可以直接输入标准的SQL语言来进行操作。下面就介绍一些简单的命令行和SQL语句的使用方式:

5.1 SQL语言:

1.建立表:sqlite> create table test(name varchar(10),age smallint);

2.插入表:sqlite> insert into test values("prochip",5);

3.查询表:sqlite> select * from test;

prochip|5

4.修改表记录:sqlite> update test set age = 6 where name = "prochip";

5.删除表记录:sqlite> delete from test where name = "prochip";

6.删除表; sqlite> drop table test;

5.2 命令行语言:

1).help查看命令行的帮助文件

sqlite> .help

.bail ON|OFF Stop after hitting an error. Default OFF

.databases List names and files of attached databases

.dump ?TABLE? ... Dump the database in an SQL text format

……

.width NUM NUM ... Set column widths for "column" mode

2).tables 第一步建立好表后,可以通过此语句来查看已经存在的表:

sqlite> .tables

test

3).dump 第一步建立好表后,可以通过此语句生成数据库表的SQL脚本:sqlite> .dump

BEGIN TRANSACTION;

CREATE TABLE test(name varchar(10),age smallint);

INSERT INTO "test" V ALUES('prochip',5);

COMMIT;

4).schema ?TABLE?

第一步建立好表后,可以通过此语句生成形成数据库表的SQL脚本:

sqlite> .schema test

CREATE TABLE test(name varchar(10),age smallint);

5).quit 或者.exit 退出命令行窗口。

sqlite>. quit

六.SQLite应用程序的编写:

前面介绍了SQlite的安装和命令的使用,下面介绍在应用程序中进行数据库的操作。在正常的应用程序的操作中主要包含三种操作:增加、查询和修改,下面即介绍三个测试用例来分别介绍。

例一:创建数据库和表

#include

#include

#include "sqlite3.h" //包含SQLite的头文件

int main( void )

{

sqlite3 *db=NULL;

char *zErrMsg = 0;

int rc;

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

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

if( rc ) //如果出错,给出提示信息并退出程序

{

fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));

sqlite3_close(db);

exit(1);

}

else

{

printf("You have opened a sqlite3 database named prochip.db successfully!\n");

}

char *sql = "CREATE TABLE TestTable(ID INTEGER PRIMARY KEY,\ Name TEXT,Amount INTEGER);";

sqlite3_exec( db , sql , 0 , 0 , &zErrMsg ); //创建一个表

sql = "INSERT INTO \"TestTable\" V ALUES( 001 ,'nokia', 39);" ;

sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

sql = "INSERT INTO \"TestTable\" V ALUES( 002 , 'iphone' , 26);" ;

sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

sql = "INSERT INTO \"TestTable\" V ALUES( 003 , 'palm' , 11);" ;

sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

sqlite3_close(db); //关闭数据库

return 0;

}

例二:查询数据库操作:

#include

#include

#include "sqlite3.h" //包含SQLite的头文件

int main( void )

{

sqlite3 *db=NULL;

char *zErrMsg = 0;

int rc;

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

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

if( rc ) //如果出错,给出提示信息并退出程序

{

fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));

sqlite3_close(db);

exit(1);

}

else

{

printf("You have opened a sqlite3 database named prochip.db successfully!\n");

}

int nrow = 0, ncolumn = 0; //保存获取信息的行数和列数int i, j;

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

char *sql = "SELECT ID,name,Amount FROM TestTable;";

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

for(i = 0; i < (nrow + 1); i++)

{

for(j = 0; j < ncolumn; j++)

{

printf("%s\t\t",azResult[nrow * i + j]); //打印查询信息}

printf("\n");

}

sqlite3_close(db); //关闭数据库

return 0;

}

例三:修改数据库操作:

#include

#include

#include "sqlite3.h" //包含SQLite的头文件

int main( void )

{

sqlite3 *db=NULL;

char *zErrMsg = 0;

int rc;

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

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

if( rc ) //如果出错,给出提示信息并退出程序

{

fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));

sqlite3_close(db);

exit(1);

}

else

{

printf("You have opened a sqlite3 database named prochip.db successfully!\n");

}

char *sql = "UPDATE TestTable SET Amount=\"100\" WHERE ID = 002;";

sqlite3_exec( db , sql , 0 , 0 , &zErrMsg ); //跟新数据库

sqlite3_close(db); //关闭数据库

return 0;

}

七.应用程序的编译和运行:

7.1 PC端SQLite的编译和运行

由于在PC端的sqlit3存在于系统路径中,所以在编译应用程序时,只需加上sqlite的库文件即可。

在PC机终端输入:

[root@localhost test]#gcc -o insert insert.c -lsqlite3

[root@localhost test]# ./insert

You have opened a sqlite3 database named prochip.db successfully!

[root@localhost test]# sqlite3 prochip.db

SQLite version 3.3.13

Enter ".help" for instructions

sqlite> select ID,Name,Amount from TestTable;

1|nokia|39

2|iphone|26

3|palm|11

sqlite>

其它操作类似。

7.2 嵌入式SQLite的编译和运行

由于在交叉编译时,SQLite的库文件和应用程序都保存于/usr/local/arm/sqlite_arm目录下,因此我们只要在编译时将库文件和头文件都指定到这个目录即可,如在PC端终端输入:

[root@localhost ~]#a rm-linux-gcc -o insert_arm insert.c -lsqlite3 -I/usr/local/arm/sqlite_arm/ -L /usr/local/arm/sqlite_arm/

到开发板启动后的串口终端中输入:

/test # ./insert_arm

You have opened a sqlite3 database named prochip.db successfully!

/test # sqlite3 prochip.db

SQLite version 3.3.8

Enter ".help" for instructions

sqlite> select ID,Name,Amount from TestTable;

1|nokia|39

2|iphone|26

3|palm|11 sqlite>

其它操作类似。

相关文档