4 Commits

Author SHA1 Message Date
杨黄林
0c737b5449 版本号更新为1.13.1 2026-02-28 14:05:57 +08:00
杨黄林
9a018b6af9 修复达梦数据库下自动创建表时不会自动变更更新时间问题 2026-02-28 14:03:58 +08:00
杨黄林
64724de96c 修复pgsql自动创建sql失败问题 2026-01-14 17:45:36 +08:00
杨黄林
8321032918 去掉GBase8c,这个没自己的连接,它的连接是pgsql 2026-01-14 16:42:19 +08:00
9 changed files with 36 additions and 24 deletions

View File

@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.yanghuanglin</groupId> <groupId>com.yanghuanglin</groupId>
<artifactId>seq</artifactId> <artifactId>seq</artifactId>
<version>1.13.0</version> <version>1.13.1</version>
<name>seq</name> <name>seq</name>
<description>seq</description> <description>seq</description>
<properties> <properties>

View File

@@ -7,10 +7,12 @@ import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import org.springframework.jdbc.datasource.init.ScriptUtils;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.io.*; import java.io.*;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Objects;
public abstract class SequencesBase { public abstract class SequencesBase {
protected DbType dbType; protected DbType dbType;
@@ -61,6 +63,13 @@ public abstract class SequencesBase {
} }
InputStream inputStream = new ByteArrayInputStream(sql.getBytes(StandardCharsets.UTF_8)); InputStream inputStream = new ByteArrayInputStream(sql.getBytes(StandardCharsets.UTF_8));
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(new InputStreamResource(inputStream)); ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(new InputStreamResource(inputStream));
if (Objects.equals(dbType.getSeries(), DbType.DM_DBMS.getSeries()) && fileName.endsWith("trigger.sql")) {
// 触发器文件不要通过;分隔,整个文件一起执行
databasePopulator.setSeparator(ScriptUtils.EOF_STATEMENT_SEPARATOR);
} else if (Objects.equals(dbType.getSeries(), DbType.PostgreSQL.getSeries()) && fileName.endsWith("function.sql")) {
// 函数文件不要通过;分隔,整个文件一起执行
databasePopulator.setSeparator(ScriptUtils.EOF_STATEMENT_SEPARATOR);
}
databasePopulator.execute(dataSource); databasePopulator.execute(dataSource);
} catch (IOException e) { } catch (IOException e) {
System.err.println("执行SQL文件" + fileName + "失败"); System.err.println("执行SQL文件" + fileName + "失败");

View File

@@ -7,6 +7,8 @@ import com.yanghuanglin.seq.po.Sequences;
import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import java.util.Objects;
/** /**
* @author yanghuanglin * @author yanghuanglin
@@ -56,5 +58,11 @@ public class SequencesDaoImpl extends SequencesBase implements SequencesDao {
@Override @Override
public void createTable() { public void createTable() {
this.createTableByFile("create_table_sequences.sql"); this.createTableByFile("create_table_sequences.sql");
if (Objects.equals(dbType.getSeries(), DbType.DM_DBMS.getSeries())) {
this.createTableByFile("create_table_sequences_trigger.sql");
} else if (Objects.equals(dbType.getSeries(), DbType.PostgreSQL.getSeries())) {
this.createTableByFile("create_table_sequences_function.sql");
this.createTableByFile("create_table_sequences_trigger.sql");
}
} }
} }

View File

@@ -7,8 +7,6 @@ public enum DbType {
DM_DBMS("dm"), DM_DBMS("dm"),
//人大金仓数据库 //人大金仓数据库
KingbaseES("pgsql"), KingbaseES("pgsql"),
//南大通用GBase8c
GBase8c("pgsql"),
//PostgreSQL数据库 //PostgreSQL数据库
PostgreSQL("pgsql"); PostgreSQL("pgsql");

View File

@@ -0,0 +1,8 @@
CREATE OR REPLACE TRIGGER "SEQUENCES_UPDATE_TIME"
BEFORE UPDATE
ON "sequences"
referencing OLD ROW AS "OLD" NEW ROW AS "NEW"
FOR EACH ROW
BEGIN
:NEW."UPDATE_TIME" := CURRENT_TIMESTAMP;
END;

View File

@@ -3,6 +3,6 @@ CREATE TABLE IF NOT EXISTS `sequences`
`key` VARCHAR(64) NOT NULL COMMENT '序号英文名称', `key` VARCHAR(64) NOT NULL COMMENT '序号英文名称',
`type` VARCHAR(64) NOT NULL COMMENT '序号类型', `type` VARCHAR(64) NOT NULL COMMENT '序号类型',
`seq` BIGINT(20) NOT NULL COMMENT '已使用到的序号', `seq` BIGINT(20) NOT NULL COMMENT '已使用到的序号',
`update_time` DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '最后使用时间', `update_time` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后使用时间',
PRIMARY KEY (`key`, `type`) PRIMARY KEY (`key`, `type`)
) COMMENT '当前序号表'; ) COMMENT '当前序号表';

View File

@@ -11,22 +11,3 @@ COMMENT ON COLUMN "sequences"."key" IS '序号英文名称';
COMMENT ON COLUMN "sequences"."type" IS '序号类型'; COMMENT ON COLUMN "sequences"."type" IS '序号类型';
COMMENT ON COLUMN "sequences"."seq" IS '已使用到的序号'; COMMENT ON COLUMN "sequences"."seq" IS '已使用到的序号';
COMMENT ON COLUMN "sequences"."update_time" IS '最后使用时间'; COMMENT ON COLUMN "sequences"."update_time" IS '最后使用时间';
/*
触发器函数用户更新update_time字段
*/
CREATE OR REPLACE FUNCTION SEQUENCES_UPDATE_TIME() RETURNS TRIGGER AS $$
BEGIN
NEW."update_time" := current_timestamp;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
/*
@触发器设置,功能:自动记录更新时间
@触发器名为 SEQUENCES_UPDATE_TIME
@触发器执行范围为每行生效
*/
DROP TRIGGER IF EXISTS SEQUENCES_UPDATE_TIME ON "sequences" CASCADE;
CREATE TRIGGER SEQUENCES_UPDATE_TIME BEFORE UPDATE ON "sequences" FOR EACH ROW EXECUTE FUNCTION SEQUENCES_UPDATE_TIME();

View File

@@ -0,0 +1,6 @@
CREATE OR REPLACE FUNCTION SEQUENCES_UPDATE_TIME() RETURNS TRIGGER AS $$
BEGIN
NEW."update_time" := current_timestamp;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

View File

@@ -0,0 +1,2 @@
DROP TRIGGER IF EXISTS SEQUENCES_UPDATE_TIME ON "sequences" CASCADE;
CREATE TRIGGER SEQUENCES_UPDATE_TIME BEFORE INSERT OR UPDATE ON "sequences" FOR EACH ROW EXECUTE PROCEDURE SEQUENCES_UPDATE_TIME();