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 或者相关的库时,你可以通过函数或者方法来获取和管理这个数据库连接句柄。
  • 可以在调用相关函数时,在函数参数中添加返回的句柄;或者将句柄设置为全局变量。