From 721cd48d96ac90a1fdba82dd80456473a5a38bef Mon Sep 17 00:00:00 2001 From: yanghuanglin Date: Thu, 5 Jun 2025 12:58:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=BE=BE=E6=A2=A6=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93V8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 8 +++++++- .../seq/config/GeneratorConfig.java | 6 +++++- .../seq/dao/impl/SequencesBase.java | 2 ++ .../java/com/yanghuanglin/seq/enums/DbType.java | 4 +++- .../resources/dm/create_table_sequences.sql | 17 ++--------------- src/test/java/SeqTest.java | 13 ++++++++++++- 6 files changed, 31 insertions(+), 19 deletions(-) diff --git a/pom.xml b/pom.xml index 9d17db9..fc4dc8f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.yanghuanglin seq - 1.11.0 + 1.12.0 seq seq @@ -34,6 +34,12 @@ 42.7.3 test + + com.dameng + DmJdbcDriver18 + 8.1.3.140 + test + junit junit diff --git a/src/main/java/com/yanghuanglin/seq/config/GeneratorConfig.java b/src/main/java/com/yanghuanglin/seq/config/GeneratorConfig.java index b20e175..1a2997c 100644 --- a/src/main/java/com/yanghuanglin/seq/config/GeneratorConfig.java +++ b/src/main/java/com/yanghuanglin/seq/config/GeneratorConfig.java @@ -3,6 +3,8 @@ package com.yanghuanglin.seq.config; import com.yanghuanglin.seq.enums.DbType; import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.DatabaseMetaData; import java.sql.SQLException; /** @@ -132,8 +134,10 @@ public class GeneratorConfig { public DbType getDbType() { if (this.dbType == null) { + Connection connection = null; try { - String productName = this.dataSource.getConnection().getMetaData().getDatabaseProductName(); + connection = dataSource.getConnection(); + String productName = connection.getMetaData().getDatabaseProductName(); this.dbType = DbType.of(productName); } catch (SQLException e) { throw new RuntimeException("获取数据库类型失败", e); diff --git a/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesBase.java b/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesBase.java index 22f208c..89dafce 100644 --- a/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesBase.java +++ b/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesBase.java @@ -50,6 +50,7 @@ public abstract class SequencesBase { sql = sql.replaceAll("`create_time`", String.format("`%s`", tableConfig.getCreateTimeColumn())); break; case Dameng: + case DM_DBMS: case PostgreSQL: case KingbaseES: sql = sql.replaceAll("\"sequences(_unused|_unlock)\"", String.format("%s$1", tableConfig.getTable())); @@ -79,6 +80,7 @@ public abstract class SequencesBase { break; case PostgreSQL: case Dameng: + case DM_DBMS: case KingbaseES: sqlString = sqlString.replaceAll("`(.+?)`", "\"$1\""); break; diff --git a/src/main/java/com/yanghuanglin/seq/enums/DbType.java b/src/main/java/com/yanghuanglin/seq/enums/DbType.java index b512cfe..6e9882f 100644 --- a/src/main/java/com/yanghuanglin/seq/enums/DbType.java +++ b/src/main/java/com/yanghuanglin/seq/enums/DbType.java @@ -5,6 +5,8 @@ public enum DbType { MySQL("mysql"), //达梦数据库 Dameng("dm"), + //达梦数据库 + DM_DBMS("dm"), //人大金仓数据库 KingbaseES("pgsql"), //PostgreSQL数据库 @@ -28,7 +30,7 @@ public enum DbType { */ public static DbType of(String productName) { for (DbType value : DbType.values()) { - if (value.name().equalsIgnoreCase(productName)) { + if (value.name().equalsIgnoreCase(productName.replace(" ","_"))) { return value; } } diff --git a/src/main/resources/dm/create_table_sequences.sql b/src/main/resources/dm/create_table_sequences.sql index 7f92767..8b67106 100644 --- a/src/main/resources/dm/create_table_sequences.sql +++ b/src/main/resources/dm/create_table_sequences.sql @@ -3,24 +3,11 @@ CREATE TABLE IF NOT EXISTS "sequences" "key" VARCHAR(64) NOT NULL, "type" VARCHAR(64) NOT NULL, "seq" BIGINT NOT NULL, - "update_time" TIMESTAMP, + "update_time" TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY ("key", "type") ); COMMENT ON TABLE "sequences" IS '当前序号表'; COMMENT ON COLUMN "sequences"."key" IS '序号英文名称'; COMMENT ON COLUMN "sequences"."type" IS '序号类型'; COMMENT ON COLUMN "sequences"."seq" IS '已使用到的序号'; -COMMENT ON COLUMN "sequences"."update_time" IS '最后使用时间'; - -/* -@触发器设置,功能:自动记录更新时间 -@触发器名为 SEQUENCES_UPDATE_TIME -@触发器执行范围为每行生效 -*/ -CREATE OR REPLACE TRIGGER SEQUENCES_UPDATE_TIME BEFORE UPDATE ON "sequences" FOR EACH ROW -BEGIN - NEW."update_time":=SYSDATE; -END; - -/*启动触发器*/ -ALTER TRIGGER SEQUENCES_UPDATE_TIME ENABLE; \ No newline at end of file +COMMENT ON COLUMN "sequences"."update_time" IS '最后使用时间'; \ No newline at end of file diff --git a/src/test/java/SeqTest.java b/src/test/java/SeqTest.java index 29b4d1b..cebc089 100644 --- a/src/test/java/SeqTest.java +++ b/src/test/java/SeqTest.java @@ -5,10 +5,12 @@ import com.yanghuanglin.seq.config.TableConfig; import com.yanghuanglin.seq.generator.Generator; import com.yanghuanglin.seq.generator.impl.SequencesGenerator; import com.yanghuanglin.seq.po.Sequences; +import dm.jdbc.driver.DmdbDataSource; import org.junit.Test; import org.postgresql.ds.PGSimpleDataSource; import javax.sql.DataSource; +import java.sql.DatabaseMetaData; import java.util.HashSet; import java.util.Set; import java.util.concurrent.ArrayBlockingQueue; @@ -24,7 +26,7 @@ public class SeqTest { private static final Generator generator; static { - dataSource = mysql(); + dataSource = dm(); GeneratorConfig generatorConfig = new GeneratorConfig(dataSource); System.out.println("DbType: " + generatorConfig.getDbType()); @@ -65,6 +67,14 @@ public class SeqTest { return pgDataSource; } + private static DataSource dm() { + DmdbDataSource dmdbDataSource = new DmdbDataSource(); + dmdbDataSource.setURL("jdbc:dm://127.0.0.1:5236?schema=sequence"); + dmdbDataSource.setUser("SYSDBA"); + dmdbDataSource.setPassword("SYSDBA"); + return dmdbDataSource; + } + @Test public void createTable() { generator.createTable(); @@ -137,6 +147,7 @@ public class SeqTest { @Test public void lockTest() { + generator.generate("0010001$distrainCode2024","MISSION"); Sequences sequences = new Sequences(); sequences.setKey("0010001$distrainCode2024"); sequences.setType("MISSION");