Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【SQLite】C++链接SQLite数据库

【SQLite】C++链接SQLite数据库

作者头像
半生瓜的blog
发布于 2023-05-13 06:09:14
发布于 2023-05-13 06:09:14
93200
代码可运行
举报
文章被收录于专栏:半生瓜のblog半生瓜のblog
运行总次数:0
代码可运行

C++链接SQLite数据库

相关参考:

为了更便于使用,我将它封装成了一个类。

common.h

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifndef COMMON_H__
#define COMMON_H__


#include <iostream>
#include <unistd.h>
#include <sqlite3.h>
#include <stdint.h>
#include <stdio.h>
#include <string>
#include <vector>
#include <algorithm>
#include <stdlib.h>
#include <crow.h>
#include <ctime>
#include <cstdio>

namespace flight_query {
	
	const int32_t OPEN_DB_FAILED = -8001;	//数据库打开失败
	const int32_t SQL_WORDS_ERROR = -8002;	//SQL语句不合法
	const int32_t SQL_EXEC_FAILED = -8003;	//SQL语句执行错误
	const int32_t FLIGHT_SUCCESS = 1;		//结果正确都返回这个

}
#endif	//COMMON_H__

my_sqlite.h

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifndef MY_SQLITE__
#define MY_SQLITE__

#include "../common/common.h"

namespace flight_query {
	class my_sqlite {
	
	public:
		my_sqlite(std::string path);
		~my_sqlite();
		
	public:
		int open_db();						//打开数据库
		int exec_query(std::string sql);	//执行查询语句
		void clean_buffer();				//清理结果数组
		std::vector<std::vector<std::string> > get_result();	//获取结果集
        
	private:
		sqlite3* m_db;
		std::string m_db_path;
		sqlite3_stmt* m_stmt;
		std::vector<std::vector<std::string> > m_data_array;
		std::vector<std::string> m_tmp;//存储到m_data_array中的中间变量
	};
}


#endif //MY_SQLITE__

注意: 在读取查询数据的时候,注意查询出来的条数,与查询出来字段的数量,这决定的你的数据是如何存储的。 例1:我进行查询语句,返回三条结果,那么m_data_array.size() == 3 例2:我进行查询语句,返回1条数据,我要求返回3个字段,m_data_array.at(0).size() == 3 注意以上两个例子的区别,注意数据别拿错了! 以及: 每次执行一次语句后,调用clean_buffer清空收到的结果

my_sqlite.cpp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "my_sqlite.h"

flight_query::my_sqlite::my_sqlite(std::string path):m_db_path(path) {
	
}

flight_query::my_sqlite::~my_sqlite() {
	if (m_db) {
		sqlite3_close(m_db);
		m_db = NULL;
	}
}

int flight_query::my_sqlite::open_db() {
	if (!sqlite3_open(m_db_path.c_str(),&m_db)) {
		return FLIGHT_SUCCESS;
	} else {
		return OPEN_DB_FAILED;
	}
}

int flight_query::my_sqlite::exec_query(std::string sql) {
	//语句检查——合法
	if (sqlite3_prepare_v2(m_db,sql.c_str(),sql.length(),&m_stmt,NULL) == SQLITE_OK) {

		int result = 0;
		int counts = 0;
		int count_col = sqlite3_column_count(m_stmt);//获取列数
		
		//如果返回SQLITE_ROW则,进行多次执行
		for (result = sqlite3_step(m_stmt); result == SQLITE_ROW; 
			result = sqlite3_step(m_stmt)) {
			//获取数据
			
			std::string tmm;
			//将每条数据插入vector
			for (int i = 0; i < count_col; i++) {
				
				m_tmp.push_back((char*)sqlite3_column_text(m_stmt, i));
				
			}
			m_data_array.push_back(m_tmp);
			m_tmp.clear();
			counts++;
		}

		if (result == SQLITE_DONE) {
			sqlite3_finalize(m_stmt);//清理语句句柄,准备下一个语句
			return FLIGHT_SUCCESS;
		}else{
			sqlite3_finalize(m_stmt);//清理语句句柄,准备下一个语句
			return SQL_EXEC_FAILED;
		}
	} else {//不合法
			//sqlite3_errcode(m_db),
			//sqlite3_errmsg(m_db);

		sqlite3_finalize(m_stmt);//清理语句句柄,准备下一个语句
		return SQL_WORDS_ERROR;

	}

}

