当前位置: 首页 > news >正文

使用odbc链接dm8数据库

一、环境说明

windows11 + VMware Workstation 17 Pro + ubuntu22.04 + docker

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:        22.04
Codename:       jammy

因docker版本的dm8中,没有odbc相关的驱动以及头文件,因此在Ubuntu22.04上安装一个完整的dm8

二、Ubuntu22.04安装dm8

参考:https://eco.dameng.com/document/dm/zh-cn/start/install-dm-linux-prepare.html

2. 1 下载

这里下载redhat7即可
在这里插入图片描述

2.2 解压

t@t:~$ unzip dm8_20240116_x86_rh7_64.zip
Archive:  dm8_20240116_x86_rh7_64.zipinflating: dm8_20240116_x86_rh7_64.isoextracting: dm8_20240116_x86_rh7_64.iso_SHA256.txtinflating: dm8_20240116_x86_rh7_64.iso.README

2. 3 挂载镜像

t@t:~$ sudo mkdir /mnt/dm8_iso
[sudo] password for t:t@t:~$ sudo mount dm8_20240116_x86_rh7_64.iso -o loop /mnt/dm8_iso
mount: /mnt/dm8_iso: WARNING: source write-protected, mounted read-only.

2.4 创建安装用户

t@t:~$ su root
Password:
root@t:~# groupadd dinstall -g 2001
root@t:~# useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba
root@t:~# passwd dmdba
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: password updated successfully

2.5 安装dm8

root@t:~# su - dmdba
dmdba@t:~$ cd /mnt/dm8_iso/
dmdba@t:/mnt/dm8_iso$ ls
'DM8 Install.pdf'   DMInstall.bin
dmdba@t:/mnt/dm8_iso$ ./DMInstall.bin -i
Installer Language:
[1]: 简体中文
[2]: English
Please select the installer's language [2]:1
解压安装程序.........
本系统已存在其他版本达梦数据库,请您卸载。如继续安装,可能影响其他版本达梦数据库正常使用。
是否继续? (Y/y:是 N/n:否) [Y/y]:y
欢迎使用达梦数据库安装程序是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n是否设置时区? (Y/y:是 N/n:否) [Y/y]:y
设置时区:
[ 1]: (GTM-12:00) 日界线西
[ 2]: (GTM-11:00) 萨摩亚群岛
[ 3]: (GTM-10:00) 夏威夷
[ 4]: (GTM-09:00) 阿拉斯加
[ 5]: (GTM-08:00) 太平洋时间(美国和加拿大)
[ 6]: (GTM-07:00) 亚利桑那
[ 7]: (GTM-06:00) 中部时间(美国和加拿大)
[ 8]: (GTM-05:00) 东部部时间(美国和加拿大)
[ 9]: (GTM-04:00) 大西洋时间(美国和加拿大)
[10]: (GTM-03:00) 巴西利亚
[11]: (GTM-02:00) 中大西洋
[12]: (GTM-01:00) 亚速尔群岛
[13]: (GTM) 格林威治标准时间
[14]: (GTM+01:00) 萨拉热窝
[15]: (GTM+02:00) 开罗
[16]: (GTM+03:00) 莫斯科
[17]: (GTM+04:00) 阿布扎比
[18]: (GTM+05:00) 伊斯兰堡
[19]: (GTM+06:00) 达卡
[20]: (GTM+07:00) 曼谷,河内
[21]: (GTM+08:00) 中国标准时间
[22]: (GTM+09:00) 首尔
[23]: (GTM+10:00) 关岛
[24]: (GTM+11:00) 所罗门群岛
[25]: (GTM+12:00) 斐济
[26]: (GTM+13:00) 努库阿勒法
[27]: (GTM+14:00) 基里巴斯
请选择时区 [21]:21安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:1
所需空间: 1979M请选择安装目录 [/home/dmdba/dmdbms]:
可用空间: 43G
是否确认安装路径(/home/dmdba/dmdbms)? (Y/y:是 N/n:否)  [Y/y]:y安装前小结
安装位置: /home/dmdba/dmdbms
所需空间: 1979M
可用空间: 43G
版本信息:
有效日期:
安装类型: 典型安装
是否确认安装? (Y/y:是 N/n:否):y
2024-04-13 09:08:21
[INFO] 安装 基础 模块...
2024-04-13 09:08:21
[INFO] 安装达梦数据库...
2024-04-13 09:08:30
[INFO] 安装 服务器 模块...
2024-04-13 09:08:31
[INFO] 安装 客户端 模块...
2024-04-13 09:08:32
[INFO] 安装 驱动 模块...
2024-04-13 09:08:34
[INFO] 安装 手册 模块...
2024-04-13 09:08:35
[INFO] 安装 服务 模块...
2024-04-13 09:08:35
[INFO] 移动日志文件。
2024-04-13 09:08:36
[INFO] 安装达梦数据库完成。请以root系统用户执行命令:
/home/dmdba/dmdbms/script/root/root_installer.sh安装结束

