达梦连接串JDBC测试程序

有时开发人员在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测试环境的主机时钟相差太大)。

相关推荐
用户3721574261352 分钟前
Java 查找并高亮 Word 文字:精确查找及正则表达式模糊查找
java
云贝贝贝13 分钟前
PostgreSQL 分区表:从设计到运维,大表不再卡
运维·数据库·postgresql
oradh14 分钟前
Oracle固定执行计划的方法---SQL Plan Baseline
数据库·sql·oracle
数据库小学妹19 分钟前
数据库高可用演练怎么做?稳态定义、注入点与中止条件
数据库·rto·高可用架构·运维体系·故障演练·容灾切换
zyseo820 分钟前
谷歌SEO 站内搜索优化实战:把站内搜索词变成关键词金矿
java·服务器·数据库
qq_4017004121 分钟前
Qt 串口/网口通信:Hex 与 ASCII 编码转换深度指南
开发语言·数据库·qt
码爸24 分钟前
多源异构数据库实时同步至 Doris
数据库·flink·scala
bug菌28 分钟前
🤔同事突然问我:Spring的注解 @Component 和 @Service 有何不同?
java·spring boot·后端
王大傻092828 分钟前
堆叠注入(Stacked Queries Injection)详解:原理、利用与防御
服务器·网络·数据库·web安全·网络安全
佳児素花痴╮32 分钟前
线程知识点
java·开发语言·jvm