【1】.打开数据库
int sqlite3_open(char *db_name,sqlite3 **db);
功能:
打开数据库。
参数:
db_name:数据库文件名,若文件名包含ASCII码表范围的之外的字符,则其必需是(UTF-8)编码。
sqlite3:数据库标识,此结构体为数据库操作句柄。通过此句柄可对数据库文件进行相应操作。
返回值:
成功返回SQLITE_OK,失败返回非 SQLITE_OK。
【2】.关闭数据库
int sqlite3_close(sqlite3 *db);
功能:
关闭数据库、释放打开数据库时申请的资源。
参数:
db:数据库的标识。
返回值:
成功返回 SQLITE_OK。
失败返回非 SQLITE_OK。
注意:
sqlite3使用了两个库:pthread、dl,故链接时应加上 -lpthread和 -ldl。
1 #include <stdio.h>
2 #include "sqlite3.h"
3 sqlite3 * ppDB = NULL;
4
5 int main(int argc, const char *argv[])
6 {
7 int ret = 0;
8 //打开数据库
9 ret = sqlite3_open("stu.db",&ppDB);
10 if(ret != SQLITE_OK){
11 printf("sqlite3_open failed...\n");
12 return -1;
13 }
//对数据库的操作
...
//关闭数据库
18 ret = sqlite3_close(ppDB);
19 if(ret != SQLITE_OK){
20 printf("sqlite3_close failed...\n");
21 return -1;
22 }
23
24 return 0;
25 }
【3】数据库操作——回调方法
int sqlite3_exec(sqlite3 *db,
const char *sql,
exechandler_t callback,
void *arg,
char **errmsg);
功能:执行sql指向的SQL语句,若结果集不为空,函数会调用函数指针callback所指向的函数。
参数:
db:数据库的标识。
sql:SQL语句(一条或多条),以’;’结尾。
callback:是回调函数指针,当这条语句执行之后sqlite3会去调用你提供的这个函数。
arg:当执行sqlite3_exec的时候传递给回调函数的参数。
errmsg:存放错误信息的地址,执行失败后可以查阅这个指针。
打印错误信息方法:printf("%s\n", errmsg);
回调函数指针:
typedef int (*exechandler_t)(void *para,int n_column,char **column_value,
char **column_name);
功能:
此函数由用户定义,当sqlite3_exec函数执行sql语句后,结果集不为空时sqlite3_exec函数会自动调 用此函数,每次调用此函数时会把结果集的一行信息传给此函数。
参数:
para:sqlite3_exec传给此函数的参数,para为任意数据类型的地址。
n_column:结果集的列数。
column_value:指针数组的地址,其存放一行信息中各个列值的首地址。
column_name:指针数组的地址,其存放一行信息中各个列值对应列名的首地址。
返回值:
若为非0值,则通知sqlite3_exec终止回调。
1 #include <stdio.h>
2 #include "sqlite3.h"
3
4 sqlite3 * ppDB = NULL;
5
6 int num = 20;
7
8 char *errmsg;
9 //回调函数
10 int my_callback(void *para,int n_column,char **column_value,\
char **column_name)
11 {
12 int i = 0;
13 printf("-------------------------------------------\n");
14
15 printf("para:%d\n",*(int *)para);
16 printf("n_column:%d\n",n_column);
17
18 for(i = 0; i < n_column;i++){
19 printf("%-20s %-20s\n",column_name[i],column_value[i]);
20 }
21
22 printf("-------------------------------------------\n");
23 return 0;
24 }
26 int main(int argc, const char *argv[])
27 {
28 int ret = 0;
29
30
31 ret = sqlite3_open("stu.db",&ppDB);
32 if(ret != SQLITE_OK){
33 printf("sqlite3_open failed...\n");
34 return -1;
35 }
//回调方式操作数据库
37 sqlite3_exec(ppDB,"select * from persons;",my_callback,\
(void *)&num,&errmsg);
38
39
40 ret = sqlite3_close(ppDB);
41 if(ret != SQLITE_OK){
42 printf("sqlite3_close failed...\n");
43 return -1;
44 }
45
46 return 0;
47 }
【4】非回调方式操作数据库
int sqlite3_get_table(sqlite3 *db,const char *sql,
char ***resultp,int *nrow,int *ncolumn,char **errmsg);
功能:执行sql指向的SQL语句,函数将结果集相关的数据的地址保存在函 数的参数中
参数:
db:数据库的标识。
sql:SQL语句(一条或多条),以’;’结尾。
resultp:指针数组的地址,其记录了结果集的数据。内存布局:先依次存放各列的列名,然后是每一行各列的值。
nrow:结果集的行数(不包含列名)。
ncolumn:结果集的列数。
errmsg:错误信息。
void sqlite3_free_table(char **resultp);
功能:
释放sqlite3_get_table分配的内存。
参数:
结果集数据的首地址。
1 #include <stdio.h>
2 #include "sqlite3.h"
3
4 sqlite3 *ppDB = NULL;
5 char **resultp = NULL;
6
7 int nrow,ncolumn;
8
9 char *errmsg = NULL;
10
11 int main(int argc, const char *argv[])
12 {
13 int ret = 0,i = 0, j = 0 ;
14 ret = sqlite3_open("../stu.db",&ppDB);
15 if(ret != SQLITE_OK){
16 printf("sqlite3_open failed...\n");
17 return -1;
18 }
19
20 /*
21 *int sqlite3_get_table(sqlite3 *db,const char *sql,
22 * char ***resultp,int *nrow,int *ncolumn,char **errmsg);
23 * */
24 sqlite3_get_table(ppDB,"select * from persons;",&resultp,&nrow,&ncolumn,&errmsg);
25
26 for(i = 0; i <= nrow; i++){
27 for(j = 0; j < ncolumn;j++){
28 printf("%-20s",resultp[i*ncolumn+j]);
29 }
30 printf("\n");
31 }
35 sqlite3_close(ppDB);
37 return 0;
38 }