SQLite的编程操作

.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;
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值