QT5.12.12通过ODBC连接到GBase 8s数据库(CentOS)

本示例使用的环境如下:

  • 硬件平台:x86_64(amd64)
  • 操作系统:CentOS 7.8 2003
  • 数据库版本(含CSDK):GBase 8s V8.8 3.0.0_1
    为什么使用QT 5.12.10?
  • 该版本包含QODBC。

1,GBase 8s数据库的ODBC安装与配置

1.1,确认操作系统已经安装unixODBC及unixODBC-devel

通过apt查找确认unixODBC及unixODBC-devel已经安装

[root@localhost ~]# rpm -qa unixODBC unixODBC-devel
unixODBC-devel-2.3.1-14.el7.x86_64
unixODBC-2.3.1-14.el7.x86_64

如果未安装使用apt源进行安装

[root@localhost ~]# yum -y install unixODBC unixODBC-devel

1.2,安装CSDK及配置ODBC

GBase 8s数据库的ODBC驱动程序包含在CSDK组件中。

1.2.1,安装CSDK

解压缩CSDK软件包

[root@localhost ~]# mkdir csdk
[root@localhost ~]# cd csdk/
[root@localhost csdk]# tar -xvf ../ clientsdk_3.0.0_1_93e040_RHLE6_x86_64.tar
csdk.properties
doc/
doc/Glsapi_machine_notes_4.10.txt
doc/Libcpp_machine_notes_4.10.txt
doc/ESQLC_machine_notes_4.10.txt
doc/Odbc_machine_notes_4.10.txt
installclientsdk
.gbase.properties

执行静默安装,自动完成安装

[root@localhost csdk]#  ./installclientsdk -i silent \-DUSER_INSTALL_DIR=/opt/gbase -DLICENSE_ACCEPTED=TRUE
序号参数名称示例参数值说明信息
1-isilent指定使用静默安装
2-DUSER_INSTALL_DIR=/opt/gbase指定安装目录
3-DLICENSE_ACCEPTED=TRUE指定接受协议

配置SQLHOSTS文件内容,在/opt/gbase/etc/sqlhosts配置文件中增加实际数据库地址

gbase01		onsoctcp	h01.gbasedbt.com	9088

1.2.2,ODBC配置

在/etc/profile配置文件里增加CSDK的配置环境

# /etc/profile
# Add for GBase 8s ODBC
export GBASEDBTDIR=/opt/gbase
export PATH=${GBASEDBTDIR}/bin:${PATH}
export LD_LIBRARY_PATH=$GBASEDBTDIR/lib:$GBASEDBTDIR/lib/cli:$GBASEDBTDIR/lib/esql:$LD_LIBRARY_PATH
export GBASEDBTSQLHOSTS=/opt/gbase/etc/sqlhostsexport DB_LOCALE=zh_CN.utf8
export CLIENT_LOCALE=zh_CN.utf8
export GL_USEGLU=1export ODBCINI=/etc/odbc.ini

配置/etc/odbcinst.ini配置文件,根据CSDK环境,配置如下:

; /etc/odbcinst.ini
; ODBC Driver for GBase 8s
[GBase ODBC DRIVER] 
Driver=/opt/gbase/lib/cli/iclit09b.so 
Setup=/opt/gbase/lib/cli/iclit09b.so 
APILevel=1 
ConnectFunctions=YYY 
DriverODBCVer=03.51 
FileUsage=0 
SQLLevel=1 
smProcessPerConnect=Y

配置ODBCINI配置文件,根据CSDK环境,配置如下:

[ODBC Data Sources]
testdb=GBase ODBC DRIVER
;
; Define ODBC Database Driver's Below - Driver Configuration Section
;
[testdb]
;Driver=/opt/gbase/lib/cli/iclit09b.so
Driver=GBase ODBC DRIVER
Description=GBase ODBC DRIVER
Database=testdb
LogonID=gbasedbt
pwd=GBase123
Servername=gbase01
CursorBehavior=0
CLIENT_LOCALE=zh_CN.utf8
DB_LOCALE=zh_CN.utf8
GL_USEGLU=1
TRANSLATIONDLL=/opt/gbase/lib/esql/igo4a304.so
; ISOLATIONLEVEL=1	# 使用该参数(简写:ISOLVL)设置默认的隔离级别,0-5
;
; UNICODE connection Section
;
[ODBC]
;uncomment the below line for UNICODE connection
UNICODE=UCS-2		# 如果需要使用unicode连接数据库,这里需要去除注释,值改为UCS-2
;
; Trace file Section
;
Trace=0
TraceFile=/tmp/odbctrace.out
InstallDir=/opt/gbase
TRACEDLL=idmrs09a.so

