QT学习笔记-QT访问各种关系数据库笔记汇总

QT学习笔记-QT访问各种关系数据库笔记汇总

  • 1、QT访问Oracle数据库
  • 2、QT访问SQLServer数据库
  • 3、QT访问MySQL数据库
  • 4、QT访问PostgreSQL数据库
  • 5、QT访问Access数据库
  • 6、QT多线程中访问数据库的要点

在使用QT进行应用开发过程中,不可避免的会涉及到访问关系数据库,为了方便后期查阅笔记,在本文进行一下汇总。

1、QT访问Oracle数据库

1.1、关于QT访问Oracle数据库的驱动编译请参阅
1.1.1 《QT学习笔记-QT安装oracle oci驱动》
1.1.2 《QT学习笔记-oracle oci数据库驱动交叉编译并移植到ARM开发板》
1.2、关键步骤:
1.2.1 配置oracleclient的环境变量LD_LIBRARY_PATH,或者直接在代码中通过QLibrary加载依赖库
1.2.2 参考代码

void Widget::on_btnDbTest_clicked()
{
#ifdef Q_OS_WINQLibrary *oci_lib = new QLibrary("D:/oracleinstantclient_19_19/oci.dll");oci_lib->load();if (!oci_lib->isLoaded()){qDebug() << "oracle oci动态库加载失败!";return;}
#elseQLibrary *oci_lib = new QLibrary("/usr/lib/oracleclient/instantclient_19_19/libclntsh.so");bool loadresult = oci_lib->load();qDebug() << "oracle oci动态库load result is " << loadresult;if (!loadresult){qDebug() << oci_lib->errorString();}if (!oci_lib->isLoaded()){qDebug() << "oracle oci动态库libclntsh.so加载失败!";return;}
#endif//以下代码测试访问Oracle数据QSqlDatabase  db = QSqlDatabase::addDatabase("QOCI");db.setHostName("xxx.xxx.xxx.xxx");		//数据库服务器的ipdb.setPort(1521);						//数据库服务器的端口号db.setDatabaseName("orcl");    			//此处写你数据库的实例名称db.setUserName("oracle");				//写数据库的用户名db.setPassword("oracle@123");			//写数据库的密码if (!db.open()){qDebug() << "数据库连接失败!";QSqlError lastError = db.lastError();qCritical() << lastError.nativeErrorCode() << ", " << lastError.text();}else{qDebug() << "数据库连接成功!";QSqlQuery query(db);if (query.exec("select * from sys_user")){qDebug() << "查询表格sys_user成功!";while(query.next()){qDebug() << query.value(0).toInt() << ", " << query.value(1).toString() << ", " << query.value(2).toString() << "," << query.value(3).toString();}}}
}

2、QT访问SQLServer数据库

2.1、关于QT访问SQL Server数据库的驱动编译请参阅
2.1.1 《QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库》
2.2 参考代码

void Widget::on_btnDbTest_clicked()
{//以下代码测试访问SQLServer数据QSqlDatabase  db = QSqlDatabase::addDatabase("QODBC");db.setDatabaseName("mydsn");    	//此处写你配置的ODBC数据源的名称db.setUserName("sa");				//写数据库的用户名db.setPassword("sa@123");			//写数据库的密码if (!db.open()){qDebug() << "数据库连接失败!";QSqlError lastError = db.lastError();qCritical() << lastError.nativeErrorCode() << ", " << lastError.text();}else{qDebug() << "数据库连接成功!";QSqlQuery query(db);if (query.exec("select * from sys_user")){qDebug() << "查询表格sys_user成功!";while(query.next()){qDebug() << query.value(0).toInt() << ", " << query.value(1).toString() << ", " << query.value(2).toString() << "," << query.value(3).toString();}}}
}

3、QT访问MySQL数据库

3.1 关于QT访问MySQL数据库的驱动编译请参阅
3.1.1 《QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动》
3.2 参考代码

void Widget::on_btnDbTest_clicked()
{//以下代码测试访问MySQL数据QSqlDatabase  db = QSqlDatabase::addDatabase("QMYSQL");db.setHostName("xxx.xxx.xxx.xxx");		//数据库服务器的ipdb.setPort(3306);						//数据库服务器的端口号db.setDatabaseName("mydbname");    //此处写你数据库的名称db.setUserName("root");			//写mysql数据库的用户名db.setPassword("root@123");			//写mysql数据库的密码if (!db.open()){qDebug() << "数据库连接失败!";QSqlError lastError = db.lastError();qCritical() << lastError.nativeErrorCode() << ", " << lastError.text();}else{qDebug() << "数据库连接成功!";QSqlQuery query(db);if (query.exec("select * from sys_user")){qDebug() << "查询表格sys_user成功!";while(query.next()){qDebug() << query.value(0).toInt() << ", " << query.value(1).toString() << ", " << query.value(2).toString() << "," << query.value(3).toString();}}}
}

4、QT访问PostgreSQL数据库

