首页 > 解决方案 > 无法使用 java 驱动程序发出简单的 SQL 请求,但在 mysql 控制台中工作正常

问题描述

所以我想对我的 MariaDB 服务器做一个简单的 SQL 查询来删除数据库(我知道这可能不是最好的方法)。这是执行此操作的一段代码:

public static void cleanDatabase() {
    try {
      Connection con = DriverManager.getConnection("myurl", "username", "password"); // replaced by real values
      Statement stmt = con.createStatement();
      stmt.executeUpdate("DROP DATABASE statuer_test; CREATE SCHEMA IF NOT EXISTS statuer_test DEFAULT CHARACTER SET utf8;");
      con.close();
    } catch (Exception e)  {
      e.printStackTrace();
      System.err.println("cleanDatabse(): error");
    }
  }

这是我调用 cleanDatabase() 方法时得到的结果:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'CREATE SCHEMA IF NOT EXISTS statuer_test DEFAULT CHARACTER SET utf8' at line 1
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
(more lines...)

但是,当我使用 mysql cli 客户端时,这完全有效:

MariaDB [(none)]> CREATE SCHEMA IF NOT EXISTS statuer_test DEFAULT CHARACTER SET utf8;
Query OK, 0 rows affected, 1 warning (0.000 sec)

那么我在这里缺少什么?

标签: javajdbcmariadb

解决方案


Seem to work with that code, so resolved:

stmt.executeUpdate("DROP DATABASE statuer_test");
stmt.executeUpdate("CREATE SCHEMA IF NOT EXISTS statuer_test DEFAULT CHARACTER SET utf8");

推荐阅读