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

news2024/10/5 23:27:22

本示例使用的环境如下:

  • 硬件平台: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/sqlhosts

export DB_LOCALE=zh_CN.utf8
export CLIENT_LOCALE=zh_CN.utf8
export GL_USEGLU=1

export 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.coloradmin.cn/o/916719.html

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

相关文章

达到国际领先水平!“基于实景三维的土地综合整治监管与成效评估技术应用”技术成果通过专家组评价

​本文转自中国地理产业协会 评价会现场 8月16日&#xff0c;受广西自然资源产品质量检验中心委托&#xff0c;广西人工智能学会在南宁市采用线上线下结合的形式&#xff0c;组织召开了“基于实景三维的土地综合整治监管与成效评估技术应用”技术成果评价会。由中国科学院院士、…

行为型(六) - 状态模式

一、概念 状态模式&#xff08;State Pattern&#xff09;&#xff1a;类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 使用场景&#xff1a; 一个对象的行为由它的状态决定&#xff0c;而且它必须在运行时根据自身状态改变它的行为。 二、实现 这里控…

【Java 高阶】一文精通 Spring MVC - 转换器(五)

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

期权是什么?期权的优缺点是什么?

期权是一种合约&#xff0c;有看涨期权和看跌期权两种类型&#xff0c;也就是做多和做空两个方向&#xff0c;走势标的物对应大盘指数&#xff0c;这也是期权与其他金融工具的主要区别之一&#xff0c;可以用于套利&#xff0c;对冲股票和激进下跌的风险&#xff0c;下文介绍期…

HTML总结 2[转]

以下转载和参考自&#xff1a;HTML 表单。 1、表格 可以通过 CSS 设置表格的样式&#xff1a; 如下为将上面table.lamp th,td样式中的padding注释掉&#xff0c;开启table.lamp中的padding的效果&#xff1a; 2、列表 3、表单 表单用于收集用户的输入&#xff0c;如下图所…

咨询师需要具备同理心

做咨询的这么多年&#xff0c;经常会听到这样的一些槽点&#xff1a; “也不知道怎么想的&#xff0c;压根就不是正常的思考逻辑&#xff01;” “上次就是这样&#xff0c;跌到同一条沟里了吧&#xff1f;” “如此简单的事情&#xff0c;推进起来为什么这么难&#xff1f;…

IDC发布中国低代码市场报告,得帆独立低代码市占率第一

近日&#xff0c;国际数据公司IDC公布了《2022下半年中国低代码与零代码软件市场跟踪报告》&#xff08;以下简称“报告”&#xff09;。 2022下半年中国低代码与零代码软件市场规模为15.6亿元人民币&#xff0c;得帆低代码PaaS平台凭借过硬的产品优势和深厚的客户实践经验&am…

RK3399平台开发系列讲解(内核调试篇)网络调试工具

🚀返回专栏总目录 文章目录 一、dstat 工具介绍二、例如dstat 进行网络问题调试三、ss 命令查看 TCP 详细信息四、netstat 查看TCP详细信息沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍网络的相关工具。 一、dstat 工具介绍 当设备产生问题,而我们又…

情人节定制:HTML5 Canvas全屏七夕爱心表白特效

❤️ 前言 “这个世界乱糟糟的而你干干净净可以悬在我心上做太阳和月亮。”&#xff0c;七夕节表白日&#xff0c;你要错过吗&#xff1f;如果你言辞不善&#xff0c;羞于开口的话&#xff0c;可以使用 html5 canvas 制作浪漫的七夕爱心表白动画特效&#xff0c;全屏的爱心和…

使用Netplan建立Linux网络,简便的声明性方法

除了周围网络环境的复杂性之外&#xff0c;由于使用的技术堆栈和工具范围很广&#xff0c;Linux 网络可能会令人困惑。网桥、绑定、VRF 或路由的配置可以通过编程、声明、手动或自动化方式使用 ifupdown、ifupdown2、ifupdown-ng、iproute2、NetworkManager、systemd-networkd …

Python土力学与基础工程计算.PDF-土的三项组成

