一、安装达梦

1、安装最好在当前用户安装,好多都是被官方手册误导“新建用户组 dinstall,新建用户 dmdba”安装,会带来后续权限的问题。
2、使用

1、修改用户资源限制

//执行以下命令,修改 dmdba 用户资源限制:
vim /etc/security/limits.conf
 
//文件末尾添加如下内容:(没创建用户的,前面不要dmdba)
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc  65536
dmdba hard nproc  65536
dmdba soft stack  65536
dmdba hard stack  65536

2、安装
运行安装程序安装

3、添加用户环境变量

//执行以下命令,修改 dmdba 用户环境变量:
vi /home/dmdba/.bash_profile 
//文件末尾添加如下内容:
export DM_HOME=/dm8
export PATH=$PATH:$DM_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin

4、防火墙设置
运行环境应该对特定客户端开放数据库监听端口,并修改 DM 数据库默认的 5236 监听端口。

二、安装unixODBC

2.1 编译安装odbc

./coufugure
./configure --prefix=/usr/local/unixODBC
./configure --prefix=/usr/local/unixODBC --includedir=/usr/include --libdir=/usr/lib --bindir=/usr/bin --sysconfdir=/etc --build=i686-pc-linux
./configure --prefix=/usr/local/unixODBC --enable-gui=no --host=arm-linux 
make
sudo make install

2.2 配置odbc

isql -v dm    				#查看结果详细信息
isql -v dm SYSDBA SYSDBA
odbcinst -j					#查看当前实际的odbc.ini、odbcinst.ini位置
odbc_config --odbcini		#查看odbc配置文件中指定的ini文件位置
odbc_config --odbcinstini
export ODBCINI=/usr/local/etc/odbc.ini					#指定ini文件位置
export ODBCSYSINI=/usr/local/etc
/etc/ld.so.config中加入libodbc.so目录、libdodbc.so		#找到库,v10中LD_LIBRARY失效

2.3 问题解决

1、isql出现Could not SQLConnect
   isql -v 查看具体的信息为:Unable to connect to data source

原因有三个:第一个是odbcinst.ini和odbc.ini中数据库驱动的名字不一致(行首、行尾不能有空格)
      第二个就是 odbcinst -j 和 odbc_config --odbcini 中的位置不一致
      第三个就是没有找到 libodbc.so,需设置库路径
      第四个 odbc.ini、odbcinst.ini 文件需要777权限
解决方法:1、库驱动名称一致;
     2、设置环境变量ODBCINI、ODBCSYSINI;
     3、ld.so.config中加入 libodbc.so 库目录

2.4 图形化配置

Linux下ODBC安装配置 1、运行 ODBCConfig 程序(在 /usr/bin 下)

达梦数据库存储clob java实现 达梦数据库使用文档_数据库


2、添加驱动

达梦数据库存储clob java实现 达梦数据库使用文档_数据库_02

Name:数据库驱动的名称
Description:数据库驱动的描述
Driver :数据库驱动程序的完整路径
Setup :数据库驱动安装程序的完整路径

下面是常见数据库的驱动程序的文件名称:

数据库                	数据库驱动程序  			数据库驱动安装程序
TXT       				libodbctxt.so         	libodbctxtS.so
NNTP                  	libnn.so				libodbcnnS.so
MiniSQL					libodbcmini.so			libodbcminiS.so
PostgreSQL				libodbcpsql.so			libodbcpsqlS.so
MySQL					注释					libodbcmyS.so
Sybase/MS SQL			注释					libtdsS.so
Oracle					注释					liboraodbcS.so
达梦					libdodbc.so				无

3、创建 DSN

DSN 分为 User DSN 、System DSN、File DSN 三种。一般用 System DSN 。

达梦数据库存储clob java实现 达梦数据库使用文档_sql_03


4、使用 DataManager 程序浏览数据库

  运行 DataManager 程序之后就可以查看 Drivers 、 System DSN 和 User DSN 这几项内容,,在浏览数据库的时候,可以在右面的 SQL 栏中输入 SQL 语句,然后点击人形按钮就可以运行 SQL 语句,运行结果会在 Results 一栏中显示出来,具体情况可以见下图:

达梦数据库存储clob java实现 达梦数据库使用文档_达梦数据库存储clob java实现_04


5、isql验证

三、达梦配置ODBC

《达梦云文档》配置ODBC中标麒麟+QT+达梦数据库

3.1 检查odbc是否安装

odbcinst -j


