加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite学习笔记7:C语言中使用sqlite之打开数据库

发布时间:2020-12-12 19:58:06 所属栏目:百科 来源:网络整理
导读:数据库的基本内容前面都已经说得差不多了,接下看看怎样在C语言中使用sqlite。 一 接口 sqlite3_open(const char *filename,sqlite3 **ppDb) 打开数据库,如果数据库不存在则新建一个数据库,并打开 sqlite3_close(sqlite3*) 关闭数据库,如果关闭之前还存在

数据库的基本内容前面都已经说得差不多了,接下看看怎样在C语言中使用sqlite。

一 接口

sqlite3_open(const char *filename,sqlite3 **ppDb)

打开数据库,如果数据库不存在则新建一个数据库,并打开


sqlite3_close(sqlite3*)

关闭数据库,如果关闭之前还存在没有执行完的语句,将会返回 SQLITE_BUSY


二 实例

1 目录结构

Projects{

main.c// 代码所在文件

sqlite{// 官网下载下来的sqlite压缩包解压之后的文件目录

shell.c// 本文件在项目中实际上是用不上的,这个文件是用来生成sqlite命令工具的,具体可以参考:sqlite学习笔记1

sqlite3.c

sqlite3.h

sqlite3ext.h

}

}


2 源代码

// main.c
#include <stdio.h>
#include <stdlib.h>
#include "sqlite/sqlite3.h"

#define DB_NAME "hanfeng.db"

int main()
{
    sqlite3* db = NULL ;
    char* msg = NULL ;
    int ret = 0 ;
    
    ret = sqlite3_open(DB_NAME,&db);
    if (ret){
        fprintf(stderr,"error open datebase:%sn.",DB_NAME) ;
        exit(0) ;
    }
    else{
        fprintf(stdout,"successfully open datebase.n") ;
    }
    sqlite3_close(db) ;
    return 0;
}


为了今后扩展方便,现将代码修改如下:

#include <stdio.h>
#include <stdlib.h>
#include "sqlite/sqlite3.h"

#define DB_NANE "sqlite/test.db"

sqlite3 *db = NULL;
char* sql = NULL;
char *zErrMsg = NULL;
int ret = 0;

typedef enum{
    false,true
} bool;

static int callback(void *NotUsed,int argc,char **argv,char **azColName)
{
    int i = 0;
    for(i=0; i < argc; i++){
        printf("%s = %sn",azColName[i],argv[i] ? argv[i] : "NULL");
    }
    printf("n");
    
    return 0;
}

bool connectDB()
{
    ret = sqlite3_open(DB_NANE,&db);
    
    if( ret != SQLITE_OK){
        fprintf(stderr,"Error open database: %sn",sqlite3_errmsg(db));
        sqlite3_free(zErrMsg);
        
        return false;
    }
    
    fprintf(stdout,"Successfully opened databasen");
    return true;
}

bool closeDB()
{
    int ret = 0;
    ret = sqlite3_close(db);
    if ( ret == SQLITE_BUSY ){
        return false;
    }
    
    return true;
}

int main(int argc,char* argv[])
{
    connectDB();
    closeDB();
    
    return 0;
}



3 编译运行

运行有两种方式,基于前面的笔记,我们并没有配置sqlite的环境,仅仅是下载解压得到列一个文件夹sqlite,因此,需要用如下命令:

gcc -o main main.c ./sqlite/sqlite3.c -lpthread -ldl

如果下载配置安装了sqlite,则需要将上面的头文件包含改为:
#include <sqlite3.h>

然后执行命令:
gcc -o main main.c  -lsqlite3


命令执行完成之后会生成一个叫main的可执行文件,输入:
./main

既可以看到结果。


#在编译时使用g++会报错:error: invalid conversion from ‘const void*’ to ‘const char*’

g++貌似对类型转换要求更为严格,不支持这样的转换。

路过的大侠,知道怎样用g++编译的,请指教......

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读