【问题标题】:Java MySQL SyntaxErrorExceptionJava MySQL 语法错误异常
【发布时间】:2015-12-29 06:15:48
【问题描述】:

大家! 我正在尝试使用 java 创建一个数据库。 这是代码

public void createDatabase(String user, String password) {
    String query = "CREATE DATABASE IF NOT EXISTS Contacts;use Contacts;CREATE TABLE IF NOT EXISTS info(first_name TEXT,surname TEXT,login TEXT,email TEXT,phone_number INT NOT NULL primary key)";
    Connection connection = createConnection(user, password);
        try {
        Statement statement = connection.createStatement();
        int result = statement.executeUpdate(query);
        System.out.println("Database is ready for use");
    } catch (SQLException e1) {
        e1.printStackTrace();
    }
finally {
        if (connection != null)
            try {
                connection.close();
                System.out.println("Connection closed");
            } catch (SQLException e) {
                e.printStackTrace();
            }

运行后我得到

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error  in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'use Contacts;CREATE TABLE IF NOT EXISTS info(first_name TEXT,surname TEXT,login ' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:400)
at com.mysql.jdbc.Util.getInstance(Util.java:383)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:980)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3847)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3783)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2447)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2594)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2541)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1604)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1535)
at task.DatabaseManager.createDatabase(DatabaseManager.java:28)
at task.Test.main(Test.java:14)
Connection closed

数据库已创建,但表尚未创建。所以问题出在某个地方。还有一件事。当我将此查询粘贴到 MySQL Workbench 并执行它时,它可以完美运行并创建我需要的一切。

【问题讨论】:

  • 你的 sql 查询中的“info”关键字是什么?以前没见过。
  • 顺便说一句,当您在单个查询中进行多项更改时,请始终将整个查询放入事务中以防止更改不完整。
  • @Timofey:不确定 MySQL,但并非所有数据库(例如 Oracle)都允许在事务中使用 DDL。
  • @Timofey 不是关键字,是我数据库中的表名

标签: java mysql mysql-workbench


【解决方案1】:

做一个批处理:

        String[] sqlStatements = new String[] {
                "CREATE DATABASE IF NOT EXISTS Contacts",
                "use Contacts",
                "CREATE TABLE IF NOT EXISTS info(first_name TEXT,surname TEXT,login TEXT,email TEXT,phone_number INT NOT NULL primary key)" };
        Connection connection = null;
        try {
            connection = createConnection(user, password);
            Statement statement = connection.createStatement();
            for (String sqlStatement : sqlStatements) {
                statement.addBatch(sqlStatement);
            }
            int[] result = statement.executeBatch();
            for (int i = 0; i < result.length; i++) {
                System.out.println(sqlStatements[i] + " - " + result[i]);
            }
            System.out.println(result);
            System.out.println("Database is ready for use");
        } catch (SQLException e1) {
            e1.printStackTrace();
        } finally {
            if (connection != null)
                try {
                    connection.close();
                    System.out.println("Connection closed");
                } catch (SQLException e) {
                    e.printStackTrace();
                }
        }

【讨论】:

    【解决方案2】:

    您的问题可能是由于您没有在数据库连接上设置多查询属性,所以它只执行第一条语句。尝试像这样修改数据库 url:

    jdbc:mysql:<your_url>?allowMultiQueries=true
    

    【讨论】:

    • 非常感谢!这就是问题所在。现在它可以正常工作了
    猜你喜欢
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 2017-09-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    相关资源
    最近更新 更多