首页 > 数据库 >数据库:编程(打开、操作(增、删、改、查)、关闭)

数据库:编程(打开、操作(增、删、改、查)、关闭)

时间:2024-07-15 19:28:48浏览次数:16  
标签:int 数据库 编程 db char 关闭 sql sqlite3 errmsg

一、需要的头文件

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;

#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 ;

#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
    注意:该回调函数必须有返回值,否则可能导致查询异常。

标签:int,数据库,编程,db,char,关闭,sql,sqlite3,errmsg
From: https://blog.csdn.net/weixin_71751116/article/details/140441225

相关文章

  • Windows 注册表编辑器(regedit)的演变和发展主要是由 Microsoft Windows 操作系统的设计
    Windows注册表编辑器(regedit)的演变和发展主要是由MicrosoftWindows操作系统的设计和需求驱动的。下面是大致的演化过程:需求和设计:在早期的Windows系统中,配置信息分散存储在各种配置文件和INI文件中,管理起来不够方便。为了统一管理系统配置信息,并提高系统的灵活性和可维......
  • php数据库连接代码
    在PHP中连接到数据库(以MySQL为例)通常使用 mysqli 或 PDO 扩展。以下是使用这两种方法连接到MySQL数据库的示例代码。使用mysqli<?php  $servername = "localhost";  // 数据库服务器名称  $username = "username";     // 数据库用户名  $pass......
  • Day1_1--通过jdbc驱动程序连接mysql数据库+测试(hamcrest+junit)
    idea项目导入mysql对应版本jar包驱动File->ProjectStructure->Libraries点击加号添加驱动并Apply参考代码importorg.junit.Test;importjava.sql.*;/***@authornanzhi*@date2024/7/159:52*/publicclassk1_jdbc{publicstaticvoidmain(String[]ar......
  • Epson机器人编程初级阶(三)
    TCP通讯案例1.调用函数'TCP通讯案例GlobalStringX1$,Y1$,Z1$,U1$'定义全局变量FunctionTCP1Callinition'初始化程序,打开电源设置速度等CallNetConnet'建立连接DoCallData'调用接收数据函数GoXY(Val(X1$),Val(Y1$),Val(Z1......
  • 基于springboot+vue“智慧食堂”(毕设+实现+源码+数据库)
    摘要随着Internet的发展,人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化,网络化和电子化。网上管理,它将是直接管理“智慧食堂”系统的最新形式。本LW是以构建“智慧食堂”系统为目标,使用java技术制作,由管理员和用户两大部分组成。着重论述了系统设计......
  • 数据库操作语言之DDL、DML、DCL、DQL
    文章目录数据定义语言DDL【DataDefinitionLanguage】创建数据库的语法:查看数据库的语法:删除数据库的语法:数据表【DDL】数据表操作的命令有:创建数据表语法:查看数据表语法:删除数据表语法:修改数据表的常用操作:给数据表添加一列:修改列类型:修改列名:删除一列:修改表名:数......
  • Epson机器人编程初级阶(二)
    Wait等待时间与信号控制,时间默认单位是秒WaitSw(0)=On:等待输入0变为On状态Wait60.5:等待60.5秒后执行WaitSw(0)=OffAndSw(1)=On:等待输入0变为Off并且出入1变为On状态WaitMemsw(0)=OnOrMemsw(1)=On:等待储存位0变为啥On或存储位1变为On状态Wait1;On1:等待1......
  • 【Linux网络编程-6】IO复用
    select模型//selectServer.cpp#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<arpa/inet.h>#include<sys/socket.h>#include<errno.h>#include<sys/select.h>#include&......
  • 使用K8S部署的禅道怎么修改不使用容器自带的数据库而使用其他数据库
    使用K8S部署禅道参考https://www.cnblogs.com/minseo/p/17870641.html如果想要使用不使用容器内自带的数据库修改配置文件找到pvc原始文件位置修改配置文件修改以下配置文件#zentao/config/my.php修改数据库的地址,设置用户名和密码<?php$config->installed=......
  • 005_python3 元组 字典 集合 条件控制 循环语句 编程第一步
    Python3元组1.元组的元素不能修改,使用小括号,逗号隔开,也可不用小括号,不同类型元素tup1=()  #创建空元组tup2=('he',)   #元组中只包含一个元素时,需要在元素后面添加逗号 , ,否则括号会被当作运算符使用tup3=('abc','xyz',2,4,9)2.元组使用访问元组:tup3......