因只需要相关的驱动,因此并未执行root_installer.sh, 也并未启动dm服务器,还是使用原先的docker镜像

dmdba@t:/mnt/dm8_iso$ cd ~dmdba@t:~$ ls dmdbms/drivers/odbc/
libcrypto.so  libdmdpi.so  libdmfldr.so  libdodbc.a  libdodbc.so  libssl.sodmdba@t:~$ ls dmdbms/include/
asmapi2.h        dpc_dll.h                   fldr.h         libdmfldr_comm.a      libdodbc.a       OOPI.h
crypto_engine.h  dpc_dll_with_oci_connect.h  libdmasmapi.a  libdmfldr_dll_java.a  libdwmon.a       sqlca_db2.h
DCI1.h           dpc_ora_dll.h               libdmdci.a     libdmlogmnr.a         logmnr_client.h  sqlca.h
DCI.h            DPIext.h                    libdmde.a      libdmlogmnr_client.a  logmnr_pub.h     sqlca_ora.h
de_pub.h         DPI.h                       libdmdpc.a     libdmmsgparse.a       msg_parse.h      sqlda_db2.h
dmcpt_dll.h      DPItypes.h                  libdmdpi.a     libdmnci.a            msgparse_pub.h   sqlda.h
dmsbt_dll.h      dwmon_dll.h                 libdmfldr.a    libdmoopi.a           nci.h            sqlda_ora.h

三、 编写odbc代码

3.1 安装odbc开发库

dmdba@t:~$ exit
root@t:~# exit
t@t:~$ sudo apt install unixodbc-dev -y

3.2 配置odbc

t@t:~$ sudo vim /etc/odbcinst.init@t:~$ cat /etc/odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /home/dmdba/dmdbms/drivers/odbc/libdodbc.so
t@t:~$ sudo vim /etc/odbc.init@t:~$ cat /etc/odbc.ini
[dm]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = 192.168.15.128
UID = SYSDBA
PWD = SYSDBA001
TCP_PORT = 30236

3.3 编写程序

参考 https://eco.dameng.com/document/dm/zh-cn/pm/odbc-rogramming-guide.html

