首页 > 数据库 >sqlite3数据库的使用

sqlite3数据库的使用

时间:2024-04-23 17:11:46浏览次数:13  
标签:name err 数据库 char msg 使用 sqlite3 table

  1. 说明
    SQLite 是一种轻量级的嵌入式关系型数据库管理系统。它被广泛应用于移动设备、嵌入式系统以及各种小型应用程序中,因为它不需要独立的服务器进程,而是直接访问一个存储在磁盘上的单一文件。SQLite 具有简单、易于使用的特点,同时也支持标准的 SQL 查询语言。

  2. 数据库的简单使用

  • 打开数据库
点击查看代码
int database_init(char *db_name)
{
        if( !db_name )
        {
                log_error("%s() Invalid input arguments\n",__func__);
                return -1;
        }

        /* if database exists then open it*/
        if( 0 == access(db_name, F_OK))
        {
                if( SQLITE_OK != sqlite3_open(db_name, &db) )
                {
                        log_error("open database failure\n");
                        return -2;
                }
                log_info("open database ok\n");
                return 0;
        }

        /* if database doesn't exist ,create and open it */
        if( SQLITE_OK != sqlite3_open(db_name, &db))
        {
                log_error("create database failure\n");
                return -3;
        }
        log_info("open database ok\n");
        return 0;
}
  • 关闭数据库
点击查看代码
/* Description:close the database */
void database_close(void)
{
        if(db!=NULL)
        {
                sqlite3_close(db);
        }
}
  • 创建表
点击查看代码
/* Description:Create table */
int table_init(char * table_name)
{
        int     rc=0;
        char    sql[128]={0};
        char    *err_msg=NULL;

        /* create table */
        sprintf(sql,"CREATE TABLE IF NOT EXISTS %s(ID TEXT,Temperature REAL,time1 TEXT)",table_name);
        rc=sqlite3_exec(db,sql,0,0,&err_msg);
        if(rc!=SQLITE_OK)
        {
                log_error("create table %s error:%s\n",table_name,err_msg);
                sqlite3_free(err_msg);
                sqlite3_close(db);
                unlink(db_name);
                return -1;
        }

        log_info("create table ok\n");
        sqlite3_free(err_msg);

        return 0;
}
  • 删除表
点击查看代码
/* Description:delete the table */
int table_delete(char * table_name)
{
        int             rc=0;
        int     ret=-1;
        char    sql[128]={0};
        char    *err_msg=NULL;

        sprintf(sql,"DROP TABLE %s",table_name);
        rc=sqlite3_exec(db,sql,0,0,&err_msg);
        if(rc!=SQLITE_OK)
        {
                log_error("delete table %s error:%s\n",table_name,err_msg);
                sqlite3_free(err_msg);
                ret=-1;
        }
        else
        {
                ret=0;
        }
        return ret;
}
  • 插入数据
点击查看代码

/* Description:Insert data to database */
int database_data_insert(char* table_name,char *price)
{
        int             rc=0;
        char    sql[128];
        char    *err_msg=NULL;

        sprintf(sql,"INSERT INTO %s(PRICE) VALUES ('%s')",table_name,price);

        rc=sqlite3_exec(db,sql,0,0,&err_msg);
        if(rc!=SQLITE_OK)
        {
                log_error("Insert error:%s\n",err_msg);
                sqlite3_free(err_msg);
                return -1;
        }

        return 0;
}
  • 删除第一行数据
点击查看代码

/* Description:Delete the first row of data from the database */
int     database_data_delete(char* table_name)
{
        int     rc=0;
        char    sql[128]={0};
        char    *err_msg=NULL;
        sprintf(sql,"DELETE FROM %s WHERE ROWID = (SELECT MIN(rowid) FROM %s);",table_name,table_name);
        rc=sqlite3_exec(db,sql,0,0,&err_msg);
        if(rc!=SQLITE_OK)
        {
                log_error("delete error:%s\n",err_msg);
                sqlite3_free(err_msg);
                return -1;
        }

        return 0;
}

  • 查询是否存在数据
点击查看代码
/* Description:Query whether there is data in the database */
int database_data_select(char* table_name)
{
        char                    *err_msg=NULL;
        int                             rc;
        char                    sql[128]={0};
        sqlite3_stmt    *stmt;
        int                             result=0;
        int                             rv;

        sprintf(sql,"SELECT COUNT(*) FROM %s",table_name);
        rc=sqlite3_prepare_v2(db,sql,-1,&stmt,0);

        if(rc!=SQLITE_OK)
        {
                log_error("Failed to prepare statement:%s\n",err_msg);
                sqlite3_free(err_msg);
                return -1;
        }

        rc=sqlite3_step(stmt);
        if(rc==SQLITE_ROW)
        {
                result=sqlite3_column_int(stmt,0);
        }

        if(result>0)
        {
                rv=0;
        }
        else
        {
                rv=-1;
        }
        sqlite3_finalize(stmt);
        return rv;
}
  • 查询第一行数据
