首先我们先了解sql语句的几个基本操作函数的函数原型
打开或创建数据库:
sqlite3_open(const char *filename, sqlite3 **ppDb)
如果filename为NULL或者为 ':memory:'那么 sqlite3_open() 将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。
如果文件名 filename 不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开。
sqlite3_exec() 程序解析并执行由 sql 参数所给的每个命令,直到字符串结束或者遇到错误为止。
sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
第一个参数 :sqlite3 是打开的数据库对象。
第二个参数:sqlite_callback 是一个回调。
第三个参数:data 作为其第一个参数。
第四个参数:errmsg 将被返回用来获取程序生成的任何错误。
关闭数据库
sqlite3_close(sqlite3*)
代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
static int callback(void *notused,int argc,char **argv,char **name)
{
int i;
for(i=0;i<argc;i++)
{
printf("%s=%s\n",name[i],argv[i]?argv[i]:"NULL");
}
printf("\n");
return 0;
}
int main(int argc,char **argv)
{
sqlite3 *db;
char *zErrMsg = 0;
int rc;
char *sql;
const char *data = "Callback function called";
rc = sqlite3_open("t.db",&db); //打开数据库,如果不存在,创造数据库db
if(rc)
{
fprintf(stderr,"can't open database:%s\n",sqlite3_errmsg(db));
exit(0);
}
fprintf(stdout,"open database successfully\n");
//创建表TEMPERTURE
sql = "CREATE TABLE IF NOT EXISTS TEMPERTURE("
"ID INT IDENTITY(1,1),"
"NAME CAHR(8),"
"AGE INT(4));";
rc = sqlite3_exec(db,sql,callback,0,&zErrMsg);
if(rc != SQLITE_OK)
{
fprintf(stderr,"SQLerror:%s\n",zErrMsg);
sqlite3_free(zErrMsg);
exit(0);
}
fprintf(stdout,"Table created successfully\n");
//插入语句
sql = "INSERT INTO TEMPERTURE (ID,NAME,AGE) "
"VALUES (1,'Paul', 32); "
"INSERT INTO TEMPERTURE (ID,NAME,AGE) "
"VALUES (2, 'Allen', 25 ); "
"INSERT INTO TEMPERTURE (ID,NAME,AGE)"
"VALUES (3,'Teddy', 23 );"
"INSERT INTO TEMPERTURE (ID,NAME,AGE)"
"VALUES (4,'Mark', 25 );";
rc=sqlite3_exec(db,sql,callback,0,&zErrMsg);
if(rc != SQLITE_OK)
{
fprintf(stderr,"SQLerror:%s\n",zErrMsg);
sqlite3_free(zErrMsg);
exit(0);
}
fprintf(stdout,"insert data successfully\n");
//查询语句
sql = "SELECT * from TEMPERTURE";
rc = sqlite3_exec(db,sql,callback,(void*)data,&zErrMsg);
if(rc != SQLITE_OK)
{
fprintf(stderr,"SQLerror:%s\n",zErrMsg);
sqlite3_free(zErrMsg);
exit(0);
}
else
{
fprintf(stdout,"Option done successfully\n");
fprintf(stdout,data);
}
return 0;
}
调试结果: