如果表存在,删除表,然后创建它-语法在行创建



我只是想创建一个表,但是如果它存在,它需要被删除并重新创建。

使用MySQL 8.0.29

错误:

你有一个错误的SQL语法;查看手册对应于MySQL服务器版本,以便使用正确的语法附近的"创建表users(Id,名称varchar (100), lastNameVarchar (100), age tin在line 1

代码:

public static void main(String[] args) throws SQLException {

try (Connection connection = Util.getConnection()) {
String sqlCommand = "DROP TABLE IF EXISTS `users`;" +
"CREATE TABLE `users` (Id long, name varchar(100), lastName varchar(100), age tinyint)";
Statement statement = connection.createStatement();
statement.executeUpdate(sqlCommand);
System.out.println("table created");
int rows = statement.executeUpdate("INSERT users(Id,name,lastName,age) VALUES (101,'Mike','Manson',31)");            
}
}

原因可能如下:

  1. long不是一个有效的MySQL数据类型
  2. 变量sqlCommand包含多个语句。每个SQL语句都应该以分号结束。在CREATE语句的末尾添加分号可以解决您的问题。

默认情况下,JDBC驱动程序不支持在一个执行调用中使用多个SQL语句。有一个连接字符串选项来启用它:

https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-connp-props-security.html cj-conn-prop_allowMultiQueries

  • allowMultiQueries

    允许在一条语句中使用';'分隔多个查询。

但是没有很好的理由使用多查询。它们使您的代码更复杂,而不是更简单。允许多查询为SQL注入漏洞创造了机会,否则就不可能出现这种漏洞。见https://xkcd.com/327/

每次调用executeUpdate()只运行一条语句。

最新更新