.1 打开/创建数据库的C接口
下面的 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接口返回的错误代码
|
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
int main (int argc,char **argv)
{
int ret;
sqlite3 *db;
if(argc<2){
printf("Usage:%s xxx.db\n",argv[0]);
exit(-1);
}
ret=sqlite3_open(argv[1],&db);
if(ret==SQLITE_OK){
printf("open %s success\n",argv[1]);
}else{
printf("error:%s,%d\n",sqlite3_errmsg(db),ret);
if(ret==SQLITE_CANTOPEN){
printf("geshi error\n");
}
exit(-1);
}
sqlite3_close(db);
printf("done\n");
return 0;
}
2 创建表的C接口
下面的 C 代码段将用于在先前创建的数据库中创建一个表:先看这个
sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
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>
#include <stdlib.h>
int callback(void *arg, int column_size, char *column_value[], char*column_name[])
{
printf("%s\n",(char*)arg);
int i;
for(i=0;i < column_size;i++){
printf("%s:%s\n",column_name[i],column_value[i]);
}
printf("=======================================\n");
return 0;//必须返回0
}
int main (int argc,char **argv)
{
char *erroMsg=NULL;
int ret;
sqlite3 *db;
if(argc<2){
printf("Usage:%s xxx.db\n",argv[0]);
exit(-1);
}
ret=sqlite3_open(argv[1],&db);
if(ret==SQLITE_OK){
printf("open %s success\n",argv[1]);
}else{
printf("error:%s,%d\n",sqlite3_errmsg(db),ret);
if(ret==SQLITE_CANTOPEN){
printf("geshi error\n");
exit(-1);
}
}
// sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char**errmsg)
sqlite3_exec(db,"select * from stu;",callback,"content of sql:",&erroMsg);
sqlite3_close(db);
printf("done\n");
return 0;
}
- 实现一条建立表格的指令 ,插入数据
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
int callback(void *arg, int column_size, char *column_value[], char*column_name[])
{
printf("%s\n",(char*)arg);
int i;
for(i=0;i < column_size;i++){
printf("%s:%s\n",column_name[i],column_value[i]);
}
printf("=======================================\n");
return 0;//必须返回0
}
int main (int argc,char **argv)
{
char *erroMsg=NULL;
int ret;
sqlite3 *db;
if(argc<2){
printf("Usage:%s xxx.db\n",argv[0]);
exit(-1);
}
ret=sqlite3_open(argv[1],&db);
if(ret==SQLITE_OK){
printf("open %s success\n",argv[1]);
}else{
printf("error:%s,%d\n",sqlite3_errmsg(db),ret);
if(ret==SQLITE_CANTOPEN){
printf("geshi error\n");
exit(-1);
}
}
// sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char**errmsg)
ret=sqlite3_exec(db,"create table class01(id Integer,name char,score Integer);",callback,"content of sql:",&erroMsg);
if(ret != SQLITE_OK){
printf("creat:%s\n",erroMsg);
}
ret=sqlite3_exec(db,"insert into class01 values(22,'weijiaxin',100);",callback,"content of sql:",&erroMsg);
printf("ret=%d,insert=%s\n",ret,erroMsg);
ret=sqlite3_exec(db,"select * from class01;",callback,"content of sql:",&erroMsg);
printf("ret=%d,select=%s\n",ret,erroMsg);
sqlite3_close(db);
printf("done\n");
return 0;
}
4 SELECT 操作
typedef int (*sqlite3_callback)(
void*, /* sqlite3_exec()的第四个参数传递的内容 */
int, /* 列 */
char**, /* 键值对的值 */
char** /* 键值对的键 */
);
如果上面的回调在 sqlite_exec() 程序中作为第三个参数,那么 SQLite 将为 SQL 参数内执行的每个 SELECT 语句中处理的每个记录调用这个回调函数。
下面的 C 代码段显示了如何从前面创建的 COMPANY 表中获取并显示记录:
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
static int callback(void *data, int argc, char **argv, char **azColName){
int i;
fprintf(stderr, "%s: ", (const char*)data);
for(i=0; i<argc; i++)
printf("%s = %s\n", azColName[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";
/* Open database */
rc = sqlite3_open("test.db", &db);
/* Create SQL statement */
sql = "SELECT * from COMPANY";
/* Execute SQL statement */
rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
sqlite3_close(db);
return 0;
}
5 UPDATE操作 下面的 C 代码段显示了如何使用 UPDATE 语句来更新任何记录,然后从 COMPANY 表中获取并显示更 新的记录:
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
static int callback(void *data, int argc, char **argv, char **azColName){
int i;
fprintf(stderr, "%s: ", (const char*)data);
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[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";
/* Open database */
rc = sqlite3_open("test.db", &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
exit(0);
}else{
fprintf(stderr, "Opened database successfully\n");
}
/* Create merged SQL statement */
sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1; " \
"SELECT * from COMPANY";
/* Execute SQL statement */
rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
if( rc != SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}else{
fprintf(stdout, "Operation done successfully\n");
}
sqlite3_close(db);
return 0;
}
6 DELETE操作
下面的 C 代码段显示了如何使用 DELETE 语句删除任何记录,然后从 COMPANY 表中获取并显示剩余的 记录:
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
static int callback(void *data, int argc, char **argv, char **azColName){
int i;
fprintf(stderr, "%s: ", (const char*)data);
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[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";
/* Open database */
rc = sqlite3_open("test.db", &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
exit(0);
}else{
fprintf(stderr, "Opened database successfully\n");
}
/* Create merged SQL statement */
sql = "DELETE from COMPANY where ID=2; " \
"SELECT * from COMPANY";
/* Execute SQL statement */
rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
if( rc != SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}else{
fprintf(stdout, "Operation done successfully\n");
}
sqlite3_close(db);
return 0;
}