Sqlite 数据库操作(二)—— Sqlite常用API 及其使用方法

本文介绍了如何使用SQLite数据库API进行数据库的基本操作,包括打开和关闭数据库文件、执行SQL语句、查询表格数据等,并通过示例代码展示了如何创建表格、增删改查数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要使用sqlite数据库的API,需要满足两个条件:

  • 安装sqlite3函数库                          —— 终端输入 sudo apt-get install libsqlite3-dev 
  • 在程序中引入头文件 sqlite3.h        —— #include <sqlite3.h>
  • gcc编译时链接 sqlite3动态库         —— gcc -o sqlite3_t sqlite3_t.c -lsqlite3      


         目录

1、打开数据库文件 sqlite3_open

2、关闭数据库文件 sqlite3_close

3、执行sql语句 sqlite3_exec

(1) sqlite3_exec

(2) 回调函数 callback 参数解析

4、查询表格数据 sqlite3_get_table

5、总结:使用上述API实现表格的创建及增删查改


1、打开数据库文件 sqlite3_open

第一个参数 filename:数据库名称(输入型参数)。sqlite3命令创建数据库的时候,会生成一个数据库文件 xxx.db ,这里要填的就是该数据库文件的路径。

第二个参数ppDb:数据库操作句柄(输出型参数)。后续的增删查改操作都需要通过该句柄实现

返回值:成功返回 SQLITE_OK,失败返回错误码,可以使用sqlite3_errmsg函数获取错误信息。

#include <sqlite3.h>

#define DATABASE "/home/linux/myproject.db"

sqlite3* db;
if(sqlite3_open(DATABASE, &db) != SQLITE_OK){
    printf("%s\n", sqlite3_errmsg(&db));  
    exit(1);
}

2、关闭数据库文件 sqlite3_close

参数是数据库操作句柄,如果关闭成功返回SQLITE_OK,如果数据库还处在使用状态,那就会关闭失败,此时返回 SQLITE_BUSY。

3、执行sql语句 sqlite3_exec

(1) sqlite3_exec

第一个参数 sqlite3:数据库操作句柄

第二个参数 sql:要执行的sql语句

第三个参数 callback:回调函数。只有在执行查询语句的时候,才会需要传参,其他执行语句,直接填NULL。只有在查询的时候,会返回查询结果,回调函数的参数大部分是输出型参数,用于返回查询结果。

第四个参数 args:给回调函数传递的参数。

第五个参数 errmsg:执行sql语句时产生的错误信息。

返回值:成功返回SQLITE_OK;失败返回错误码

int callback(void* arg, int ncolumns , char** f_value, char** f_name)
{}

char** errmsg;
if(sqlite3_exec(&db, "select * from project", callback, NULL, &errmsg) != SQLITE_OK)
{
    printf("%s\n", errmsg);  
}

(2) 回调函数 callback 参数解析

在查询的过程中,每查询到一条记录就会通过回调函数返回,而不是查询到所有数据再一起返回

int callback(void* arg, int ncolumns , char** f_value, char** f_name);

第一个参数 arg:sqlite_exec传递过来的参数

第二个参数 ncolumns:列数

第三个参数 f_value:某一个字段的所有内容

第四个参数 f_name:字段名称

4、查询表格数据 sqlite3_get_table

除了使用 sqlite3_exec 来查询表格内容外,还可以使用 sqlite3_get_table 来直接获取到表格内容,该函数无需传入回调函数。

第一个参数 db:数据库操作句柄

第二个参数 zSql:要执行的sql语句

第三个参数 pazResult:查询到的表格数据。该指针指向的空间是动态开辟的,使用完以后,我们需要使用 sqlite3_free_table 来释放这块空间。

第四个参数 pnRow:查询结果的行数。即有多少条记录

第五个参数 pnColumn:查询结果的列数。即每一条记录有多少个字段

第六个参数 pzErrmsg:执行语句时产生的错误信息

返回值:成功返回SQLITE_OK;失败返回错误码

如果表格内容如下:

那么结果返回的内容如下:

5、总结:使用上述API实现表格的创建及增删查改

#include <stdio.h>
#include <unistd.h>
#include <sqlite3.h>

#define DATABASE "/home/linux/myproject.db"

int main(){
	sqlite3* db;
	// 1.打开数据库文件
	if(sqlite3_open(DATABASE, &db) != SQLITE_OK){
		printf("%s\n",(char*)sqlite3_errmsg(db));  
		return 1;
	}


	// 2.新建一个表格
	char** errmsg;
	const char* sql = "drop table if exists project;\
				  create table project(id integer, device char, code integer);";
	if(sqlite3_exec(db, sql, NULL, NULL, errmsg) != SQLITE_OK)
	{
		printf("%s\n", *errmsg);  
		return 1;
	}

	// 3.插入一条记录
	sql = "insert into project values(1, '冰箱', 1001);";
	if(sqlite3_exec(db, sql, NULL, NULL, errmsg) != SQLITE_OK)
	{
		printf("%s\n", *errmsg); 
	}
	
	// 4.修改记录
	sql = "update project set device='电饭煲' where id=1;";
	if(sqlite3_exec(db, sql, NULL, NULL, errmsg) != SQLITE_OK)
	{
		printf("%s\n", *errmsg); 
	}

	// 5.查询记录
	sql = "select * from project;";
	char** sqlRes;
	int nRows;
	int nColumns;
	int i, j;
	if(sqlite3_get_table(db, sql, &sqlRes, &nRows, &nColumns, errmsg)==SQLITE_OK)
	{
		for(i = 0; i <= nRows; i++)
		{
			for(j = 0; j < nColumns; j++)
			{
				printf("%-11s", sqlRes[i*nColumns + j]);
			}
			printf("\n");
		}
	}

	// 6.删除一条记录
	sql = "delete from project where id=1;";
	if(sqlite3_exec(db, sql, NULL, NULL, errmsg) != SQLITE_OK)
	{
		printf("%s\n", *errmsg); 
	}

	// 关闭数据库文件
	sqlite3_close(db);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值