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

相关推荐
我是大猴子7 分钟前
redis执行get等命令时底层操作
java
其实防守也摸鱼16 分钟前
堆叠注入(Stacked Injection)详解
服务器·数据库·windows·https·ssl
叶总没有会17 分钟前
微服务--分布式基础
java·spring·spring cloud·微服务
鹿角片ljp19 分钟前
Prompt Cache、Token 成本与 Plan Compiler 的工程设计
java·python·算法
Wang's Blog1 小时前
Java 接入Redis: 五大数据类型与存储结构选型
java·服务器·redis
Wang's Blog1 小时前
Java 接入Redis: 字符串与哈希类型操作命令
java·服务器·redis
智慧物业老杨5 小时前
物业数字化落地思考:真正的转型,是底层数据秩序的重构
java·大数据·人工智能·微服务·系统架构
星空8 小时前
金蝶苍穹build.gradle配置
java·build.gradle
两点王爷9 小时前
PostgreSQL 常用 SQL 语句与 GIS 相关函数详解
数据库·后端
两点王爷9 小时前
PostgreSQL 好用又独特的特性与空间函数
数据库