SQL查询语法错误

时间:2017-08-06 05:14:26

标签: java sql jdbc

        Class.forName("com.mysql.jdbc.Driver");
        Connection con=DriverManager.getConnection("jdbc:mysql://localhost/exam","root","password");
        String q="insert into group"
         +"(gname,des)" 
        +"values(?,?)";

        PreparedStatement p=con.prepareStatement(q);
        p.setString(1,gname);
        p.setString(2,des); 
        p.executeUpdate();
        con.close();

这是我添加群组的代码。但错误说我的查询语法错误。我已经在我的表中尝试过使用单核的单核,但仍然遇到了这个错误。首先我使用的create语句也给出了同样的错误。请告诉我们这个查询有什么问题?

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 'group(gname,des)values('Science','')' at line 1
    sun.reflect.GeneratedConstructorAccessor16.newInstance(Unknown Source)
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    com.mysql.jdbc.Util.getInstance(Util.java:408)
    com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
    com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
    com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
    com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2490)
    com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
    com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079)
    com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013)
    com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104)
    com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998)
    org.apache.jsp.groupreg_jsp._jspService(groupreg_j

2 个答案:

答案 0 :(得分:4)

您的查询在删除代码中的换行符之后是:

insert into group(gname,des)values(?,?)

换句话说,您正在尝试插入名为group的表中。这是不允许的,因为GROUP是MySQL中的保留字。

来自the manual

  

表中的大多数保留字都被标准SQL禁止为列或表名(例如,GROUP)。

你需要选择一个不同的表名(推荐)或用反引号包围单词group,如下所示:

INSERT INTO `group` (gname, des) VALUES (?, ?)

请参阅Schema Object Names上的手册条目。

另外,请确保您有合适的空间;你现在缺乏间距会在很多情况下造成额外的问题。

答案 1 :(得分:0)

您可以在Java中以适当的间距在一行中编写完整的查询,而不是SQL编写查询的方式。您应该能够确定第一个错误是间距。这可以通过此(您已经使用过的)来纠正:

String q = "insert into group"
          +"(gname,des)" 
          +"values(?,?)";

到此(修改后的查询):

String q = "insert into group (gname, des) values(?, ?)";

上述更改一旦进行,使其可读。正如@EdCottrell正确指出的那样,不要使用受限制的关键字作为表名。根据数据库类型,可能存在与此相关的问题。

希望这有帮助!