4.1 关于QT访问PostgreSQL数据库的驱动编译请参阅
4.1.1《QT学习笔记-QT安装postgresql驱动》
4.1.2 《QT学习笔记-postgresq数据库l驱动移植到RK3568ARM开发板》
4.2 参考代码

void Widget::on_btnDbTest_clicked()
{//以下代码测试访问PostgreSQL数据QSqlDatabase  db = QSqlDatabase::addDatabase("QPSQL");db.setHostName("xxx.xxx.xxx.xxx");		//数据库服务器的ipdb.setPort(5432);						//数据库服务器的端口号db.setDatabaseName("mydbname");    		//此处写你数据库的名称db.setUserName("postgres");				//写数据库的用户名db.setPassword("postgres");				//写数据库的密码if (!db.open()){qDebug() << "数据库连接失败!";QSqlError lastError = db.lastError();qCritical() << lastError.nativeErrorCode() << ", " << lastError.text();}else{qDebug() << "数据库连接成功!";QSqlQuery query(db);if (query.exec("select * from sys_user")){qDebug() << "查询表格sys_user成功!";while(query.next()){qDebug() << query.value(0).toInt() << ", " << query.value(1).toString() << ", " << query.value(2).toString() << "," << query.value(3).toString();}}}
}

5、QT访问Access数据库

5.1 参考代码

void Widget::on_btnDbTest_clicked()
{//以下代码测试访问Access数据QSqlDatabase  db = QSqlDatabase::addDatabase("QODBC");db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb");    	//此处写你配置的ODBC数据源的名称或这连接字符串db.setPassword("sa@123");			//写数据库的密码if (!db.open()){qDebug() << "数据库连接失败!";QSqlError lastError = db.lastError();qCritical() << lastError.nativeErrorCode() << ", " << lastError.text();}else{qDebug() << "数据库连接成功!";QSqlQuery query(db);if (query.exec("select * from sys_user")){qDebug() << "查询表格sys_user成功!";while(query.next()){qDebug() << query.value(0).toInt() << ", " << query.value(1).toString() << ", " << query.value(2).toString() << "," << query.value(3).toString();}}}
}

6、QT多线程中访问数据库的要点

在不同线程中访问数据库时,关键时在创建QSqlDatabase对象时采用不用的连接名称,如下:

QSqlDatabase db1 = QSqlDatabase::addDatabase("QODBC", "MainThread");		
QSqlDatabase db2 = QSqlDatabase::addDatabase("QODBC", "SubThread");
//db1和db2在采用不用的连接名称MainThread、SubThread

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/112779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

协同过滤推荐算法UserCF、ItemCF

目录 相似度计算基于用户的协同过滤&#xff08;UserCF&#xff09;算法评估基于物品的协同过滤&#xff08;ItemCF&#xff09;协同过滤算法的权重改进协同过滤算法的问题分析思考学习参考 相似度计算 杰卡德&#xff08;Jaccard&#xff09;相似系数 Jaccard 系数是衡量两个…

js库——Day.js、Big.js

Day.js 方便操作对时间解析 验证 对时间进行计算等操作。 官方文档&#xff1a;https://dayjs.fenxianglu.cn npm i -S dayjs 1. 给定时间戳或者时间格式&#xff0c;获取格式化后的日期 dayjs(new Date()).format(YYYY-MM-DD HH:mm:ss) 2. 获取固定开始和固定结束的时间da…

在win10上安装配置Hadoop的环境变量

一、背景 在windows10系统中运行seatunnel 二、安装部署 2.1. 下载 Hadoop包 从 Apache Hadoop 官网下载最新版本的 Hadoop&#xff0c;版本号保持与服务端的Hadoop版本一致。 https://hadoop.apache.org/releases.htmlIndex of /apache/hadoop/core/hadoop-3.2.3/ 2.2. 解…

Qt文件对话框的使用

本文介绍Qt文件对话框的使用。 Qt编程中通常会遇到对文件的操作&#xff0c;比如打开&#xff0c;保存等&#xff0c;这些操作通常是通过文件对话框来进行操作的&#xff0c;文件对话框通常具有固定的样式&#xff0c;通过它可以获取到文件名&#xff0c;进而通过文件名打开文…

IntelliJ IDEA 2020.2.1白票安装使用方法

先安装好idear Plugins 内手动添加第三方插件仓库地址&#xff1a;https://plugins.zhile.io 搜索&#xff1a;IDE Eval Reset插件进行安装 输入https://plugins.zhile.io 手动安装离线插件方法 安装包可以去笔者的CSDN资源库下载 安装mybaties插件

【leetcode报错】 leetcode格式问题解决:error: stray ‘\302’ in program [solution.c]

leetcode格式问题解决 一、情景再现二、报错原因三、解决方法四、修正结果 一、情景再现 二、报错原因 该错误是指 源程序中有非法字符&#xff0c;需要将非法字符去掉。 一般是由于coder 1.使用中文输入法 或者 2.从别的地方直接复制粘贴代码 造成的。 代码中出现了 中文空格&…

