一、下载Vmware、Ubuntu18.04
Index of /ubuntu-releases/18.04/
二、下载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火狐浏览器进行下载,然后拖到本地的路径;
这里注意,达梦数据库的安装务必新创建一个用户
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
我直接安装到这里了
正常情况下选择【简体中文】【不输入key路径】【设置时区】【典型安装】【确认安装】
然后去达梦的安装目录,找/dm8/script/root/root_installer.sh 【这个script和bin是一级别目录】。
随后运行这个脚本,目的是为了启动达梦数据库服务
成功截图:
接下来在最外层(与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
接下来写一个简单的搜寻命令,上面不是已经创建了一个表么,直接复用,看一下能不能打印出来东西
结果:
一切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;
}