注册

服务器连接windows数据库报错ErrorCode: 6001

五子棋 2025/12/15 96 2

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:6
【操作系统】:linux
【CPU】:
【问题描述】在服务器通过端口映射的方式访问windows上运行的数据库端口时,无法正确访问,但是windows上通过manager工具可以正常查询:。
ssh命令 ssh -R 12346:127.0.0.1:12345 XXX
测试脚本

#!/bin/bash

# ================= 配置区域 =================
# 1. 请修改为你的 jar 包在服务器上的实际路径 (绝对路径或相对路径)
JAR_PATH="./DmJdbcDriver.jar" 

# 2. 数据库信息
DB_HOST="127.0.0.1"
DB_PORT="12346"        # SSH 隧道端口
DB_USER="SYSDBA"
DB_PASS="SYSDBA"
SCHEMA="XNYBS"         # 模式名

# 3. 驱动类名 (DM6 通常是 dm.jdbc.driver.DmDriver,如果报错尝试 dm.jdbc.driver.DmDriver)
DRIVER_CLASS="dm.jdbc.driver.DmDriver"
# ===========================================

# 颜色
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'

echo "========================================"
echo "      达梦数据库 Java JDBC 测试工具"
echo "========================================"

# 1. 检查 Java 环境
if ! command -v java &> /dev/null; then
    echo -e "${RED}❌ 未检测到 Java 环境,请先安装 JDK/JRE${NC}"
    exit 1
fi
if ! command -v javac &> /dev/null; then
    echo -e "${RED}❌ 未检测到 javac (编译器),请安装 JDK (yum install java-1.8.0-openjdk-devel)${NC}"
    echo "注意:仅有 JRE 是不够的,需要编译 Java 代码。"
    exit 1
fi

# 2. 检查 Jar 包
if [ ! -f "$JAR_PATH" ]; then
    echo -e "${RED}❌ 未找到驱动文件: $JAR_PATH${NC}"
    echo "请修改脚本中的 JAR_PATH 变量为实际路径。"
    exit 1
fi
echo -e "${GREEN}✅ 驱动文件存在: $JAR_PATH${NC}"

# 3. 生成 Java 源代码
cat > DmTest.java <<EOF
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;

public class DmTest {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        
        String url = "jdbc:dm://$DB_HOST:$DB_PORT?schema=$SCHEMA";
        String user = "$DB_USER";
        String password = "$DB_PASS";
        String driver = "$DRIVER_CLASS";

        try {
            // 加载驱动
            Class.forName(driver);
            System.out.println("正在连接数据库: " + url);
            
            // 建立连接
            conn = DriverManager.getConnection(url, user, password);
            System.out.println("[Success] 数据库连接建立成功!");
            
            // 切换模式 (虽然 URL 里带了 schema 参数,但强制切换更保险)
            stmt = conn.createStatement();
            try {
                stmt.execute("SET SCHEMA $SCHEMA");
                System.out.println("[Success] 模式切换到 $SCHEMA 成功");
            } catch (Exception e) {
                 System.out.println("[Warning] 切换模式警告: " + e.getMessage());
            }

            // 执行查询
            // 这里查询刚才说的 3 张关键表
            String[] tables = {"RBASE_AREA_INFO", "RBASE_FARM_INFO", "RDATA_REAL_POWER15"};
            
            System.out.println("\n--- 开始查询表统计 ---");
            for (String tbl : tables) {
                try {
                    rs = stmt.executeQuery("SELECT COUNT(*) FROM " + tbl);
                    if (rs.next()) {
                        int count = rs.getInt(1);
                        System.out.println("✅ 表 " + tbl + " 存在,行数: " + count);
                    }
                    rs.close();
                } catch (SQLException e) {
                    System.out.println("❌ 表 " + tbl + " 查询失败: " + e.getMessage());
                }
            }
            System.out.println("----------------------");

        } catch (ClassNotFoundException e) {
            System.out.println("[Error] 找不到驱动类: " + driver);
            System.out.println("请检查 JAR 包版本是否匹配,或者类名是否正确。");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("[Error] SQL 执行错误 (ErrorCode: " + e.getErrorCode() + ")");
            e.printStackTrace();
        } finally {
            try { if(stmt!=null) stmt.close(); } catch(Exception e){}
            try { if(conn!=null) conn.close(); } catch(Exception e){}
        }
    }
}
EOF

# 4. 编译 Java 代码
echo "正在编译 Java 代码..."
javac -encoding UTF-8 -cp ".:$JAR_PATH" DmTest.java
if [ $? -ne 0 ]; then
    echo -e "${RED}❌ 编译失败${NC}"
    exit 1
fi

# 5. 运行 Java 代码
echo "正在运行测试..."
echo "----------------------------------------"
# Linux 下 classpath 分隔符是冒号 :
java -cp ".:$JAR_PATH" DmTest
echo "----------------------------------------"

# 6. 清理临时文件
rm -f DmTest.java DmTest.class
echo "测试结束。"

报错

(power_net) wangziqin@NGN-3080:~/PowerNet$ ./test_java.sh                                                                                                                                 
========================================                                                                                                                                                         
      达梦数据库 Java JDBC 测试工具                                                                                                                                                              
========================================                                                                                                                                                         
✅ 驱动文件存在: ./DmJdbcDriver.jar
正在编译 Java 代码...
正在运行测试...
----------------------------------------
正在连接数据库: jdbc:dm://127.0.0.1:12346?schema=XNYBS
[Error] SQL 执行错误 (ErrorCode: 6001)
java.sql.SQLException: 网络通信异常
        at dm.jdbc.dbaccess.DBError.throwSQLException(Unknown Source)
        at dm.jdbc.driver.DmdbCSI.startupServer(Unknown Source)
        at dm.jdbc.driver.DmdbCSI.<init>(Unknown Source)
        at dm.jdbc.driver.DmdbConnection.<init>(Unknown Source)
        at dm.jdbc.driver.DmDriver.connect(Unknown Source)
        at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
        at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
        at DmTest.main(DmTest.java:24)
----------------------------------------
测试结束。
回答 0
暂无回答
扫一扫
联系客服