一、打开/创建数据库的C接口
①sqlite3_open ( const char * filename , sqlite3 ** ppDb )打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对 象。②sqlite3_close(sqlite3*)关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。③const char *sqlite3_errmsg(sqlite3*);sqlite3_errcode () 通常用来获取最近调用的 API 接口返回的错误代码 .
opensqlite.c
#include <stdio.h>
#include <sqlite3.h>
int main(char argc, char **argv)
{
sqlite3 *db;//句柄
if(argc < 2){
printf("Usage:%s xxx.db\n",argv[0]);
return -1;
}
if(sqlite3_open(argv[1],&db) == SQLITE_OK){
printf("open %s success\n",argv[1]);
}
sqlite3_close(db);
printf("done\n");
return 0;
}
编译:
gcc openlite.c -lsqlite3
运行:
./a.out new.db
结果:因为该目录下没有new.db,所以创建了一个
open返回值:
对返回值及错误的判断:
二、创建表的C接口
①sqlite3_exec(sqlite3*, const char *`sql, sqlite_callback, void *data, char **errmsg)该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。参数说明:sqlite3:打开的数据库对象sqlite_callback:一个回调函数data:作为其第一 个参数errmsg:将被返回用来获取程序生成的任何错误sqlite3_exec() 程序解析并执行由 sql 参数所给的每个命令,直到字符串结束或者遇到错误为止。②int callback(void *arg, int column_size, char *column_value[], char *column_name[])参数说明:void *arg:是sqlite3_exec函数的第四个参数column_size:数据库的字段数column_value[]:列的值column_name[]:字段名字
#include <stdio.h>
#include <sqlite3.h>
//回调函数
int callback(void *arg, int column_size, char *column_value[], char *column_name[])
{
int i;
printf("arg=%s\n",(char *)arg);
for(i=0;i<column_size;i++){
printf("%s = %s\n", column_name[i], column_value[i]);
}
printf("=======================\n");
return 0;//必须返回0,这样数据库中有多少条数据,这个回调函数就会被调用多少次
}
int main(char argc, char **argv)
{
sqlite3 *db;
char *errorMes = NULL;
int ret;
if(argc < 2){
printf("Usage: %s xxx.db\n",argv[0]);
return -1;
}
if( (ret = sqlite3_open(argv[1],&db)) == SQLITE_OK){
printf("open %s success\n",argv[1]);
}else{
printf("error:%s,%d\n",sqlite3_errmsg(db),ret);
if(ret == 14){
printf("permission den\n");
}
return -1;
}
sqlite3_exec(db, "select * from stu;",callback, "content of sql:",&errorMes);
sqlite3_close(db);
printf("done\n");
return 0;
}
运行结果:
open test.db success
arg=content of sql:
id = 2
name = zhang
score = 99
sex = (null)
=======================
arg=content of sql:
id = 3
name = wang
score = 100
sex = f
=======================
done
C程序创建一个表格,并写入数据
#include <stdio.h>
#include <sqlite3.h>
int callback(void *arg, int column_size, char *column_value[], char *column_name[])
{
int i;
printf("arg=%s\n",(char *)arg);
for(i=0;i<column_size;i++){
printf("%s=%s\n",column_name[i],column_value[i]);
}
printf("=======================\n");
return 0;
}
int main(char argc, char **argv)
{
sqlite3 *db;
char *errorMes = NULL;
int ret;
if(argc < 2){
printf("Usage:%s xxx.db\n",argv[0]);
return -1;
}
if((ret = sqlite3_open(argv[1],&db)) == SQLITE_OK){
printf("open %s success\n",argv[1]);
}else{
printf("error:%s,%d\n",sqlite3_errmsg(db),ret);
return -1;
}
//创建,写入,读取
sqlite3_exec(db,"create table class01(id Integer,name char,score Integer);",callback,"content of sql:",&errorMes);
sqlite3_exec(db,"insert into class01 values(23,'wang',100);",callback,"content of sql:",&errorMes);
sqlite3_exec(db,"select * from class01;",callback,"content of sql:",&errorMes);
sqlite3_close(db);
printf("done\n");
return 0;
}
运行结果:
open test.db success
arg=content of sql:
id=23
name=wang
score=100
=======================
done