sql - h2 org.h2.jdbc.JdbcSQLSyntaxErrorException 在h2数据库中执行脚本文件时出现

标签 sql database jdbc utf-8 h2

我使用了java -cp h2-1.4.199.jar org.h2.tools.RunScript -url jdbc:h2:mem:db1 -script infra_params.sql命令来执行下面的sql脚本在 H2 数据库中。

infra_params.sql 文件:-

DROP TABLE IF EXISTS `infrastructure_parameter`;

CREATE TABLE `infrastructure_parameter` (
`id` varchar(36) NOT NULL,
`created_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`NAME` varchar(255) DEFAULT NULL,
`PROPERTIES` varchar(255) DEFAULT NULL,
`ready` tinyint(1) DEFAULT '0',
`TYPE` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `UNQ_infrastructure_parameter_0` (`NAME`,`PROPERTIES`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8;

LOCK TABLES `infrastructure_parameter` WRITE;

但它给出了以下异常:-

Exception in thread "main" org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "

LOCK[*] TABLES `INFRASTRUCTURE_PARAMETER` WRITE "; SQL statement:


LOCK TABLES `infrastructure_parameter` WRITE [42000-199]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:451)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:427)
at org.h2.message.DbException.get(DbException.java:205)
at org.h2.message.DbException.get(DbException.java:181)
at org.h2.message.DbException.getSyntaxError(DbException.java:229)
at org.h2.command.Parser.getSyntaxError(Parser.java:989)
at org.h2.command.Parser.parsePrepared(Parser.java:951)
at org.h2.command.Parser.parse(Parser.java:788)
at org.h2.command.Parser.parse(Parser.java:764)
at org.h2.command.Parser.prepareCommand(Parser.java:683)
at org.h2.engine.Session.prepareLocal(Session.java:627)
at org.h2.engine.Session.prepareCommand(Session.java:565)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1292)
at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:217)
at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:205)
at org.h2.tools.RunScript.process(RunScript.java:261)
at org.h2.tools.RunScript.process(RunScript.java:192)
at org.h2.tools.RunScript.process(RunScript.java:328)
at org.h2.tools.RunScript.runTool(RunScript.java:143)
at org.h2.tools.RunScript.main(RunScript.java:70)

如能提供有关如何解决此问题的任何帮助,我们将不胜感激。

最佳答案

LOCK TABLES 是 MySQL 特定的命令,H2 不支持它。

您需要将其从您的文件中删除。

如果你确实需要在MySQL和H2中使用相同的脚本,并且在MySQL中需要这个命令,你可以尝试把它包装成executable comment .与其他数据库不同,MySQL 在 /*! ... */ 注释。

/*!锁定表`infrastructure_parameter`写入; */

关于sql - h2 org.h2.jdbc.JdbcSQLSyntaxErrorException 在h2数据库中执行脚本文件时出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57428139/

相关文章:

java - 结果集导航是否取决于所使用的驱动程序类型?

java - 使用 JDBC URL 连接到数据库

sql - 如何组合 Count 和 Min 函数

sql - 需要查询以不同的方式显示数据

php - 如何链接单个表中的多行 - MySql

sql - 数据库:在 "has a"关系中将外键放在哪里?

Java JTable 不显示 MySQL 中的所有行

sql - SQL 读取可以返回陈旧数据吗?

sql - 连接具有不同行数的两个表(在 sql server 中)

sql - 如何从其他数据库记录引用特定表列?