ODBC连接测试
确认当前用户环境变量中包括2)中配置的环境变量,3)已经完成。通过isql测试ODBC配置正确。

[root@localhost ~]# env | egrep '(GBASEDBT|ODBCINI)'
GBASEDBTSERVER=gbase01
ODBCINI=/etc/odbc.ini
GBASEDBTDIR=/opt/gbase
root@netsky:~# isql -v testdb
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select dbservername from dual;
+---------------------------------------+
|                                       |
+---------------------------------------+
| gbase01                               |
+---------------------------------------+
SQLRowCount returns -1
1 rows fetched
>
root@netsky:~# iusql -v testdb
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select dbservername from dual;
+---------------------------------------+
|                                       |
+---------------------------------------+
| gbase01                               |
+---------------------------------------+
SQLRowCount returns -1
1 rows fetched

2,QT在Linux(CentOS)的安装与配置

2.1,确认操作系统已经安装gcc和g++

通过apt查找确认gcc、g++、clang已经安装

[root@localhost ~]# rpm -qa gcc libgcc gcc-c++ clang clang-devel
clang-devel-3.4.2-8.el7.x86_64
gcc-4.8.5-44.el7.x86_64
clang-3.4.2-8.el7.x86_64
gcc-c++-4.8.5-44.el7.x86_64
libgcc-4.8.5-44.el7.x86_64

如果未安装使用apt源进行安装

[root@localhost ~]# yum -y install gcc libgcc gcc-c++ clang clang-devel

2.2,安装QT

这里使用5.12.12版本(安装包名称为qt-opensource-linux-x64-5.12.12.run),需要使用到图形化界面
配置环境变量.bash_profile

# .bash_profile
export QTPATH=/opt/Qt5.12.12
export PATH=${QTPATH}/5.12.12/gcc_64/bin:${QTPATH}/Tools/QtCreator/bin:$PATH

执行安装

[root@localhost ~]# ./qt-opensource-linux-x64-5.12.12.run
[2] Warning: Qt Account settings file [/root/.local/share/Qt/qtaccount.ini] does not exist.
[2] Warning: Could not find Qt Account.

开始安装,要求有Qt的账号,如果没有账号需要注册(如果想跳过该步,需要断网)
image001.png
接受协议
image002.png
指定安装目录
image003.png
选择安装组件,Qt 5.12.12中仅选择Desktop gcc 64-bit
image004.png
安装过程
image005.png
完成安装
image006.png
在 帮助->关于插件中,关闭ClangCodeModel,该操作需要重启才生效
image007.png

2.3,确认或编译QODBC驱动

查看Qt安装目录下的/opt/Qt5.12.12/5.12.12/gcc_64/plugins/sqldrivers

[root@localhost sqldrivers]# pwd
/opt/Qt5.12.12/5.12.12/gcc_64/plugins/sqldrivers
[root@localhost sqldrivers]# ls -al *odbc.so
-rwxr-xr-x. 1 root root 119352 11月 17 2021 libqsqlodbc.so

3,QT创建项目通过ODBC连接到GBase 8s数据库

创建新项目
创建Console Application
image008.png
名称为QtOdbcGBasedbt
image009.png
使用qmake
image010.png
image011.png

使用Desktop Qt 5.12.12 GCC 64bit
image012.png
image013.png

在QtOdbcGBasedbt.pro中增加一行QT += sql
image014.png
在main.cpp中写入代码
image015.png
main.cpp的详细代码

