我只是想创建一个表,但是如果它存在,它需要被删除并重新创建。
使用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)");
}
}
原因可能如下:
- long不是一个有效的MySQL数据类型
- 变量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()
只运行一条语句。