Ubuntu18.04安装Qt5.0并在本地链接达梦数据库指南

一、下载Vmware、Ubuntu18.04

        Index of /ubuntu-releases/18.04/ 

e7a8ee95d938401eb8aae7fd06832c3e.png二、下载qt5  具体安装步骤:

这里不多讲,可参考这一篇 QT5 安装(Ubuntu20.04) 详细_ubuntu安装qt5-CSDN博客

三、下载达梦数据库并安装

重点:ODBC驱动在QT5中调用并连接达梦数据库

① 首先安装一下UnixODBC驱动:(命令行模式)

sudo apt install unixodbc 安装ODBC驱动程序包
sudo apt install unixodbc-dev 安装ODBC驱动程序的头文件
odbcinst -j  通过命令查看相关的配置文件

        这里如果提示无法找到对应包,建议更改一下镜像源清华镜像源,然后sudo apt update。接着重新执行上面命令

② 下载达梦数据库 (适配Ubuntu)    产品下载-达梦数据 (dameng.com)

建议直接在Ubuntu火狐浏览器进行下载,然后拖到本地的路径;

d633f01bab664093bec03e8b7249f26c.png

这里注意,达梦数据库的安装务必新创建一个用户

groupadd UsetTest 添加用户组标识
useradd -g UsetTest -m -d /home/dmdba(用户名) -s /bin/bash dmdba(用户名)

进入/etc/security/limits.conf对上面新建的用户进行资源设置

dmdba hard nofile 65536
dmdba soft nofile 65536
dmdba hard stack 32768 
dmdba soft stack 16384

试着切换一下用户 看生效没有,然后切换到root

su dmdba 切到dmaba用户
sudo su 切换到root

接下来我们设置一下系统调用时候,对应的一些参数配置以保证数据库的连接传输正确,进入 /etc/sysctl.conf。

fs.file-max = 6815744   #系统所有进程可以打开的文件句柄的最大数量
fs.aio-max-nr = 1048576   #同时可以拥有的的异步IO请求数目
kernel.shmmni = 4096   #系统范围内共享内存段的最大数量
kernel.sem = 250 32000 100 128  #表示设置的信号量
net.ipv4.ip_local_port_range = 9000 65500    #用户进程通信时分配给用户的端口区间
net.core.rmem_default = 4194304  #默认接收缓冲区大小
net.core.rmem_max = 4194304  #接收缓冲区最大值
net.core.wmem_default = 262144  #默认的发送缓冲区大小
net.core.wmem_max = 1048576   #发送缓冲区最大值
vm.swappiness = 0     #表示最大限度使用物理内存,然后才是 swap空间
vm.dirty_background_ratio = 3  #内存可以填充脏数据的百分比。这些脏数据稍后会写入磁盘
vm.dirty_ratio = 80    #可以用脏数据填充的绝对最大系统内存量,当系统到达此点时,必须将所有脏数据提交到磁盘,同时所有新的I/O块都会被阻塞,直到脏数据被写入磁盘
vm.dirty_expire_centisecs = 500    #指定脏数据能存活的时间ms
vm.dirty_writeback_centisecs = 100    #指定多长时间 pdflush/flush/kdmflush 这些进程会唤醒一次,然后检查是否有缓存需要清理。

保存后,执行一下命令生效

sysctl -p

然后去你存放达梦镜像(iso)的安装包路径下,安装达梦数据库

./DMInstall.bin -i

我直接安装到这里了

aa556d8bab6a4447a73e939502e9bfd7.png

正常情况下选择【简体中文】【不输入key路径】【设置时区】【典型安装】【确认安装】

然后去达梦的安装目录,找/dm8/script/root/root_installer.sh 【这个script和bin是一级别目录】。

随后运行这个脚本,目的是为了启动达梦数据库服务

成功截图:

97b18e3a41574051b547d44c3f957188.png

接下来在最外层(与home一层的)目录创建一个文件夹,目的是为了存放你的原始数据。

mkdir /DM8/AllData

接下来就是实例化一个达梦数据库。里面包含了你的源数据存放路径、数据库名、实例化名字等等

实例化的数据库可以有多个,目的是实现隔离不同种类的数据信息。

./dminit path=/DM8/AllData 
SYSDBA_PWD= ThisIsDBPassWord
PAGE_SIZE=32 
LOG_SIZE=2048 
CASE_SENSITIVE=N 
CHARSET=1 
PORT_NUM=5236 
EXTENT_SIZE=16 
BLANK_PAD_MODE=0

