有时开发人员在java程序写了一个达梦连接串,连接数据库出现问题,那么如何验证这个串是否异常,或是否有效,可以自己写个测试的java代码,如下:
java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
public class DmConnectionTest {
public static void main(String[] args) {
// 你的连接串
// String url = "jdbc:dm://DMHA?DMHA={192.168.218.201:5236,192.168.218.202:5236}&LOGINMODE=1&SWITCH_TIME=3&SWITCH_INTERVAL=1000&schema=aa";
// String url = "jdbc:dm://192.168.218.201:5236&schema=AA";
String url = "jdbc:dm://DMHA?DMHA=(192.168.218.201:5236,192.168.218.202:5236)&loginMode=1&switchTimes=3&switchInterval=1000";
// 请根据实际情况修改用户名和密码
String username = "aa";
String password = "Abc_123456";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 加载达梦驱动
Class.forName("dm.jdbc.driver.DmDriver");
System.out.println("✅ 驱动加载成功");
// 建立连接
System.out.println("🔗 正在连接: " + url);
conn = DriverManager.getConnection(url, username, password);
System.out.println("✅ 连接成功!");
// 测试查询:获取数据库版本和当前模式
stmt = conn.createStatement();
// 查询数据库名
rs = stmt.executeQuery("select instance_name,host_name,start_time,mode$ from v$instance");
if (rs.next()) {
System.out.println("📌 实例名: " + rs.getString(1));
System.out.println("📌 主机名: " + rs.getString(2));
System.out.println("📌 启动时间: " + rs.getString(3));
System.out.println("📌 角色: " + rs.getString(4));
}
rs.close();
// 查询数据库版本
rs = stmt.executeQuery("select id_code ");
if (rs.next()) {
System.out.println("📌 ID_CODE: " + rs.getString(1));
}
rs.close();
// 查询当前模式
rs = stmt.executeQuery("SELECT user ");
if (rs.next()) {
System.out.println("📌 当前模式: " + rs.getString(1));
}
// 查询服务器时间
rs = stmt.executeQuery("SELECT sysdate ");
if (rs.next()) {
System.out.println("📌 服务器时间: " + rs.getString(1));
}
System.out.println("✅ 测试完成,连接正常!");
} catch (ClassNotFoundException e) {
System.err.println("❌ 达梦驱动未找到,请检查 DmJdbcDriver 是否在 classpath 中");
e.printStackTrace();
} catch (SQLException e) {
System.err.println("❌ 数据库连接失败");
System.err.println("错误码: " + e.getErrorCode());
System.err.println("错误信息: " + e.getMessage());
// 针对 6091 错误给出提示
if (e.getErrorCode() == 6091) {
System.err.println("\n⚠️ 错误 6091: 服务器模式不匹配");
System.err.println("可能原因及解决方案:");
System.err.println(" 1. DMHA 集群配置的 IP/端口不正确,请确认 192.168.1.1:5236 是否是完整地址");
System.err.println(" 2. 完整格式应为: DMHA=(192.168.1.1:5236,192.168.1.2:5236)");
System.err.println(" 3. 检查当前数据库是否真的是 DMHA 集群环境");
System.err.println(" 4. 尝试改用普通连接串: jdbc:dm://IP:端口");
}
e.printStackTrace();
} finally {
// 关闭资源
try { if (rs != null) rs.close(); } catch (Exception e) {}
try { if (stmt != null) stmt.close(); } catch (Exception e) {}
try { if (conn != null) conn.close(); System.out.println("🔒 连接已关闭"); } catch (Exception e) {}
}
}
}
将其保存为DmConnectionTest.java,然后配套达梦驱动和编译脚本

驱动文件DmJdbcDriver8.jar可以从$DM_HOME/drivers/jdbc目录下复制过来
编译及执行脚本br内容:
bash
/dm/dmdbms/jdk/bin/javac -cp ".:DmJdbcDriver8.jar" DmConnectionTest.java
java -cp ".:DmJdbcDriver8.jar" DmConnectionTest
执行 br 即可看到测试效果,如果数据库切换主备,单独执行 r 即可,例如:

当前是实例1,然后通过monitor切换

再验证

已连接到新的primary实例2了(顺便发现这套达梦DW测试环境的主机时钟相差太大)。