#include <stdio.h>
#include <sql.h>
#include <sqltypes.h>
#include <sqlext.h>
//检测返回代码是否为成功标志,当为成功标志返回 TRUE,否则返回 FALSE
#define RC_SUCCESSFUL(rc) ((rc) == SQL_SUCCESS || (rc) == SQL_SUCCESS_WITH_INFO)
//检测返回代码是否为失败标志,当为失败标志返回 TRUE,否则返回 FALSE
#define RC_NOTSUCCESSFUL(rc) (!(RC_SUCCESSFUL(rc)))
HENV henv; //环境句柄
HDBC hdbc; //连接句柄
HSTMT hsmt; //语句句柄
SQLRETURN sret; //返回代码
char szpersonid[11]; //人员编号
SQLLEN cbpersonid=0;
char szname[51]; //人员姓名
SQLLEN cbname=0;
char szphone[26]; //联系电话
SQLLEN cbphone=0;
void main(void)
{//申请一个环境句柄sret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);printf("%d\n", sret);//设置环境句柄的 ODBC 版本sret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);printf("%d\n", sret);//申请一个连接句柄sret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);printf("%d\n", sret);sret = SQLConnect(hdbc, (SQLCHAR *)"dm", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS, (SQLCHAR *)"SYSDBA001", SQL_NTS);printf("%d\n", sret);//申请一个语句句柄sret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hsmt);printf("%d\n", sret);//立即执行查询人员信息表的语句sret = SQLExecDirect(hsmt, (SQLCHAR *)"SELECT personid, name, phone FROM person.person;", SQL_NTS);printf("%d\n", sret);//绑定数据缓冲区sret = SQLBindCol(hsmt, 1, SQL_C_CHAR, szpersonid, sizeof(szpersonid), &cbpersonid);sret = SQLBindCol(hsmt, 2, SQL_C_CHAR, szname, sizeof(szname), &cbname);sret = SQLBindCol(hsmt, 3, SQL_C_CHAR, szphone, sizeof(szphone), &cbphone);//取得数据并且打印数据printf("人员编号 人员姓名 联系电话\n");for (;;) {sret = SQLFetchScroll(hsmt, SQL_FETCH_NEXT, 0);if (sret == SQL_NO_DATA_FOUND)break;printf("%s%s %s\n", szpersonid, szname, szphone);}//关闭游标,终止语句执行SQLCloseCursor(hsmt);//释放语句句柄SQLFreeHandle(SQL_HANDLE_STMT, hsmt);//断开与数据源之间的连接SQLDisconnect(hdbc);//释放连接句柄SQLFreeHandle(SQL_HANDLE_DBC, hdbc);//释放环境句柄SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
dmdba@t:~$  gcc dm8_odbc.c -o dm8_odbc -lodbc
dmdba@t:~$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dmdba/dmdbms/drivers/odbc ./dm8_odbc
0
0
0
0
0
0
人员编号 人员姓名 联系电话
1李丽 02788548562
2王刚 02787584562
3李勇 02782585462
4郭艳 02787785462
5孙丽 13055173012
6黄非 13355173012
7王菲 13255173012
8张平 13455173012
9张红 13555173012
10刘佳 13955173012
11王南 15955173012
12李飞 15954173012
13张大海 15955673012
14王宇轩 15955175012
15桑泽恩 15955173024
16刘青 15955173055
17杨凤兰 02785584662

note:

  • 因/home/dmdba/dmdbms/drivers/odbc/libdodbc.so驱动文件在dmdba用户目录下,因此需要dmdba用户或者root用户,否则无法访问此驱动文件
  • 因libdodbc.so会依赖libdmdpi.so, 因此需要增加搜索路径,这里临时使用LD_LIBRARY_PATH

相关文章:

使用odbc链接dm8数据库

一、环境说明 windows11 VMware Workstation 17 Pro ubuntu22.04 docker $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy因docker版本的dm8中&#xff0c;没有…...

开源项目one-api的k8s容器化部署(上)-- 制作镜像及部署准备

一、背景 最近需要对开源项目one-api进行k8s容器化部署&#xff0c;主要分以下几个步骤&#xff1a; 制作docker镜像申请mysql和redis数据库docker-compose部署方式k8s部署方式 整个的篇幅比较长&#xff0c;将会分成上下两篇来阐述。 二、制作docker镜像 开源项目one-api…...

面试-数据库基础以及MySql、ClickHost、Redis简介

面试-数据库基础以及MySql、ClickHost、Redis简介 0.数据完整性1.数据库并发控制1.1事物1.2 并发读写错误1.3 锁1.3.1 乐观锁与悲观锁1.3.2 共享锁和排他锁1.3.3 行锁与表锁1.3.4 意向锁 1.4 封锁协议与隔离级别1.5 MVCC1.5.1 概念1.5.2 当前读与快照读1.5.3 MVCC in InnoDB 2.…...

MySQL分库分表的方式有哪些

目录 一、为什么要分库分表 二、什么是分库分表 三、分库分表的几种方式 1.垂直拆分 2. 水平拆分 四、分库分表带来的问题 五、分库分表技术如何选型 一、为什么要分库分表 如果一个网站业务快速发展&#xff0c;那这个网站流量也会增加&#xff0c;数据的压力也会随之而…...

数据结构课程设计选做(一)---数字排序(哈希、排序)

2.1.1 题目内容 2.1.1-A [问题描述] 给定n个整数&#xff0c;请统计出每个整数出现的次数&#xff0c;按出现次数从多到少的顺序输出。 2.1.1-B [基本要求] &#xff08;1&#xff09;输入格式&#xff1a; 输入的第一行包含一个整数n&#xff0c;表示给定数字的个数。 第二…...

Linux第90步_异步通知实验

“异步通知”的核心就是信号&#xff0c;由“驱动设备”主动报告给“应用程序”的。 1、添加“EXTI3.c” #include "EXTI3.h" #include <linux/gpio.h> //使能gpio_request(),gpio_free(),gpio_direction_input(), //使能gpio_direction_output(),gpio_get_v…...

elasticdump之python脚本

参考文章目录 elasticdump之shell备份脚本 前言 在企业实际生产环境中,避免不了要对es集群进行迁移、数据备份与恢复&#xff0c;以此来确保数据的可用性及完整性。因此&#xff0c;就涉及到了数据备份与恢复。本章主要以elasticdumppython为主&#xff0c;实现es集群索引备…...

Hystrix应用:如何在Spring Boot中使用Hystrix?

Hystrix应用&#xff1a;如何在Spring Boot中使用Hystrix&#xff1f; 引言 在微服务架构的发展过程中&#xff0c;面对复杂的服务依赖和不可预见的系统故障&#xff0c;如何提升系统的容错能力成为了一个非常急迫且重要的能力。 由 Netflix&#xff08;网飞&#xff09;公司…...

js的常用方法

js的常用方法已经使用过的实例 JavaScript有许多基本方法&#xff0c;这些方法可用于执行各种操作&#xff0c;包括字符串操作、数组操作、数学运算等。以下是一些常用的JavaScript基本方法及简单示例&#xff1a; 一、字符串方法 1、toUpperCase()&#xff1a;将字符串转换为…...

基于SpringBoot实现的在线拍卖系统

系统开发环境 编程语言&#xff1a;Java数据库&#xff1a;MySQL容器&#xff1a;Tomcat工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统实现 管理员功能模块 首页 修改密码 用户管理 商品类型管理 拍卖商品 竞拍公告 轮播图 历史竞拍管理 竞拍订单管理 留言板管理 用户…...

React 组件生命周期对比:Class vs. 函数式

在 React 中&#xff0c;Class 组件和函数式组件的生命周期存在一些差异。通过对 React 中 Class 组件和函数式组件的生命周期进行对比&#xff0c;详细探讨了它们在设计哲学、生命周期管理和开发技巧上的异同。全面了解 React 中两种组件类型的生命周期特点&#xff0c;以及如…...

Ubuntu去除烦人的顶部【活动】按钮

文章目录 一、需求说明二、打开 extensions 网站三、安装 GNOME Shell 插件四、安装本地连接器五、安装 Hide Activities Button 插件六、最终效果七、卸载本地连接器命令参考 本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 一、需求说明 使用 Ubuntu 的过程中&#xff0c;屏…...

Vue2(十五):replace属性、编程式路由导航、缓存路由组件、路由组件独有钩子、路由守卫、history与hash

一、router-link的replace属性 1、作用&#xff1a;控制路由跳转时操作浏览器历史记录的模式 2、浏览器的历史记录有两种写入方式&#xff1a;分别为push和replace&#xff0c;push是追加历史记录&#xff0c;replace是替换当前记录。路由跳转时候默认为push 3、如何开启repla…...

智慧污水井物联网远程监控案例

智慧污水井物联网远程监控案例 在当今数字化转型的浪潮中&#xff0c;智慧水务已成为城市基础设施建设的重要组成部分。其中&#xff0c;基于物联网技术的智慧污水井远程监控系统以其高效、精准、实时的特性&#xff0c;在提升污水处理效能、保障城市水环境安全、实现精细化管…...

程序员Java.vue,python前端后端爬虫开发资源分享

bat面试资料 bat面试题汇总 提取码&#xff1a;724z 更多资料...

PCL:基于法线微分分割

1.介绍 在三维点云处理中,法线微分分割(Difference of Normals,简称DoN)是一种常用的分割方法,用于将点云中的物体或者场景进行分割成不同的部分或者簇。通过计算点云中每个点的法线向量,以及法线向量的变化率(差异),可以有效地分割出具有明显形状差异的部分,从而实现…...

生产事故:线程管理不善诱发P0故障

背景 处于业务诉求&#xff0c;需要建立一个统一的调度平台&#xff0c;最终是基于 Dolphinscheduler 的 V1.3.6 版本去做二次开发。在平台调研建立时&#xff0c;这个版本是最新的版本 命运之轮开始转动 事故 表象 上班后业务部门反馈工作流阻塞&#xff0c;登录系统发现大…...

WPF —— GDI画板

定义绘制对象 Graphics g; 起始点坐标 Point start; 画笔颜色 Color c1 Color.Black; 是否开始绘制 当flagtrue开始绘制&#xff0c;结束绘 private void Form1_MouseDown(object sender, MouseEventArgs e) {if (e.Button MouseButtons.Left) //点击了鼠标左键{start …...

C++:基于范围的for循环

使用迭代器遍历容器在遍历的过程中需要给出容器的两端&#xff1a;开头&#xff08;begin&#xff09;和结尾&#xff08;end&#xff09;&#xff0c;因为这种遍历方式不是基于范围来设计的。在基于范围的for循环中&#xff0c;不需要再传递容器的两端&#xff0c;循环会自动以…...

引领智能互联时代,紫光展锐赋能百业创新发展

随着5G技术的快速发展&#xff0c;各行各业对通信技术的需求也在不断升级。紫光展锐持续深耕5G垂直行业&#xff0c;不断推进5G标准演进&#xff0c;从R15到R16&#xff0c;再到R17&#xff0c;展锐携手生态合作伙伴&#xff0c;不断推出创新性解决方案&#xff0c;在5G RedCap…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...