在学习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";
即可正常运行