void flight_query::my_sqlite::clean_buffer(){
	m_data_array.clear();
	m_tmp.clear();
}

std::vector<std::vector<std::string> > flight_query::my_sqlite::get_result() {
	
	return m_data_array;
}

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "common.h"
#include "my_sqlite.h"

int main(void) {
	flight_query::my_sqlite db(std::string("../all_data.db"));
	int ret = 0;
	ret = db.open_db();
	if (ret == flight_query::FLIGHT_SUCCESS) {
		std::cout << "open success" << std::endl;
	} else {
		std::cout << "open failed" << std::endl;
		return -1;
	}

	ret = db.exec_query(std::string("select flightNo,departure,arrival from flight_data where carrier = 'CA';"));

	if (ret == flight_query::FLIGHT_SUCCESS) {
		std::cout << "query success" << std::endl;
	} else {
		std::cout << "query failed" << std::endl;
		return -2;
	}
	std::vector<std::vector<std::string> > result = db.get_result();
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【SQLite】C++链接SQLite读数据乱码问题(非中文)
前言: 使用C++调用SQLite数据库进行数据读取,调用sqlite3_prepare_v2进行语句合法检查后,使用sqlite3_column_count获取列数,然后调用sqlite3_step进行多次读取,使用sqlite3_column_text获取具体数据。 具体问题: sqlite3_column_text的返回值为 const unsigned char*,于是我用const unsigned char*存,具体代码如下: //如果返回SQLITE_ROW则,进行多次执行 for
半生瓜的blog
2023/05/13
6790
Sqlite 接口封装(c++)
Freedom123
2024/03/29
2760
SQLite3 Cpp基本使用
文章目录 SQLite3 C++ #0 GitHub #1 环境 #2 安装sqlite3 #3 使用 #3.1 基本SQL语句 #3.2 sqlite3 API #3.3 Code SQLite3 C++ 0 GitHub example代码 SQLite3 C++ Demo Github 1 环境 macOS C++14 2 安装sqlite3 git clone https://github.com/sqlite/sqlite.git cd sqlite && mkdir bld && cd bld
Autooooooo
2021/12/07
1.3K0
SQLite3 Cpp基本使用
Sqlite 读写blob数据(c++)
参考:https://www.cnblogs.com/wengzilin/archive/2012/03/28/2420796.html
Freedom123
2024/03/29
2990
swift简易操作sqlite3
sqlite轻便小巧,底层采用C操作,跨平台在Linux和Android以及iOS甚至是嵌入式都通用,今天我们简易进行一些swift操作sqlite……
大话swift
2019/07/04
1.3K0
swift简易操作sqlite3
LeetCode #180:Swift 实现连续数字查询,秒懂高效解法!
本文将解决如何从日志数据中找出连续出现至少三次的数字。通过 SQL 查询语句结合 Swift 数据库操作,我们将完成这一任务。文章提供问题描述、Swift 题解答案、代码分析、测试案例和复杂度分析,并附带完整的可运行代码模块。
Swift社区
2025/03/28
1160
LeetCode #180:Swift 实现连续数字查询,秒懂高效解法!
iOS开发之SQLite--C语言接口规范(四) —— Result Values From A Query
  数据库的在上一篇博客中《SQLite之C语言接口规范(三)——Binding Values To Prepared Statements》用到了如何从查询结果中取出结果值。今天的博客就详细的介绍一下sqlite3_column_*()的方法。在SQLite数据库C语言接口中,从查询结果中取出不同类型的值需要不同的接口函数。   一. sqlite3_column_*()介绍     1.下图是sqlite3_column_*()所包含的方法,由下图容易的看出取出不同类型的值需要不同的接口函数。可以取出的
lizelu
2018/01/11
9460
iOS开发之SQLite--C语言接口规范(四) —— Result Values From A Query
如何优化 SQLite 每秒的插入操作
SQLite 的优化比较棘手,就批量插入而言,其速度可以从每秒 85 条优化到每秒 96,000 条。下面我们来具体看下实验过程和结果,
ClearSeve
2022/02/10
3.4K0
Sqlite数据库使用简介以Windows下简单的引入数据库到C++项目为例
SQLite 是一个开源的嵌入式关系型数据库管理系统。它不是作为一个独立进程运行的服务,而是作为一个库直接链接到应用程序中。这意味着使用 SQLite 的应用程序可以随身携带其数据库,并且可以在不需要单独服务器管理的情况下操作数据。
晨星成焰
2024/08/02
5461
Sqlite数据库使用简介以Windows下简单的引入数据库到C++项目为例
SQLite3使用笔记(2)——插入
如同上一篇文章SQLite3使用笔记(1)——查询所述,使用SQLite进行查询操作同样有两种方式。对于比较简单的表格插入,使用sqlite3_exec()接口就可以了:
charlee44
2022/05/23
6660
C++ 通过SQLite实现命令行工具
本文介绍了一个基于 C++、SQLite 和 Boost 库的简单交互式数据库操作 Shell。该 Shell 允许用户通过命令行输入执行各种数据库操作,包括添加、删除主机信息,设置主机到特定主机组,以及显示主机和主机组列表。通过调用 SQLite3 库实现数据库连接和操作,以及使用 Boost 库进行字符串解析和格式化。该交互式 Shell 提供了一些基本的命令,使用户能够方便地管理主机信息和组织结构。代码结构清晰,易于理解,可根据需要扩展和定制功能。
王瑞MVP
2023/11/26
1830
C++ 通过SQLite实现命令行工具
swift 简易操作sqlite3 之 通用查询
上篇文章我们写了关于SQLite的简单操作和一些基本常识,对此陌生的童鞋可以参考之前的文章(swift简易操作sqlite3),今天我们在此基础上进一步加工处理,写出通用查询操作方法
大话swift
2019/07/03
1.5K0
swift 简易操作sqlite3 之 通用查询
C/C++ 通过SQLiteSDK增删改查
SQLite,作为一款嵌入式关系型数据库管理系统,一直以其轻量级、零配置以及跨平台等特性而备受青睐。不同于传统的数据库系统,SQLite是一个库,直接与应用程序一同编译和链接,无需单独的数据库服务器进程,实现了数据库的零配置管理。这种设计理念使得SQLite成为许多嵌入式系统、移动应用和小型项目中的首选数据库引擎。
王瑞MVP
2023/11/26
4410
C/C++ 通过SQLiteSDK增删改查
Swift实现从数据库查询第二高的薪水
本篇文章将讨论如何在数据库中找到第二高的工资(如果存在),并用 Swift 实现这一功能。我们将从问题描述、代码实现到复杂度分析详细展开,并提供可运行的 Demo 代码模块,帮助开发者掌握这一常见的 SQL 问题解决思路。
Swift社区
2025/03/17
1290
Swift实现从数据库查询第二高的薪水
iOS使用sqlite可以实现简单的收藏夹功能
在这个类里首先导入一个头文件和你建好的model类 (实现收藏本质是存model类)
用户7108768
2021/09/22
2830
sqlite3的C语言使用(三)
估计这是sqlite系列最后一篇,sqlite的基本功能这一篇写完了就应该差不多了,不过还有更多高级功能大家可以自己去发现。上一篇
phith0n
2020/10/15
1.6K0
Swift高效实现分数排名查询,提升性能的最佳方案!
本篇文章将讲解如何在数据库中为比赛分数表设计排名系统。通过 SQL 查询语句和 Swift 数据库接口的结合,我们能够根据特定规则为分数生成排名。文章包括问题描述、题解答案、代码分析、测试案例及结果分析,并附带复杂度分析。
Swift社区
2025/03/21
1230
Swift高效实现分数排名查询,提升性能的最佳方案!
sqlite3的C语言使用(一)
前一天我讲了如何在VC中连接sqlite的库,从今天开始就分几个专题详细学习一下sqlite的一些API。当然我也是才接触sqlite3,这些题也都是我的作业题,如果有什么错误大家可以联系我,共同进步。
phith0n
2020/10/15
3.2K0
Sqlite3详细解读
"代码下载:SQLite3_2013_0402详细版.zip" http://vdisk.weibo.com/s/Gb9Qi
py3study
2020/01/07
3.8K0
Qt数据库与QTableWidget结合的增删改查
点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,可以点个在看,让它可以帮助到更多老铁~
用户5908113
2020/02/17
5.4K0
Qt数据库与QTableWidget结合的增删改查
相关推荐
【SQLite】C++链接SQLite读数据乱码问题(非中文)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档