点击查看代码
/* Description:Take the first row of data from database */
int database_data_take(char* table_name)
{
        int             i;
        char    *err_msg=NULL;
        char    sql[128]={0};
        int             rc=0;
        int             rows,columns;
        char    **results;

        sprintf(sql,"SELECT * FROM %s LIMIT 1",table_name);
        rc=sqlite3_get_table(db,sql,&results,&rows,&columns,&err_msg);
        if(rc!=SQLITE_OK)
        {
                log_error("Select error:%s\n",err_msg);
                sqlite3_free(err_msg);
                return -1;
        }
        sqlite3_free_table(results);
        return 0;
}
  1. 注意事项
  • 打开数据库后返回的句柄
    在 SQLite 中,打开数据库后会返回一个数据库连接对象,通常称为 "句柄" 或 "连接句柄"。这个句柄是一个指向数据库的引用,你可以使用它执行各种数据库操作,比如执行 SQL 查询、插入、更新和删除数据等。在使用 SQLite API 或者相关的库时,你可以通过函数或者方法来获取和管理这个数据库连接句柄。
  • 可以在调用相关函数时,在函数参数中添加返回的句柄;或者将句柄设置为全局变量。

标签:name,err,数据库,char,msg,使用,sqlite3,table
From: https://www.cnblogs.com/yl0309/p/18153226

相关文章

  • 使用@MultipartConfig上传图片文件
    @MultipartConfig是JavaServletAPI的一部分,主要用于处理HTTP的multipart/form-data类型的请求,这种请求通常用于文件上传。当你在Servlet或JSP页面中使用@MultipartConfig时,你告诉容器这个Servlet或JSP页面将处理文件上传。@MultipartConfig(location="C:/Users/Administrator......
  • Keepass安装使用方法(包含浏览器插件使用方法)
    相关后续阅读:Keepass调用Xshell、SecureCRT、RDP、Putty的方法(一劳永逸版)安装方法:1、安装KeePass-2.56-Setup.exe,选择语言——English2、一路默认后,安装到默认路径:C:\ProgramFiles\KeePassPasswordSafe23、将语言包Chinese_Simplified.lngx解压拷贝到C:\ProgramFiles\Ke......
  • 【高薪诚聘】数据库精英,加入我们,共创数据未来!
    我们寻找的你:【如果你是数据库架构专家】对数据库架构有深入的了解和实践经验,能够为公司构建稳定、高效、可扩展的数据库架构;对各种数据库系统有深入的理解,包括但不限于MySQL、Oracle、SQLServer等,并能够根据实际业务需求进行选择和优化;对新技术和新架构保持敏感,有能力推动公......
  • 面试官:在原生input上面使用v-model和组件上面使用有什么区别?
    前言还是上一篇面试官:来说说vue3是怎么处理内置的v-for、v-model等指令?文章的那个粉丝,面试官接着问了他另外一个v-model的问题。面试官:vue3的v-model都用过吧,来讲讲。粉丝:v-model其实就是一个语法糖,在编译时v-model会被编译成:modelValue属性和@update:modelValue事件。一......
  • JMeter通过JDBC链接数据库并实现批量造数据
      在JMeter做自动化接口测试,需要对数据库进行增删改查等操作时,我们是无法像navicat一样直接写SQL的,需要通过一系列操作,才可以。 1、首先,第一步就是,在TestPlan中引用对应数据库的jar包,jar包可以在网上找,本文以MySQL为例,步骤如下:   2、第二步,在线程组下面添加JDBCC......
  • ETL工具之Kettle使用方法
    一、Kettle简介1.1、Kettle是什么Kettle是一款国外开源的ETL工具,纯Java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。Kettle中文名称叫水壶,该项目的主程序员MATT希望把各种数据放到一个壶里,然后以一种指定的格式流出。Kettle这个ETL工具集,它允许你管......
  • Oracle数据库出现WARNING: too many parse errors告警的分析思路
    Oracle数据库的告警日志中出WARNING:toomanyparseerrors这些告警信息的话,如果遇到这个问题,我们应该如何分析呢?下面简单聊一下如何分析这个错误。该告警信息其实是12.2版本中的一个特性增强。在以前的Oracle版本中,数据库出现了解析错误时,数据库的alert日志中不会有任何相关的......
  • springboot项目找不到符号问题以及模块聚合项目maven插件使用的相关问题 问题如图
    参考:https://www.cnblogs.com/coderxiaobai/p/15005181.html问题:更换maven,清空缓存重新导入依赖依然无效后(1)解决方法:方式一:删除项目中.idea文件夹,重新打开项目,选中jdk版本,重新导入依赖即可。(2)如果不是上述的原因可能是项目是模块聚合项目,原因就是父工程的pom中存在maven插......
  • Django使用MSSQL创建数据表
    Django使用MSSQL创建数据表Django使用MSSQL创建数据表Django是一个基于Python的开源Web应用框架,它提供了一套完整的开发工具和库,用于快速构建高效、安全的Web应用程序。MSSQL是一种关系型数据库管理系统,由Microsoft开发和维护。在Django中使用MSSQL创建数据表,需要进行以下步骤:......
  • 考研党打印资料怎么使用云打印服务?
    对于准备考研的同学们来说,在备考的时候需要准备许多资料,这些资料的打印费用成为了考研党的巨额支出。那么在生活费有限的情况下,考研党打印资料最好是选择云打印服务,因为易绘创云打印服务低至5分钱/页还包邮。那么考研党打印资料怎么使用云打印服务呢?今天就带大家一起来了解一下。......