【发布时间】:2016-02-15 11:39:02
【问题描述】:
所以我有一个方法可以返回我得到的项目名称。但是对于第一个查询,它会返回一个错误。我认为不应该存在,因为它的语法正确。代码如下:
void showInventory(String userId, MessageReceivedEvent event) throws HTTP429Exception, DiscordException,
MissingPermissionsException{
sendMessage("test0",event);
String sql = "SELECT itemID FROM inventory WHERE playerID=?";
String sql2 = "SELECT Name FROM items WHERE ID=?";
java.sql.PreparedStatement state;
java.sql.PreparedStatement state2;
try {
state = Main.conn.prepareStatement(sql);
state2 = Main.conn.prepareStatement(sql2);
state.setString(1, userId);
ResultSet results = state.executeQuery(sql);
ResultSet resultname = null;
String invent = "";
sendMessage("test",event);
while(results.next()){
sendMessage("test1",event);
int result = results.getInt("itemID");
state2.setInt(1, result);
resultname = state2.executeQuery(sql2);
while(resultname.next()){
String name = resultname.getString("Name");
invent += (name + "\n");
}
}
sendMessage(invent, event);
} 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 '?' 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:404)
at com.mysql.jdbc.Util.getInstance(Util.java:387)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:939)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2547)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2505)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1370)
at martacus.mart.bot.rpg.InventoryHandler.showInventory(InventoryHandler.java:48)
at martacus.mart.bot.rpg.InventoryHandler.OnMesageEvent(InventoryHandler.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sx.blah.discord.handle.EventDispatcher.dispatch(EventDispatcher.java:104)
at sx.blah.discord.api.internal.DiscordWS.messageCreate(DiscordWS.java:323)
at sx.blah.discord.api.internal.DiscordWS.onMessage(DiscordWS.java:144)
at org.java_websocket.client.WebSocketClient.onWebsocketMessage(WebSocketClient.java:312)
at org.java_websocket.WebSocketImpl.decodeFrames(WebSocketImpl.java:368)
at org.java_websocket.WebSocketImpl.decode(WebSocketImpl.java:157)
at org.java_websocket.client.WebSocketClient.interruptableRun(WebSocketClient.java:230)
at org.java_websocket.client.WebSocketClient.run(WebSocketClient.java:188)
at java.lang.Thread.run(Unknown Source)
错误是关于第一个名为 sql 的字符串。调用方式:
ResultSet results = state.executeQuery(sql);
【问题讨论】:
-
playerId 是数据库中的 VARCHAR 还是 int?
-
我没有看到类似:USE DATABASENAME,或者你不显示为这个?
-
可能在课堂上
Main@AdamKortylewicz -
为什么你又把查询传递给
state.executeQuery(sql);,因为PreparedStatementobj 已经用查询创建了。 -
是的 playerID 是一个 varchar,建立的连接是在 Main 类中是的 @AdamKortylewicz 是的,Satya jan 也解释了,谢谢 :)
标签: java mysql sql function jdbc