#include <QCoreApplication>
#include <QtSql>
#include <QSqlDatabase>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");// 使用DSN方式db.setDatabaseName("testdb");       //DSN名称// 使用DSN-Less连接方式//db.setDatabaseName("DRIVER=/opt/gbase/lib/cli/iclit09b.so;HOST=h01.gbasedbt.com;SERV=9088;PROT=onsoctcp;DLOC=zh_CN.57372;CLOC=zh_CN.57372;DB=testdb;SRVR=gbase01");db.setUserName("gbasedbt");         //用户名db.setPassword("GBase123$%");       //密码bool ok = db.open();//建立数据库连接if(!ok){qDebug()<<"Can not connect to GBase 8s Database !";return -1;}qDebug()<<"Connect to GBase 8s Database OK .";QSqlQuery query(db);query.prepare("drop table if exists tab1");bool drop = query.exec();if (!drop){qDebug()<<"drop table error !";}qDebug()<<"drop table tab1 success .";query.prepare("create table tab1 (id varchar(255), ts datetime year to second default current year to second)");bool create = query.exec();if (!create){qDebug()<<"create table tab1 error !";}qDebug()<<"create table tab1 success .";query.prepare("insert into tab1(id) values('test001')");bool insert = query.exec();if (!insert){qDebug()<<"insert table tab1 error !";}qDebug()<<"insert table tab1 success .";query.prepare("select * from tab1 where id = :id");query.bindValue(":id","test001");bool select = query.exec();if (!select){qDebug()<<"select table tab1 error !";}QSqlRecord rec = query.record();while(query.next()){rec = query.record();QString value1 = query.value(0).toString();QString value2 = query.value(1).toString();qDebug()<<"id:"<<value1<<"\t"<<"ts:"<<value2;}db.close();return ok;
}

执行debug编译
image016.png

附件:
QtOdbcGBasedbt.zip

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

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

相关文章

ES6中promise的使用

ES6中promise的使用 本文目录 ES6中promise的使用基础介绍箭头函数function函数状态 原型方法Promise.prototype.then()Promise.prototype.catch() 静态方法Promise.all()Promise.race()Promise.any() 链式回调 基础介绍 官网&#xff1a;https://promisesaplus.com/ window.…

最新docker多系统安装技术

在Ubuntu操作系统中安装Docker 在Ubuntu操作系统中安装Docker的步骤如下。 1&#xff0e;卸载旧版本Docker 卸载旧版本Docker的命令如下&#xff1a; $ sudo apt-get remove docker docker-engine docker.io 2&#xff0e;使用脚本自动安装 在测试或开发环境中&#xff0…

STM32 进不了main 函数

1. 我用的是STM32L151C8T6 的芯片&#xff0c;在github 上找了个别人的例程&#xff0c;拿来当模板改&#xff0c;由于他用的是HSE 外部晶振&#xff0c;我用的是内部晶振HSI&#xff0c;所以需要改系统时钟&#xff0c;改完后debug&#xff0c; 一直进不了main 函数&#xff0…

PHP“牵手”拼多多商品详情数据获取方法,拼多多API接口批量获取拼多多商品详情数据说明

拼多多商品详情接口 API 是开放平台提供的一种 API 接口&#xff0c;它可以帮助开发者获取拼多多商品的详细信息&#xff0c;包括商品的标题、描述、图片等信息。在拼多多电商平台的开发中&#xff0c;拼多多详情接口 API 是非常常用的 API&#xff0c;因此本文将详细介绍拼多多…

【C++】C++ 引用详解 ⑤ ( 函数 “ 引用类型返回值 “ 当左值被赋值 )

文章目录 一、函数返回值不能是 " 局部变量 " 的引用或指针1、函数返回值常用用法2、分析函数 " 普通返回值 " 做左值的情况3、分析函数 " 引用返回值 " 做左值的情况 函数返回值 能作为 左值 , 是很重要的概念 , 这是实现 " 链式编程 &quo…

淘宝API技术解析,实现关键词搜索淘宝商品(商品详情接口等)

淘宝提供了开放平台接口&#xff08;API&#xff09;来实现按图搜索淘宝商品的功能。您可以通过以下步骤来实现&#xff1a; 获取开放平台的访问权限&#xff1a;首先&#xff0c;您需要在淘宝开放平台创建一个应用&#xff0c;获取访问淘宝API的权限。具体的申请步骤和要求可以…

LabVIEW开发灭火器机器人

LabVIEW开发灭火器机器人 如今&#xff0c;自主机器人在行业中有着巨大的需求。这是因为它们根据不同情况的适应性。由于消防员很难进入高风险区域&#xff0c;自主机器人出现了。该机器人具有自行检测火灾的能力&#xff0c;并通过自己的决定穿越路径。 由于消防安全是主要问…

java八股文面试[java基础]——如何实现不可变的类

知识来源&#xff1a; 【23版面试突击】如何实现不可变的类&#xff1f;_哔哩哔哩_bilibili 【2023年面试】怎样声明一个类不会被继承&#xff0c;什么场景下会用_哔哩哔哩_bilibili

JVM 之字节码(.class)文件

