一:打开关闭库
- #include <sqlite3.h>
- sqlite3_open(const char *filename, sqlite3 **ppDb)
- sqlite3_close(sqlite3*) 如果查询没有完成,则会返回SQLITE_BUSY禁止关闭的错误信息
- const char *sqlite3_errmsg(sqlite3*)
- sqlite3_errcode() 用来获取最近调用的API接口返回的错误代码
- SQLITE_OK 创建成功
- gcc xx.c -lsqlite3
#include <stdio.h>
#include <sqlite3.h>
int main(char argc,char **argv)
{
int ret;
sqlite3 *db;
if(argc < 2){
printf("create no name\n");
return -1;
}
ret = sqlite3_open(argv[1],&db);
if(ret == SQLITE_OK){
printf("open %s success\n",argv[1]);
}else{
printf("error,%s\n",sqlite3_errmsg(db));
return -1;
}
sqlite3_close(db);
printf("done\n");
return 0;
}
二:查询语句
- sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
- 参数分析:sqlite3*:打开的数据库 const char *sql:要执行的sql语句
int (*callback)(void*,int,char**,char**):执行sql语句时对应的回调函数
void *:回调函数的参数 char **errmsg:存放错误信息 - 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)
{
int ret;
sqlite3 *db;
char *errorMsg = NULL;
if(argc < 2){
printf("create no name\n");
return -1;
}
ret = sqlite3_open(argv[1],&db);
if(ret == SQLITE_OK){
printf("open %s success\n",argv[1]);
}else{
printf("error,%s\n",sqlite3_errmsg(db));
return -1;
}
//sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg);
sqlite3_exec(db,"select * from stu;",callback,"this content:\n",&errorMsg); //errorMsg may segment error!
sqlite3_close(db);
printf("done\n");
return 0;
}
三:建表和插入数据
#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)
{
int ret;
sqlite3 *db;
char *errorMsg = NULL;
if(argc < 2){
printf("create no name\n");
return -1;
}
ret = sqlite3_open(argv[1],&db);
if(ret == SQLITE_OK){
printf("open %s success\n",argv[1]);
}else{
printf("error,%s\n",sqlite3_errmsg(db));
return -1;
}
ret = sqlite3_exec(db,"create table Class01(id Integer,name char,score Integer);",\
callback,"this content:\n",&errorMsg); //errorMsg may segment error!
if(ret != SQLITE_OK){
printf("create fail,error=%s\n",errorMsg);
}
sqlite3_exec(db,"insert into Class01 values(122,'huang',99);", \
callback,"this content:\n",&errorMsg); //errorMsg may segment error!
printf("insert %d,%s\n",ret,errorMsg);
//sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg);
sqlite3_exec(db,"select * from Class01;",callback,"this content:\n",&errorMsg); //errorMsg may segment error!
sqlite3_close(db);
printf("done\n");
return 0;
}