达梦数据库存储clob java实现 达梦数据库使用文档_qt_05

3.2 配置odbc.ini


达梦数据库存储clob java实现 达梦数据库使用文档_sql_06

3.3 配置odbcinst.ini


达梦数据库存储clob java实现 达梦数据库使用文档_qt_07

3.4 验证连接

isql DSN [UID [PWD]] [options]

DSN:数据源名称
UID:用户ID
PWD:用户密码
Options: -v
isql DM7


达梦数据库存储clob java实现 达梦数据库使用文档_sql_08

3.5 问题解决

1、Can’t open lib ‘/dm7/bin/libdodbc.so’ : file not found的解决
  (1)LD_LIBRARY_PATH
  上面的例子中多是修改/etc/profile、~/.bash_profile、~.bash等,这也确实起作用,但也有例外,在某国产操作系统v10上,LD_LIBRARY_PATH在/etc/profile、~/.bash_profile里的配置会在进入~.bash后给清空了,若在~.bash里设置LD_LIBRARY_PATH则双击运行程序找不到lidodbc.so。(只清空了LD_LIBRARY_PATH,PATH没清,两个最原始的都有个":",导致添加新路径只能在前面加)
  (2)ld.so.conf
  最保险的方法是:将路径加入到 ld.so.conf

vim /etc/ld.so.conf
//在其中直接加入路径,注意路径前不要加include
/home/ppp/dm8/bin
//生效
sudo ldconfig /etc/ld.so.conf
suo ldconfig

(3)在/usr/lib或/usr/local/lib中创建链接

//后面的链到前面
ln -s /home/ppp/dm8/bin/libodbc.so /usr/bin/libodbc.so

3.6 其他数据库odbc配置(PostgreSQL、MySQL)


达梦数据库存储clob java实现 达梦数据库使用文档_sql_09

达梦数据库存储clob java实现 达梦数据库使用文档_达梦数据库存储clob java实现_10

四、Qt连接达梦

4.1 程序示例

//pro文件中加入sql模块
QT += sql
//加入头文件
#include <QSqlDatabase>
#include <QSqlQuery>
//连接查询
qDebug()<<QSqlDatabase::drivers();
QSqlDatabase m_db = QSqlDatabase::addDatabase("QODBC");
m_db.setHostName("192.168.1.111");
m_db.setPort(5236);
m_db.setDatabaseName("DM");
m_db.setUserName("SYSDBM");
m_db.setPassword("dma123");

if (m_db.open())
{
	qDebug() << "DM connect success!";
	
}
else
{
	qDebug() << "DM connect failed!" << m_db.lastError().text();
	return 0;
}

QString sql = "select * from “mod”.“test” "; //mod是模式名,test是表名
QSqlQuery query(sql);
while(query.next())
{
//逐列获取数据
QString col1 = query.value(0).toString();//query.value("NAME").toString();
QString col2 = query.value(1).toString();
int col3 = query.value(2).toInt();
}

m_db.close(); //关闭连接

4.2 Qt ODBC driver not loaded

如何在QT中编译数据库驱动 解决:自己编译ocbc模块
下载源码:https://download.qt.io/archive/qt/5.12/ 1、找到自己对应的qt版本下载源码。
2、进入odbc源码目录:./qtbase/src/plugins/sqldrivers/odbc,编译odbc驱动

~/Qt5.9.7/5.9.7/gcc_64/bin/qmake "INCLUDEPATH+=/usr/local/unixODBC/include" "LIBS+=-L/usr/local/unixODBC/lib -lodbc" odbc.pro
make

3、复制 libqsqlodbc.so 到Qt文件夹

cd …/plugins/sqldrivers/
cp libqsqlodbc.so ~/Qt5.9.7/5.9.7/gcc_64/plugins/sqldrivers

4、嵌入式
将生成libqsqlodbc.so库文件,拷贝到ARM板子里。还需要拷贝/usr/local/unixODBC-arm/bin目录下面的libodbcinst.so、libodbcinst.so.2、libodbcinst.so.2.0.0、libodbc.so、libodbc.so.2、libodbc.so.2.0.0 六个文件到ARM板里。

五、SQL语法

1、总条数
select count(1) 、select count(*) 、select count(字段)的区别、及性能

select count(*) from test.TABLE_2;

2、分页
3、子查询
4、所有表

