安装和使用数据库系统Sqlite3
安装数据库系统Sqlite3:
apt-get install sqlite sqlite3
检查数据库安装结果:
sqlite3 test.db
.database
.exit
提供下面的命令我们应该可以看到文件test.db。
ls
安装Sqlite3编译需要的工具包:
apt-get install libsqlite3-dev
在shell下命令
建一个数据库
sqlite3 stu.db
进入了sqlite3之后,会看到以下文字:
SQLite version 3.1.3
Enter ".help" for instructions
sqlite>
建立一个表,名为stu,有name和num两个字段,以;分号结束
CREATE TABLE student(name,num);
列出所有的数据表: .tables
.tables
student
显示数据库结构:.schema
.schema student
CREATE TABLE student(name,num);
插入几个数据 insert into table_name values(data1, data2, data3, ...);
insert into stu values('Stevenbai'1,001);
insert into stu values(anjincang,1002);
查询 基本语法 select columns from table_name where expression;
导出所有数据库的内容
select * from film;
Stevenbai|1001
anjincang|1002
SQLite编程与应用
打开数据库
int sqlite3_open(const char *filename, sqlite3 **ppDb);
第一个参数指文件名
第二个参数则是定义的 sqlite3 ** 结构体指针(关键数据结构),称为数据库句柄。
返回值:表示操所是否正确 (SQLITE_OK 操作正常)
说明:打开一个数据库,文件名不一定要存在,如果此文件不存在,sqlite会自动创建。
关闭数据库
int sqlite3_close(sqlite3*);
参数就是刚才的结构体,也就是数据库句柄。
说明:如果用sqlite3_open开启了一个数据库,结尾时不要忘了用这个函数关闭数据库。
执行SQL语句
int sqlite3_exec(sqlite3*,const char *sql,sqlite_callback,void *,char **errmsg);
这个函数的功能是执行一条或者多条SQL语句,SQL语句之间用“;”号隔开。
建议在执行一条或者多条SQL语句得时候,指定第三个参数回调函数,在回调函数中可以获得执行Sql得详细过程,如果所有Sql执行完毕则应该返回0,否则,则说明这次执行并没有完全成功。第五个参数:如果执行失败(没有返回0)则可以查看第五个阐述得值。来查看详细错误信息。。
说明:通常sqlite3_callback和它后面的void*这两个位置都可以填NULL,表示不需要回调。比如您做insert操作,做delete操作,就没有必要使用回调。而当作select时,就要使用回调,因为sqlite3把数据查出来,得通过回调告诉你查出了什么数据。
exec的回调
typedef int (*sqlite3_callback)(void*, int, char**, char**);
例如:int LoadMyInfo( void * para, int n_column, char ** column_value, char ** column_name )
para是在 sqlite3_exec 里传入的 void * 参数,通过para参数,可以传入带有控制功能的数据
n_column是这一条记录有多少个字段 (即这条记录有多少列)
char ** column_value 是个关键值,查出来的数据都保存在这里,它实际上是个1维数组,每一个元素都是一个 char * 值,是一个字段内容(用字符串来表示,以\0结尾)
char ** column_name跟column_value是对应的,表示这个字段的字段名称
说明:回调函数必须定义为上面这个函数的类型。
取当前插入位置:
long long int sqlite3_last_insert_rowid(sqlite3*);
返回你前一次插入得位置,从1开始,sqlite3* 为你打开数据库所得到得句柄。
非回调select查询:
int sqlite3_get_table(sqlite3*,const char *sql,char ***resultp,int *nrow,int *ncolumn,char **errmsg);
执行一次查询Sql 并且返回得到一个记录集。
说明:第三个参数是查询结果,它是一维数组,内存布局为:第一行是字段名称,后面是紧接着是每个字段的值。
释放查询结果:
void sqlite3_free_table(char **result);
释放当前查询的记录集所占用的内存。
下面是一个简单应用实例:
#include<stdio.h>
#include"sqlite3.h"
#include<string.h>
int printSqlResult(void *para, int column, char **value, char **key)
{
int i;
printf("column=%d\n",column);
for(i = 0; i < column; i++)
{
printf("%s\t",*(value+i));
}
printf("\n");
return SQLITE_OK;
}
int main(int argc, char *argv[])
{
sqlite3 *pDb;
int j, i, pos, row, col, ret;
char acCmd[128];
char **ppRet;
if(argc < 2)
{
printf("please input sql command!");
return -1;
}
strcpy(acCmd,argv[1]);
ret = sqlite3_open("./stu.db",&pDb);
if(ret != SQLITE_OK)
{
printf("open database fail!\n");
return -1;
}
ret = sqlite3_exec(pDb, acCmd, printSqlResult, NULL, NULL);
{
if(ret != SQLITE_OK)
{
printf("exec fail,ret %d\n", ret);
return -1;
}
}
pos = sqlite3_last_insert_rowid(pDb);
printf("pos = %d\n",pos);
sqlite3_get_table(pDb,"select * from stu;",&ppRet,&row,&col,NULL);
for(i = 0; i <= row; i++)
{
for(j = 0; j < col; j++)
{
printf("%s\t",*(ppRet+i*col+j));
}
printf("\n");
}
sqlite3_free_table(ppRet);
sqlite3_close(pDb);
return 0;
}
Makefile文件:
OBJS = sqlite.o
TARGET = sqlite
CFLAG =-g -Wall -O2 -lsqlite3
all: $(TARGET)
$(TARGET): $(OBJS)
$(CC) $(CFLAG) -o $(TARGET) $(OBJS)
%.o:%.c
$(CC) $(CFLAG) -o $@ -c$?
clean:
rm -rf $(OBJS) $(TARGET)
运行结果:
Ubuntu环境:sqlite3在mini2440上的移植:http://www.linuxdiyf.com/linux/11300.html
Linux查看SQLite的表结构:http://www.linuxdiyf.com/linux/8834.html
搭建SQLite3嵌入式开发环境:http://www.linuxdiyf.com/linux/5844.html
Linux PHP开启对Sqlite的支持:http://www.linuxdiyf.com/linux/6223.html
怎样在Linux下从源代码安装SQLite 3:http://www.linuxdiyf.com/linux/5942.html