数据库:编程(打开、操作、关闭)

一、需要的头文件

sqlite3.h

二、编译过程

gcc xxx -lsqlite3

三、编程框架

打开数据库 ==》读写数据库(增,删,改,查) ==》关闭数据库

3.1 打开数据库: sqlite3_open

int sqlite3_open(char * path,sqlite3 ** db);

功能:打开指定path路径+文件名称的数据库,并将打开的地址指向db变量的句柄。

参数:path 要打开的数据库路径+名称

db 要打开的数据库地址指针

返回值:成功 0

失败 -1;

3.2 关闭数据库: sqlite3_close

int sqlite3_close(sqlite3 *db);

功能:关闭指定的数据库

参数:要关闭的数据库地址

返回值:成功 0

失败 -1;

3.3 数据库操作:

查询操作:sqlite3_get_table(); select

int sqlite3_get_table(sqlite3 *db,char *sql,char **++***++**result,int *nrow,int *ncol,char ** errmsg);

功能:在db数据库上执行sql查询语句,并将执行的结果集返回到rest地址上,同时返回查询的行和列。

参数:db 要执行查询语句的数据库

sql 要执行的select查询语句

result 查询的结果集是一个三级指针//

nrow 查询的结果的行数

ncol 查询的结果的列数

errmsg 如果执行有错误,则存储错误

返回值:成功 0

失败 非0;

cs 复制代码
#include <stdio.h>
#include <sqlite3.h>

int show(void*arg ,int col ,char**result ,char**title)
{
    *(int*)arg = 1;
    return 0;
}
int main(int argc, char *argv[])
{
    sqlite3* db;
    int ret = sqlite3_open("aaa.db",&db);
    if(SQLITE_OK != ret)
    {
        fprintf(stderr,"open db error:%s\n",sqlite3_errmsg(db));
        sqlite3_close(db); 
        return  1;
    }

    char name[50]="yyy";
    char pass[50] ="18";
    char sql_cmd[256]={0};
    sprintf(sql_cmd,"select * from user where name like '%s' and age ='%s';"
            ,name,pass);
    char * errmsg;
    int flag = 0;
    ret = sqlite3_exec(db,sql_cmd,show,&flag,&errmsg);
    if(SQLITE_OK != ret)
    {
        fprintf(stderr,"exec sqlcmd error:%s\n",errmsg);
        sqlite3_free(errmsg);
        sqlite3_close(db); 
        return  1;
    }
    if(0 == flag)
    {
        printf("username passwd error\n");
    }
    else 
    {
        printf("username passwd correct\n");
    }
    sqlite3_close(db);
    return 0;
}

执行sql语句 :sqlite3_exec(); insert delete update

int sqlite3_exec(sqlite3 *db,char *sql,callback fun,void * arg,char ** errmsg);

功能:在db数据库上执行sql ++非查询语句++ 。并将结果返回。

参数:db 要执行sql的数据库

sql 要执行的非查询sql语句

fun 如果该函数要执行查询语句,则该回调函数用来回收查询的结果。第三个参数返回结果

arg 回调函数的参数,如果没有回调函数则该参数为NULL;

errmsg 执行过程中的错误信息

返回值:成功 0

失败 非0 ;

cs 复制代码
#include <stdio.h>
#include <sqlite3.h>

int main(int argc, char *argv[])
{
    sqlite3* db;
    int ret = sqlite3_open("aaa.db",&db);
    if(SQLITE_OK != ret)
    {
        fprintf(stderr,"open db error:%s\n",sqlite3_errmsg(db));
        sqlite3_close(db); 
        return  1;
    }
    char sql_cmd[256]="insert into user values(10,'yyy',18);";
    char * errmsg;
    ret = sqlite3_exec(db,sql_cmd,NULL,NULL,&errmsg);
    if(SQLITE_OK != ret)
    {
        fprintf(stderr,"exec sqlcmd error:%s\n",errmsg);
        sqlite3_free(errmsg);
        sqlite3_close(db); 
        return  1;
    }

    sqlite3_close(db);
    return 0;
}

int fun(void *arg ,int f_num,char ** f_value,char ** f_name)

功能:该函数用于sqlite3_exec执行select语句的,结果集返回数据。

参数:arg 由sqlite3_exec传入的参数

f_num 执行该命令所返回测结果集的字段个数。

f_value 查询结果集中的字段的值。

f_name 查询结果集中的字段的名称。

返回值:成功 0

失败 非0

注意:该回调函数必须有返回值,否则可能导致查询异常。

相关推荐
欢呼的太阳7 小时前
数据库设计Step by Step (10)——范式化
服务器·数据库·oracle
喜欢的名字被抢了8 小时前
MySQL基础入门:从零理解数据库与SQL
数据库·mysql·教程
donoot9 小时前
Linux系统下图书馆级电子书全自动标准化分类整理完整实施方案
大数据·linux·运维·电子书管理
Felix-lxd9 小时前
Ubuntu 22.04 配置 Nginx
linux·nginx·ubuntu
Elastic 中国社区官方博客9 小时前
如何比较两个 Elasticsearch 索引并找出缺失的文档
大数据·运维·数据库·elasticsearch·搜索引擎
DLYSB_10 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
儒雅的大叔10 小时前
MySQL数据库InnoDB数据恢复工具使用总结
数据库·mysql·adb
观远数据10 小时前
ChatBI选型对比:从意图识别到SQL修复,六个维度打分决定是否值得投产
数据库·人工智能·sql
嘉&年华10 小时前
【第008篇】通过dexp和dimp命令导出和导入dmp文件(适用于达梦数据库)
数据库·sql
Tim_Van10 小时前
在 CentOS 7 中安装 Chromium 的完整步骤
linux·运维·chrome·centos