问题描述
代码直接使用达梦数据库驱动libdodbc.so
连接达梦的时候返回了Need more information
错误,检查数据库用户名、密码、地址、端口均无配置错误,并且代码在Win,Linux机器上可以正常连接数据库,但是在Arm机器上运行报错。网上也没找到相关资料处理,尝试使用unixODBC配置数据源方式连接,竟然可以成功连上数据库,没搞懂是什么原因造成的,简单记录一下配置数据源连接达梦。
解决方案
通过数据源连接达梦数据库
-
安装unixODBC
需要安装unixODBC环境,unixODBC官网地址,使用命令odbcinst -j
检查机器上是否已经安装。 -
配置ODBC驱动
在/usr/local/etc/
目录下找到odbcinst.ini
文件,如果不存在手动创建,编辑写入
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /dm8/bin/libdodbc.so
Driver为达梦odbc文件绝对路径
- 配置数据源
在/usr/local/etc/
目录下找到odbc.ini
文件,如果不存在手动创建,编辑写入
[DM8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = 数据库地址
UID = 数据库用户名
PWD = 数据库密码
TCP_PORT = 数据库端口
注意:Driver需要填写步骤2中的section名称
- 测试ODBC连接
步骤3中的section即为数据源名称,使用isql命令测试连接isql dm8 -v
,连接成功则如下图所示
如果连接失败并提示Data source name not found, and no default driver specified
,重新配置ODBCINI
及ODBCSYSINI
两个环境变量即可。其中,ODBCINI
设置为odbc.ini
的文件路径全名,ODBCSYSINI
为配置文件路径,通过执行odbcinst -j
命令可以查看当前配置信息情况,以确认相关配置信息的路径是否正确,临时修改环境变量
export ODBCINI=/usr/local/etc/odbc.ini
export ODBCSYSINI=/usr/local/etc
如果提示Can't open lib 'xxx.so' : file not found
,但是实际核实该文件是存在的,可以查看驱动文件的动态链接库是否正确,通过ldd xxx.so
查看是否有驱动显示not found
再次使用isql测试,测试成功后即可使用该数据源。