select * from all_tables;
select * from all_tables where tablespace_name='GGTABLES';
select * from all_tables where owner=`TEST';

5、表的所有字段(列名)

select * from all_tab_columns;
select * from all_tab_columns where owner='test' and table_name='TABLE_2';

6、数据库所有对象
数据库表syscolumns 各个字段含义系统对象表 Sysobjects 和 SysColumns 表的一些知识达梦数据库获取主外键约束信息

all_tables、 all_tab_columns、 all_constraints、
dba_constraints、dba_cons_columns、
SYSDBA.SYSTABLES B,
SYSDBA.SYSCONSTRAINTS A,
SYSDBA.SYSINDEXES C,
SYSDBA.SYSINDEXKEYS D,
SYSDBA.SYSCOLUMNS E,
SYSDBA.SYSSCHEMAS U

select * from sys.sysobjects;

7、查询所有自增列
达梦查询所有表、所有字段、主键、自增 //设置可修改自增
set IDENTITY_INSERT TEST.TABLE_2 ON;

--查询所有自增列
select * from sys.syscolumns a where a.INFO2 & 0x01 = 0x01;
select * from sys.syscolumns where INFO2=1; --查出自增列名、ID
select * from sys.sysobjects where ID="234" --根据ID查出表名

--下面是综合的
select b.table_name,a.name COL_NAME from  SYS.SYSCOLUMNS a,all_tables b,sys.sysobjects c where a.INFO2 & 0x01 = 0x01 and a.id=c.id and c.name= b.table_name
select b.table_name,a.name COL_NAME from  SYS.SYSCOLUMNS a,all_tables b,sys.sysobjects c where a.INFO2 & 0x01 = 0x01 and a.id=c.id and c.name= b.table_name and TABLESPACE_NAME='GGTABLES'

8、查询主键唯一性
达梦数据库表字段主键、唯一性、非空设置与反设置

9、查询约束

select * from all_constraints where table_name='TABLE_2';  --查看某张表所有约束
select * from dba_cons_columns where CONSTRAINT_NAME='CONS134219250' --查此约束对应的表名、列名
SELECT * FROM ALL_CONSTRAINTS WHERE CONSTRAINT_TYPE='P';   --查看所有主键约束
SELECT DISTINCT CONSTRAINT_TYPE FROM ALL_CONSTRAINTS;    --所有约束种类

CONSTRAINT_TYPE取值:
C:检验约束
P:主键约束
U:唯一性约束
R:外键约束
V:未知(编者注)

10、创建约束
达梦数据库的约束操作

五、备份还原

1、备份表
2、备份表空间(需开启归档)
3、远程备份
逻辑备份(dexp/dimp)介绍

六、创建表

--1、sql语句创建表的同时添加外键约束
CREATE TABLE tb_UserAndRole  --用户角色表
(
  ID INT PRIMARY KEY IDENTITY(1,1),
  UserID INT NOT NULL,--用户ID
  RoleID INT NOT NULL,--角色ID
  foreign key(UserID) references tb_Users(ID)--tb_Users表的ID作为tb_UserAndRole表的外键
)

--2、添加外键约束(关联字段要用括号括起来)
-- ALTER TABLE 从表
-- ADD CONSTRAINT 约束名 FOREIGN KEY (关联字段) references 主表(关联字段);
--例如:
  ALTER TABLE tb_UserAndRole
ADD CONSTRAINT FK__tb_UandR_Role FOREIGN KEY (RoleID) references tb_Role(ID);
create table bloboperation(id int, data blob);
 insert into bloboperation values(1, 0x01020304FFFFFFFF0000000CAACB0000);
 insert into bloboperation values(3, 'hellworld');
 insert into bloboperation values(4, 0);  --0被当作字符串处理
 
 mysql> select id,hex(data),length(data) from bloboperation;
+------+----------------------------------+--------------+
| id   | hex(data)                        | length(data) |
+------+----------------------------------+--------------+
|    1 | 01020304FFFFFFFF0000000CAACB0000 |           16 |
|    2 | 01020304FFFFFFFF0000000CAACB0000 |           16 |
|    3 | 68656C6C776F726C64               |            9 |
|    4 | 30                               |            1 |
+------+----------------------------------+--------------+
--Blob类型字段的处理常用到的函数hex()、substring()、concat()、conv()

用sql语句写入含blob类型字段的数据

不安装达梦,使用库连接

七、QxOrm

QxOrm使用教程

八、编译Qt本身的odbc库libqsqlodbc.so

Ubuntu 17.1 + Qt5.10 源码编译ODBC库