5.3 Python求解 Python 求解代码如下&#xff1a; 1. # 定义已知参数 2. G_s 2.7 # 比重 3. w 0.2 # 含水量 4. e 0.6 # 孔隙比 5. gamma_w 9.81 # 水的重度 6. 7. # 根据公式计算饱和度 8. S_r G_s * w / e 9. print("饱和度为", S_r) 10. 11.…

UbuntuDDE 23.04发布,体验DeepinV23的一个新选择

UbuntuDDE 23.04发布&#xff0c;体验DeepinV23的一个新选择 昨晚网上搜索了一圈&#xff0c;无意看到邮箱一条新闻&#xff0c;UbuntuDDE 23.04发布了 因为前几天刚用虚拟机安装过&#xff0c;所以麻溜的从网站下载了ISO文件&#xff0c;安装上看看。本来没多想&#xff0c;…

亚信科技AntDB数据库通过GB 18030-2022最高实现级别认证,荣膺首批通过该认证的产品之列

近日&#xff0c;亚信科技AntDB数据库通过GB 18030-2022《信息技术 中文编码字符集》最高实现级别&#xff08;级别3&#xff09;检测认证&#xff0c;成为首批通过该认证的数据库产品之一。 图1&#xff1a;AntDB通过GB 18030-2022最高实现级别认证 GB 18030《信息技术 中文编…

得帆信息合伙人——张少伟:使用低代码就像逛宜家,总会有不期而至的小惊喜等着你

随着数字化、智能化、网络化、自动化阶段不断跃升&#xff0c;新技术不断涌现&#xff0c;数字化转型成了大多数企业的发展趋势。在这个背景下&#xff0c;以下问题是被提起次数较多的&#xff1a; 企业要不要买低代码&#xff1f;低代码到底能做什么系统&#xff1f;低代码适合…

Memtester的使用(xilinx zc706)

1.1&#xff1a;测试概述 Memtester主要是针对内存压测的工具&#xff0c;官方的解释&#xff1a;testing the memory subsystem for faults。主要是捕获内存错误和一直处于很高或者很低位的坏位&#xff0c;测试随机值、异或比较、减法、乘法、除法、与或运算等。memtester 是…

情感书单背景素材分享,轻松把书单制作成视频

在互联网时代&#xff0c;我们可以通过各种方式来分享自己的想法和创意。其中&#xff0c;视频是一种非常受欢迎的方式&#xff0c;它可以将图像、声音和文字有机地结合在一起&#xff0c;形成一个丰富多彩的信息载体。如果你想分享自己的情感书单&#xff0c;那么将其制作成视…

【自用】无法通过ESP32创建HomeAssistant实体问题解决(MQTT对ESP32创建实体请求无应答)

一、问题描述 1.使用 MQTTX 测试客户端能够创建实体 当通过 MQTTX 发送注册实体请求的时候&#xff0c;实体能够在 MQTT 服务器中注册成功。 2.使用 ESP32 无法创建实体 在ESP32中通过 publish() 函数发送注册请求的时候&#xff0c;并不会报任何错误&#xff0c;但 MQTT 服…

谷粒商城环境搭建二:开发环境统一

开发环境配置统一 Maven配置 查看maven信息 修改配置文件&#xff1a;apache-maven-3.3.9\conf\settings.xml# 配置阿里云镜像 <mirrors><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name&…

行为型(十) - 解释器模式

一、概念 解释器模式&#xff08;Interpreter Pattern&#xff09;&#xff1a;解释器模式为某个语言定义它的语法&#xff08;或者叫文法&#xff09;表示&#xff0c;并定义一个解释器用来处理这个语法。实际应用中较少用到的行为模式。 二、实现 举个常见的面试题&#x…

基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v7.0版已发布

关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架&#xff0c;超轻量级、高度提炼&#xff0c;一套API优雅支持 UDP 、TCP 、WebSocket 三种协议&#xff0c;支持 iOS、Android、H5、标准Java、小程序、Uniapp&#xff0c;服务端基于Netty编写。 工程…