-
说明
SQLite 是一种轻量级的嵌入式关系型数据库管理系统。它被广泛应用于移动设备、嵌入式系统以及各种小型应用程序中,因为它不需要独立的服务器进程,而是直接访问一个存储在磁盘上的单一文件。SQLite 具有简单、易于使用的特点,同时也支持标准的 SQL 查询语言。 -
数据库的简单使用
- 打开数据库
点击查看代码
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;
}
- 注意事项
- 打开数据库后返回的句柄
在 SQLite 中,打开数据库后会返回一个数据库连接对象,通常称为 "句柄" 或 "连接句柄"。这个句柄是一个指向数据库的引用,你可以使用它执行各种数据库操作,比如执行 SQL 查询、插入、更新和删除数据等。在使用 SQLite API 或者相关的库时,你可以通过函数或者方法来获取和管理这个数据库连接句柄。 - 可以在调用相关函数时,在函数参数中添加返回的句柄;或者将句柄设置为全局变量。