在學習java注解的過程中有過動態DDL的操作(根據java結構類生成SQL語句)
在這期間用到了注解
@Table(value = "user",deleteBefore = true)
deleteBefore指創建表前是否刪除
若deleteBefore為false生成的string sql為
CREATE TABLE user(
uid VARCHAR(50),
name VARCHAR(30),
age INTEGER,
salary FLOAT,
CONSTRAINT PRIMARY KEY(uid)
) engine=INNODB;
若deleteBefore為True生成的string sql為
DROP TABLE IF EXISTS user;
CREATE TABLE user(
uid VARCHAR(50),
name VARCHAR(30),
age INTEGER,
salary FLOAT,
CONSTRAINT PRIMARY KEY(uid)
) engine=INNODB;
當deleteBefore 為true時多了DROP TABLE IF EXISTS user;
sql執行語句為:
public void Execute(String sql){
try {
PreparedStatement preparedStatement = this.connection.prepareStatement(sql);
preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
close();
}
}
當deleteBefore=false時,可以正常執行
當deleteBefore=true在使用prepareStatement時此語句報了以下錯誤

解決方法:
mysql默認的批處理語句為false只需在URL后面添加allowMultiQueries=true
private static final String URL = "jdbc:mysql://localhost:3306/database?useSSL=false&serverTimezone=UTC&allowMultiQueries=true";
即可正常運行
