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
答案 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正确指出的那样,不要使用受限制的关键字作为表名。根据数据库类型,可能存在与此相关的问题。
希望这有帮助!