设置 H2 数据库时出错

Posted

技术标签:

【中文标题】设置 H2 数据库时出错【英文标题】:Error When Setting up H2 Database 【发布时间】:2018-02-23 19:39:01 【问题描述】:

我在启动应用程序时遇到此错误,该应用程序在启动时会从表中读取一些数据:

org.h2.jdbc.JdbcSQLException: Unknown data type: "ENUM"; SQL statement:
CREATE CACHED TABLE PUBLIC.POWERPLANT(
    POWERPLANTID INT NOT NULL,
    ORGNAME VARCHAR(25) NOT NULL,
    ISACTIVE BOOL NOT NULL,
    MINPOWER INT NOT NULL,
    MAXPOWER INT NOT NULL,
    RAMPRATE INT,
    RAMPRATESECS INT,
    POWERPLANTTYPE ENUM('OnOffType','RampUpType'),
    CREATEDAT TIMESTAMP NOT NULL,
    UPDATEDAT TIMESTAMP NOT NULL
) [50004-186]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
    at org.h2.message.DbException.get(DbException.java:179)
    at org.h2.message.DbException.get(DbException.java:155)
    at org.h2.command.Parser.parseColumnWithType(Parser.java:3990)
    at org.h2.command.Parser.parseColumnForTable(Parser.java:3853)
    at org.h2.command.Parser.parseCreateTable(Parser.java:5761)
    at org.h2.command.Parser.parseCreate(Parser.java:4149)
    at org.h2.command.Parser.parsePrepared(Parser.java:350)
    at org.h2.command.Parser.parse(Parser.java:305)
    at org.h2.command.Parser.parse(Parser.java:277)

这是我的连接字符串:

db.url = "jdbc:h2:~/path/to/db/file;MODE=mysql;INIT=CREATE DOMAIN IF NOT EXISTS enum as VARCHAR(255);IFEXISTS=TRUE"

你知道如何解决这个问题吗?

【问题讨论】:

【参考方案1】:

我通过将 h2 Maven 库版本更新为 1.4.200 而不是 1.4 解决了同样的问题。 187

【讨论】:

【参考方案2】:

这是我解决它的方法。 Enum类型应该这样写!

powerPlantType   VARCHAR(25) check (powerPlantType in ('OnOffType', 'RampUpType')),

【讨论】:

以上是关于设置 H2 数据库时出错的主要内容,如果未能解决你的问题,请参考以下文章

更新表时 H2 数据库“重命名文件时出错”

H2 数据库:在 CTE 中使用窗口函数时出错

在数据库中使用带有 H2 的 Hibernate 时出错

尝试从 h2 数据库中检索 json 数据时出错

将 Lucene 与 H2 数据库一起使用时出错

从内存数据库中的 H2 切换到 SQL Server 时出错