DB_NAME= TestDataBaseName
INSTANCE_NAME= TestInstance  【这个参数一般与DB_Name共同构成一个实例化数据库对象】
(上面的DB_NAME和INSTANCE_NAME两个参数后续要和odbc.ini文件做关联,所以记得区分,别把自己绕晕了)


实例化完成后,先启动一下这个实例化数据库,然后用SQL>命令行试一下看有没有用

(没有防火墙直接跳过第一步)

systemctl stop firewalld 关闭该死的防火墙

然后去你的达梦数据库的这一级安装目录下
cd /dm8/script/root/

解下来用自带的脚本执行达梦数据库服务启动操作。开启指定数据库的服务器模式,需要打开指定数据库的数据存放路径的ini文件
./dm_service_installer.sh -t dmserver -p TestDataBaseName(数据库名) -dm_ini /DM8/AllData/TestDataBaseName/dm.ini -m open

启动指定数据库的系统调用
systemctl start TestInstanceTestDataBaseName(数据库实例化符号+数据库名字符号)

查看是否成功
ps -ef |grep TestInstanceTestDataBaseName(没报错就是成功的)

在当前路径连接你的数据库,进入SQL>命令行
./disql SYSDBA(用户名,默认SYSDBA)/密码@填ip(默认localhost):这里填端口号(默认5236)
./disql SYSDBA/123@localhost:5236 

试一下创个表并插入数据,搜寻一下
CREATE TABLE First_Test (id INT PRIMARY KEY, name VARCHAR(255), high INT);
INSERT INTO First_Test (id, name, high) VALUES (1, 'John Doe', 180), (2, '嘿嘿嘿', 180), (3, '哈哈哈哈', 159);
SELECT* FROM First_Test;

如果你不操作qt连接到数据库,那就不用看了,直接执行关闭命令
关闭SQL服务(root状态下使用):
systemctl stop TestInstanceTestDataBaseName

③ qt通过QODBC连接本地数据库

先在系统上安装QT的odbc驱动(这里记得分清,一个是unixODBC【安装到整体操作系统的】,一个是qt的QODBC【QT内部封装自带的】一个是达梦的ODBC【对应达梦的libdodbc.so】)

执行此命令实现安装qt相关的ODBC

apt-get install libqt5*

接下来设置一下unixODBC的相关操作,从而确保QT能正确识别到标识符

先来设置 /etc/odbcinst.ini  指定一下达梦数据库的libdodbc.so(在你达梦数据库的安装目录)

[DM驱动相关标识符]
description=driver for dm8
driver=/dm8/bin/libdodbc.so

再来配置 /etc/odbc.ini 文件 

[TargetOne]
DRIVER = DM驱动相关标识符
SERVER = localhost
UID = SYSDBA
PWD = cssc123456
TCP_PORT = 5236
Database = TestDataBaseName
Instance = TestInstance

[TargetTwo]
DRIVER = DM驱动相关标识符
SERVER = localhost
UID = SYSDBA
PWD = cssc123456
TCP_PORT = 5236
Database = 这是个举例子的情况,上面我只初始化了一个数据库,这里只演示TestInstanceTestDataBaseName
Instance = 忽略

接下来在qt的项目系统环境里面,把达梦数据库的bin目录给他添加上去,目的是为了让qt的ODBC可以找到达梦数据库的ODBC

ddf50ae7c96d4b4d8601cfed51d5a5d1.png

接下来写一个简单的搜寻命令,上面不是已经创建了一个表么,直接复用,看一下能不能打印出来东西

4f0f0362a0014168b56078b198410246.png

结果:

f9f2b45192484e7fad17a12b46bebb9d.png

一切OK的话,把这个代码粘贴到qt上就能用了。按照我写的博客,这里的标识符应该是TargetOne;密码你们自己设置的

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QtSql/qsqldatabase.h"
#include <QtSql/QSqlError>
#include <QtSql/QSqlQuery>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QSqlDatabase newDataBase = QSqlDatabase::addDatabase("QODBC");
    newDataBase.setHostName("localhost");
    newDataBase.setPort(5236);
    newDataBase.setDatabaseName(""); // 填自己的标识符
    newDataBase.setUserName("SYSDBA");
    newDataBase.setPassword(""); // 自己的密码
    if (newDataBase.isValid() && newDataBase.open()) {
        qDebug() <<"The DataBase is Ok";
        QSqlQuery query(newDataBase);
        query.prepare("SELECT* FROM First_Test;");
        if (query.exec()) {
            while (query.next()) {
                qDebug() <<"id" <<query.value("id")<<" name" <<query.value("name")<< "high" << query.value("high");
            }
        }
        newDataBase.close();
    } else {
        qDebug() << "Unvaild DataBase "<< newDataBase.lastError();
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值