日期:2026-06-10
数据库:达梦 DM8 (192.168.0.56:5236, schema: ZJRS_JEECG_BOOT)
驱动:项目 Maven 本地仓库中的 DmJdbcDriver18 8.1.3.140
项目开发过程中需要直接在达梦数据库上执行建表、插入测试数据等 SQL,但当前机器未安装 disql 客户端。因此利用项目已有的 DmJdbcDriver18 JDBC 驱动,编写简单 Java 程序直连数据库执行 SQL。
~/.m2/repository/com/dameng/DmJdbcDriver18/8.1.3.140/DmJdbcDriver18-8.1.3.140.jar
Windows 绝对路径:
C:/Users/bowinuser/.m2/repository/com/dameng/DmJdbcDriver18/8.1.3.140/DmJdbcDriver18-8.1.3.140.jar
URL: jdbc:dm://192.168.0.56:5236?schema=ZJRS_JEECG_BOOT&compatibleMode=oracle&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
用户名: SYSDBA
密码: Bowin123456
cd "D:\我的文件\JeecgBoot-main"
javac -encoding UTF-8 \
-cp "C:/Users/bowinuser/.m2/repository/com/dameng/DmJdbcDriver18/8.1.3.140/DmJdbcDriver18-8.1.3.140.jar" \
.claude/DmRun.java -d .claude/
关键点: 必须加 -encoding UTF-8,否则 Java 源文件中的中文字符会因 Windows 默认 GBK 编码导致编译失败("未映射字符"错误)。
java -cp ".claude;C:/Users/bowinuser/.m2/repository/com/dameng/DmJdbcDriver18/8.1.3.140/DmJdbcDriver18-8.1.3.140.jar" \
DmRun
import java.sql.*;
public class DmRun {
static String url = "jdbc:dm://192.168.0.56:5236?schema=ZJRS_JEECG_BOOT&compatibleMode=oracle&...";
static String user = "SYSDBA";
static String pw = "Bowin123456";
public static void main(String[] args) throws Exception {
try (Connection c = DriverManager.getConnection(url, user, pw)) {
c.setAutoCommit(false);
Statement s = c.createStatement();
// 执行建表
s.execute("CREATE TABLE xxx (...)");
// 执行注释(DM8 特有语法)
s.execute("COMMENT ON TABLE xxx IS '表说明'");
s.execute("COMMENT ON COLUMN xxx.col IS '列说明'");
// 执行索引
s.execute("CREATE UNIQUE INDEX idx_xxx ON xxx(col)");
// 插入数据(日期使用 TO_DATE)
s.execute("INSERT INTO xxx VALUES (..., TO_DATE('2026-06-09','YYYY-MM-DD HH24:MI:SS'), ...)");
c.commit();
}
}
}
| 问题 | 原因 | 解决 |
|---|---|---|
ClassNotFoundException: dm.jdbc.driver.DmDriver |
classpath 中 JAR 路径不对 | 使用绝对路径 C:/Users/.../DmJdbcDriver18-8.1.3.140.jar |
| 编译报"未映射字符" | Java 源文件含中文但 javac 默认用 GBK | 加 -encoding UTF-8 |
| 从 SQL 文件读取执行时 COMMENT ON 失败 | 文件编码/语句拆分不准确 | 直接在 Java 代码中拼接 SQL 字符串执行 |
CURRENT_TIMESTAMP 等关键字大小写 |
DM8 Oracle 兼容模式下关键字不区分大小写 | 直接使用 |
| 日期插入 | 字符串不能直接转为 TIMESTAMP | 使用 TO_DATE('2026-06-09 10:00:00','YYYY-MM-DD HH24:MI:SS') |
// DmCheck.java - 检查表是否存在及行数
try (Connection c = DriverManager.getConnection(url, user, pw)) {
for (String t : new String[]{"ENTERPRISE_STATUS_LOCAL", "PERSONAL_STATUS_LOCAL", ...}) {
ResultSet rs = c.createStatement().executeQuery("SELECT COUNT(*) FROM " + t);
rs.next();
System.out.println(t + ": " + rs.getInt(1) + " rows");
}
}
后续如需执行新的 SQL,按以下步骤操作:
# 1. 编写/修改 .claude/DmRun.java
# 2. 编译
cd "D:\我的文件\JeecgBoot-main"
javac -encoding UTF-8 -cp "C:/Users/bowinuser/.m2/repository/com/dameng/DmJdbcDriver18/8.1.3.140/DmJdbcDriver18-8.1.3.140.jar" .claude/DmRun.java -d .claude/
# 3. 执行
java -cp ".claude;C:/Users/bowinuser/.m2/repository/com/dameng/DmJdbcDriver18/8.1.3.140/DmJdbcDriver18-8.1.3.140.jar" DmRun