达梦连接串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测试环境的主机时钟相差太大)。

相关推荐
让头发掉下来1 小时前
Flink SQL 中两个频繁变化 Topic 的 Join 行为分析
大数据·数据库·sql·flink
还是鼠鼠1 小时前
Spring AI ChatClient详解:创建第一个AI客户端
java·springboot·spring ai·chatclient
vHelios1 小时前
【电商项目】测试 授权功能 遇到的问题与解决方案
java·spring boot·sql
小书房2 小时前
KMP跨平台之数据库
数据库·kmp
2401_894915532 小时前
GEO 定位优化源码搭建常见报错排查:数据库、伪静态、接口调试
java·数据库·网络协议·tcp/ip·spring·unity
bbq粉刷匠2 小时前
ArrayList 整体认识
java·jvm·数据结构
水无痕simon2 小时前
15 转账对接文档
java·区块链
西凉的悲伤2 小时前
Java 基于 MySQL 行锁实现高并发业务序列号生成器
java·mysql·springboot·序列号生成
lv__pf2 小时前
servlet与jsp
java·开发语言·servlet