c++ sqlite的简单使用

本文介绍了一个使用C++实现的SQLite数据库操作类KeyDB,详细展示了如何通过该类进行数据库的打开与关闭,用户数据的插入及查询操作。KeyDB类通过sqlite3库实现了对keystore.db数据库的操作,包括插入新用户数据和通过特定条件查询用户。

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

#include "keydb.h"
#include <cstdlib>
#include <cstring>

using namespace std;

KeyDB::KeyDB(){
	int rc = sqlite3_open("./keystore.db", &m_db);
	if(rc != SQLITE_OK){
		cout << "open sqlite3 fail" << endl ;
		exit(1);
	}
}
KeyDB::~KeyDB(){
	sqlite3_close(m_db);
}

	
static int queryCB(void *data,int args_num,char **argv,char **argc){
	//cout << args_num << endl ;
   memcpy(data , argv[0] , strlen(argv[0]));
   return 0;
}

int KeyDB::insert_user(string name , string A){
	string sql = "insert into user (name,A) values (\""+name+"\",\""+A+"\")";
	cout << "insert  :" << sql << endl ;
	char *errMsg ;
	int rs = sqlite3_exec(m_db , sql.data() , 0 , 0 , &errMsg) ;
	if(rs != SQLITE_OK){
		cout << "insert fail " << endl ;
		return 1 ;
	}else{
		cout << "insert ok " << endl ;
	}
	return 0;
}

string KeyDB::get_userbyA(string A) {
	string sql = "select name from user where A=\""+A+"\"";
	char buff[100];
	char *errMsg ;
	sqlite3_exec(m_db , sql.data() , queryCB , (void*)buff , &errMsg );
	string result = buff ;
	return result ;
}

 

### 使用SQLite3库在C++中的基本操作 为了展示如何在C++使用SQLite3数据库,下面提供了一个简单的例子来说明创建连接、执行SQL语句以及处理查询结果的过程。 #### 创建并打开数据库连接 当想要初始化一个新的或已有的SQLite3数据库文件时,可以调用`sqlite3_open()`函数[^3]。此方法接受两个参数:一个是表示要访问的数据库名称字符串;另一个是指向指向`sqlite3*`类型的指针变量地址,用于接收新建立好的会话对象实例。 ```cpp #include <iostream> #include <sqlite3.h> class Database { private: sqlite3 *db; int rc; public: Database(std::string dbname = "example.db") : db(nullptr), rc(0){ // 打开名为dbname的数据库 rc = sqlite3_open(dbname.c_str(), &db); if(rc != SQLITE_OK){ // 如果返回码不是成功状态,则打印错误信息并关闭数据库 std::cerr << "无法打开数据库: " << sqlite3_errmsg(db) << '\n'; sqlite3_close(db); } } ~Database(){ sqlite3_close(db); // 析构函数里释放资源 } bool isOpen() const{ return db != nullptr && rc == SQLITE_OK; } sqlite3* getDBHandle() const{ return db; } }; ``` 这段代码定义了一个封装了SQLite3功能的小型类——`Database`,它负责管理与特定数据库之间的交互过程,并提供了检查当前是否已经建立了有效链接的方法。 #### 执行SQL命令 对于更复杂的操作比如插入数据或者修改表结构等,可以通过`sqlite3_exec()`接口实现[^1]。该API允许传递任意形式的有效SQL表达式作为输入,并支持通过回调机制获取执行期间产生的每一行记录。 ```cpp void executeQuery(sqlite3* db, const char* sql){ char* errMsg = nullptr; /* 调用exec函数 */ int result = sqlite3_exec( db, sql, [](void*,int argc,char** argv,char** azColName)->int{ for(int i=0;i<argc;++i) printf("%s=%s ",azColName[i],argv[i]?argv[i]:"NULL"); putchar('\n'); return 0;}, nullptr,&errMsg); if(result!=SQLITE_OK){ fprintf(stderr,"SQL error:%s\n",errMsg); sqlite3_free(errMsg); }else{ puts("Operation done successfully."); } } ``` 这里展示了怎样利用匿名内联函数(lambda expression)简化对多列或多行的结果集解析逻辑。同时注意到了内存泄漏的风险,在遇到异常情况时及时清理分配给错误消息的空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值