本文中的内容参考B站尚硅谷宋红康JVM全套教程 你将获得&#xff1a; 1、掌握字节码文件的结构 2、掌握Java源代码如何在JVM中执行 3、掌握一些虚拟机指令 4、回答一些面试题 课程介绍 通过几个面试题初始字节码文件为什么学习class字节码文件什么是class字节码文件分析c…

2022年03月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;拦截导弹 某国为了防御敌国的导弹袭击&#xff0c; 发展出一种导弹拦截系统。 但是这种导弹拦截系统有一个缺陷&#xff1a; 虽然它的第一发炮弹能够到达任意的高度&#xff0c;但是以后每一发炮弹都不能高于前一发的高度。 某天&#xff0c; 雷达捕捉到敌国的…

Vue3.0极速入门- 目录和文件说明

目录结构 以下文件均为npm create helloworld自动生成的文件目录结构 目录截图 目录说明 目录/文件说明node_modulesnpm 加载的项目依赖模块src这里是我们要开发的目录&#xff0c;基本上要做的事情都在这个目录里assets放置一些图片&#xff0c;如logo等。componentsvue组件…

SFM structure from motion

struction就是空间三维点的位置 motion 就是相机每帧的位移 https://www.youtube.com/watch?vUhkb8Zq-dnM&listPL2zRqk16wsdoYzrWStffqBAoUY8XdvatV&index9

西部AI小镇-构建自主虚拟世界

背景 未来曜文有接入市场上所有面向chatGPT开发的应用&#xff0c;例如开源聊天组件&#xff0c;西部小镇等 内容介绍 生成代理起床&#xff0c;做早餐&#xff0c;然后去上班&#xff1b;艺术家作画&#xff0c;作家写作&#xff1b;他们形成意见、互相关注并发起对话&…

Linux线程 --- 生产者消费者模型(C语言)

在学习完线程相关的概念之后&#xff0c;本节来认识一下Linux多线程相关的一个重要模型----“ 生产者消费者模型” 本文参考&#xff1a; Linux多线程生产者与消费者_红娃子的博客-CSDN博客 Linux多线程——生产者消费者模型_linux多线程生产者与消费者_两片空白的博客-CSDN博客…

基于Java+SpringBoot+Vue前后端分离党员教育和管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

ServiceManager接收APP的跨进程Binder通信流程分析

现在一起来分析Server端接收&#xff08;来自APP端&#xff09;Binder数据的整个过程&#xff0c;还是以ServiceManager这个Server为例进行分析,这是一个至下而上的分析过程。 在分析之前先思考ServiceManager是什么&#xff1f;它其实是一个独立的进程&#xff0c;由init解析i…

银河麒麟服务器、centos7服务器一键卸载mysql脚本

脚本 # 查看mysql相关的rpm包写到rmsql.sh文件中 rpm -aq | grep -i mysql >rmsql.sh # 修改文件为卸载mysql的脚本文件 sed -i -e s/^/yum remove -y / rmsql.sh # 修改文本权限 chmod 777 rmsql.sh # 全盘查找mysql相关文件&#xff0c;写到my.sh脚本中 find / -name mysq…

git及GitHub的使用

文章目录 git在本地仓库的使用github使用创建仓库https协议连接(不推荐&#xff0c;现在用起来比较麻烦)ssh连接&#xff08;推荐&#xff09;git分支操作冲突处理忽略文件 git在本地仓库的使用 1.在目标目录下右键打开git bash here 2.创建用户名和邮箱(注&#xff1a; 下载完…

框架(Git基础详解及Git在idea中集成步骤)

目录 基础&#xff1a; idea集成Git并添加项目到git仓库 1.idea集成git&#xff0c;集成.git.exe文件 2.初始化本地Git仓库项目 3. 将工作区代码添加到暂存区 4.将暂存区代码添加到本地仓库 5.Git本地库操作 Idea集成Gitee并提交代码到第三方库 1.setting里搜索gitee 2.添…

ASEMI快恢复二极管APT80DQ60BG特点应用

编辑-Z APT80DQ60BG参数描述&#xff1a; 型号&#xff1a;APT80DQ60BG 最大峰值反向电压(VRRM)&#xff1a;600V 最大直流阻断电压VR(DC)&#xff1a;600V 平均整流正向电流(IF)&#xff1a;80A 非重复峰值浪涌电流(IFSM)&#xff1a;600A 工作接点温度和储存温度(TJ, …