How to add a jar to a project in eclipse?

Project -> Properties -> Java Build Path -> Libraries -> Add External JARs

AI绘画使用Stable Diffusion(SDXL)绘制玉雕风格的龙

一、引言 灵感来源于在逛 LibLib 时&#xff0c;看到的 Lib 原创者「熊叁gaikan」发布的「翠玉白菜 sdxl&#xff5c;玉雕风格」 的 Lora 模型。简直太好看了&#xff0c;一下子就被吸引了&#xff01; 科普下「翠玉白菜」&#xff1a; 翠玉白菜是由翠玉所琢碾出白菜形状的清…

R语言:主成分分析PCA

文章目录 主成分分析处理步骤数据集code 主成分分析 主成分分析&#xff08;或称主分量分析&#xff0c;principal component analysis&#xff09;由皮尔逊&#xff08;Pearson,1901&#xff09;首先引入&#xff0c;后来被霍特林&#xff08;Hotelling,1933&#xff09;发展…

HTML 常用标签及练习

常用标签 <head>中的标签 概述 head中的内容不显示到页面上 标签说明<title>定义网页的标题<meta>定义网页的基本信息&#xff08;供搜索引擎&#xff09;<style>定义CSS样式<link>链接外部CSS文件或脚本文件<script>定义脚本语言<…

麒麟V10SP01部署docker报错:http:invalid Host header

问题描述 在麒麟v10sp01系统中使用yumdownloader下载的docker版本是docker-engine-18.09.0-101.p06.ky10.x86_64&#xff0c;部署docker后运行容器&#xff0c;进入容器查看时报错http:invalid Host header。在网上查了半天也没有找到解决方法。 后来请教公司高人后&#xff0c…

带返回值的递归转为非递归

带返回值的递归转为非递归与不带返回值的递归转为非递归相似。不同的地方是有个如何保存和使用返回值的问题。 以组合数计算为例。计算公式是&#xff0c;C(n, k) C(n-1, k) C(n-1, k-1)。写成递归的代码是&#xff0c; func cbn(n, k) {if(nk||k0) return 1;else if(k1) r…

房地产行业程序员管理痛点分析

很久前跟某地产公司程序员聊天&#xff0c;谈到程序员管理的痛点问题&#xff0c;怎么去解决这些痛点。 1.大部分骨干力量集中休年假。理由有&#xff1a;回家照顾老人。请病假&#xff1a;职业病方面&#xff0c;比如眼睛痛&#xff0c;头痛&#xff0c;脖子颈椎痛&#xff0c…

Oracle性能调优实践中的几点心得

很多的时侯&#xff0c;做OracleDBA的我们&#xff0c;当应用管理员向我们通告现在应用很慢、数据库很慢的时侯&#xff0c;我们到数据库时做几个示例的Select也发现同样的问题时&#xff0c;有些时侯我们会无从下手&#xff0c;因为我们认为数据库的各种命种率都是满足Oracle文…

【Mysql】Mysql中的B+树索引(六)

概述 从上一章节我们了解到InnoDB 的数据页都是由7个部分组成&#xff0c;然后各个数据页之间可以组成一个双向链表 &#xff0c;而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表 &#xff0c;每个数据页都会为存储在它里边儿的记录生成一个页目录 &#xff…

深度解析 Bing 搜索引擎的排名因素与算法

自从和ChatGPT搞上了&#xff0c;Bing在搜索引擎界就像是新晋的网红&#xff0c;风头一时无两。 搜索引擎的排名算法是确定搜索结果排名的核心&#xff0c;每个搜索引擎都有其独特的排名规则和算法。Bing作为全球第二大搜索引擎&#xff0c;其排名因素和算法同样至关重要。在本…

【算法题】统计无向图中无法互相到达点对数

题目&#xff1a; 给你一个整数 n &#xff0c;表示一张 无向图 中有 n 个节点&#xff0c;编号为 0 到 n - 1 。同时给你一个二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示节点 ai 和 bi 之间有一条 无向 边。 请你返回 无法互相到达 的不同 点对数目 。 示…

javaEE - 1(9000字详解多线程)

一&#xff1a;认识线程 1.1 线程的概念 线程是操作系统中执行的最小单位&#xff0c;它是进程中的一个实体。一个进程可以包含多个线程&#xff0c;并且这些线程共享进程的资源&#xff0c;如内存、文件句柄等&#xff0c;但每个线程有自己的独立执行流程和栈空间。 线程在…

CEF 之 Render进程 与 Browser进程通信

目录 一、进程通信 1、两进程通信消息名 2、Browser给Render进程发消息 1)SendProcessMessage 2)CefProcessMessage

java 使用poi读取excel内浮动图片

注意&#xff1a;仅读取到xls中的浮动图片&#xff0c;嵌入图片此方法读取不到 1、引入poi依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><depen…