C語言通過 sqlite3 的API進行開發

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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章