sqlite3除了可以通過命令行進行操作之外,還可以用接口函數進行開發,流程如下:
(1)新建、打開數據庫文件,
int sqlite3_open(const char *filename,sqlite3 **ppDb);
返回值:成功返回SQLITE_OK,失敗返回其他宏,具體可以查詢sqlite3文件夾的頭文件
參數:filename——路徑名
ppDB——數據庫文件句柄
(2)數據庫操作
int sqlite3_exec(sqlite3*,char *sql,int (*callback)(void*,int,char**,char**),void *, char **errmsg);
返回值:成功返回SQLITE_OK,失敗返回其他宏,具體可以查詢sqlite3文件夾的頭文件
參數:
sqlite3* ——數據庫的句柄
sql ——你要執行的命令
int (*callback)(void*,int,char**,char**) ——函數指針
作用:配合查詢命令使用,當使用查詢的時候必須傳遞這個參數
當執行查詢命令的時候,查詢的結果有幾個,那麼callback指向的函數就被調用幾次
參數:void* ——要傳遞的任意值
int——表格中有多少字段(列數)
char**——存放每一行具體的信息
char** ——存放字段名
void * ——傳遞給callback的第一個參數
errmsg——存 放出錯信息的
(3)關閉數據庫
int sqlite3_close(句柄);
注意:編譯程序時需要指定sqlite3庫的路徑,頭文件路徑並鏈接庫,參考命令如下:
gcc sqlitetest.c -o sqlitetest -I/home/win/sqlite3/include/ -L/home/win/sqlite3/lib/ -lsqlite3
具體例子如下:
#include <stdio.h>
#include "sqlite3.h"
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int showinfo(void *argc,int col,char **str1,char **str2)
{
int i = 0;
for(i=0; i<col; i++)
{
printf("%s:%s\n",*(str2+i),*(str1+i));
if(i%col == 1)
printf("\n");
}
return 0;
}
int main()
{
int ret;
char name[20];
int age;
sqlite3 *mydb; //定義句柄
//打開、新建數據庫文件
ret=sqlite3_open("./test.db",&mydb);
if(ret!=SQLITE_OK)
{
printf("打開,新建數據庫失敗!\n");
return -1;
}
//新建表格
ret=sqlite3_exec(mydb,"create table student (name text,age int);",NULL,NULL,NULL);
if(ret == 1)
printf("the table is exist\n");
else if(ret == SQLITE_OK)
printf("建表成功\n");
else
{
printf("新建表格失敗!\n");
return -1;
}
char order[70] ={};
printf("請輸入學生信息\n");
printf("姓名:");
scanf("%s",name);
printf("年齡:");
scanf("%d",&age);
sprintf(order,"insert into student values(\"%s\",%d);",name,age);
ret=sqlite3_exec(mydb,order,NULL,NULL,NULL);
if(ret!=SQLITE_OK)
{
printf("加入數據失敗!\n");
return -1;
}
printf("加入數據成功\n");
ret=sqlite3_exec(mydb,"select * from student;",showinfo,&ret,NULL);
if(ret!=SQLITE_OK)
{
printf("加入數據失敗!\n");
return -1;
}
sqlite3_close(mydb);
return 0;
}