我使用 H2 数据库和 MySQL 模式。
有一个要求:
CREATE TABLE `warps` (
`id` INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL,
`creator` varchar(32) NOT NULL,
`world` varchar(32) NOT NULL,
`welcomeMessage` varchar(100) NOT NULL,
`position` TEXT NOT NULL,
`invitedPlayers` TEXT NOT NULL,
`blacklist` TEXT NOT NULL,
`publicAll` boolean NOT NULL,
`visits` int NOT NULL DEFAULT 0
);
有一个代码可以做到这一点:
private void checkTable() {
this.connection = this.getConnection();
try (PreparedStatement ps = this.connection.prepareStatement(CREATE_TABLE_QUERY)) {
ps.execute();
} catch (SQLException ex) {
this.logger.error("Error creating/check table in database.", ex);
}
}
private Connection getConnection() {
try {
if ((this.connection == null) || (this.connection.isClosed())) {
reconnect();
}
} catch (SQLException e) {
logger.error(e.getMessage(), e);
}
return this.connection;
}
private void reconnect() throws SQLException {
if (this.connection != null) {
this.connection.close();
}
this.connection = this.openConnection();
}
private Connection openConnection() throws SQLException {
return DriverManager.getConnection("jdbc:h2://" + this.plugin.getConfDir().toString() + File.separatorChar + "warps" + ";mode=MySQL", "User", "");
}
结果我得到一个错误:
org.h2.jdbc.JdbcSQLException: Синтаксическая ошибка в выражении SQL "CREATE TABLE IF NOT EXISTS ""WARPS"" (""ID"" INT PRIMARY KEY NOT NULL AUTO_INCREMENT[*], ""NAME"" VARCHAR(32) NOT NULL, ""CREATOR"" VARCHAR(32) NOT NULL, ""WORLD"" VARCHAR(32) NOT NULL, ""WELCOMEMESSAGE"" VARCHAR(100) NOT NULL, ""POSITION"" TEXT NOT NULL, ""INVITEDPLAYERS"" TEXT NOT NULL, ""BLACKLIST"" TEXT NOT NULL, ""PUBLICALL"" BOOLEAN NOT NULL,""VISITS"" INT NOT NULL DEFAULT 0); "; ожидалось "CHECK, REFERENCES, ,, )"
Syntax error in SQL statement "CREATE TABLE IF NOT EXISTS ""WARPS"" (""ID"" INT PRIMARY KEY NOT NULL AUTO_INCREMENT[*], ""NAME"" VARCHAR(32) NOT NULL, ""CREATOR"" VARCHAR(32) NOT NULL, ""WORLD"" VARCHAR(32) NOT NULL, ""WELCOMEMESSAGE"" VARCHAR(100) NOT NULL, ""POSITION"" TEXT NOT NULL, ""INVITEDPLAYERS"" TEXT NOT NULL, ""BLACKLIST"" TEXT NOT NULL, ""PUBLICALL"" BOOLEAN NOT NULL,""VISITS"" INT NOT NULL DEFAULT 0); "; expected "CHECK, REFERENCES, ,, )"; SQL statement:
CREATE TABLE IF NOT EXISTS `warps` (`id` INT PRIMARY KEY NOT NULL AUTO_INCREMENT, `name` varchar(32) NOT NULL, `creator` varchar(32) NOT NULL, `world` varchar(32) NOT NULL, `welcomeMessage` varchar(100) NOT NULL, `position` TEXT NOT NULL, `invitedPlayers` TEXT NOT NULL, `blacklist` TEXT NOT NULL, `publicAll` boolean NOT NULL,`visits` INT NOT NULL DEFAULT 0); [42001-196]
尝试更改属性的顺序。例如