executeUpdate()抛出MySQLSyntaxErrorException

时间:2015-04-16 15:26:53

标签: java mysql jdbc

我的目标是在我创建的现有表中添加一个新行。但是,我收到以下错误。

  

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行的“名称,姓氏,电话号码”附近使用正确的语法。值(2056732,'Hello','World',3)'       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)       at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)       at java.lang.reflect.Constructor.newInstance(Constructor.java:408)       在com.mysql.jdbc.Util.handleNewInstance(Util.java:411)       在com.mysql.jdbc.Util.getInstance(Util.java:386)       在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053)       在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074)       在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006)       在com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2468)       在com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2629)       在com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2719)       在com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)       在com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2450)       在com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2371)       在com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2355)       在AddingNewRow.main(AddingNewRow.java:50)

这是代码的一部分。如果您需要整个代码以便找出问题所在,请告诉我。

Connection conn = null;
    PreparedStatement ps = null;

    Scanner in = new Scanner(System.in);

    System.out.print("Enter the student number: ");
    int studentNO = in.nextInt();
    System.out.print("Enter the first name: ");
    String fName = in.next();
    System.out.print("Enter the last name: ");
    String lName = in.next();
    System.out.print("Enter the telephone number: ");
    int telNO = in.nextInt();

    try {
        conn = DriverManager.getConnection(CONN_STRING, USERNAME, PASSWORD);
        System.out.println("Connected");

        //Executing a query
        String sql_query = "INSERT INTO registration (ID, First Name, Last Name, Tel No.) VALUES (?, ?, ?, ?)";
        System.out.println("Table found");

        ps = conn.prepareStatement(sql_query);
        ps.setInt(1, studentNO); 
        ps.setString(2, fName);
        ps.setString(3, lName);
        ps.setInt(4, telNO);
        System.out.println("Values added");

        ps.executeUpdate();
        System.out.println("Values updated");

    }
  

这是我运行程序时得到的输出

     

输入学号:1234567

     

输入名字:Hello

     

输入姓氏:世界

     

输入电话号码:123321

     

连接

     

找到表

     

添加值

     

... com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException

我知道这可能只是一个非常愚蠢的问题,但我刚刚开始使用数据库,即使在完成此处发布的大多数其他类似问题之后也无法弄清楚代码是否有问题。

如果有人能告诉我什么是错的,我将非常感激。提前谢谢。

3 个答案:

答案 0 :(得分:6)

试试这个

INSERT INTO registration (`ID`, `First Name`, `Last Name`, `Tel No.`) VALUES (?, ?, ?, ?)

包含backticks的列名。

答案 1 :(得分:4)

尝试替换

String sql_query = "INSERT INTO registration (ID, First Name, Last Name, Tel No.) VALUES (?, ?, ?, ?)";

String sql_query = "INSERT INTO registration (`ID`, `First Name`, `Last Name`, `Tel No.`) VALUES (?, ?, ?, ?)";

如果我是你,我会尽量避免使用表格和字段名称中的特殊字符和空格,因为这些是导致问题的原因。

答案 2 :(得分:1)

这可能是由您使用setString设置学生ID号码引起的。这将告诉准备好的语句它应该是一个字符串,而不是一个整数。此外,您可能需要在Tel No.字段周围放回标记。