このコードを実行するとSQLExceptionが発生します。 MySQLの情報はすべて正しいですが、私は別のクラスで正確に使用したコードですが、何か他のものを照会するだけで正常に動作しました。SQLException結果セットの終了後
はここでここでスタックトレース
[23:24:06 WARN]: java.sql.SQLException: After end of result set
[23:24:06 WARN]: at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963)
[23:24:06 WARN]: at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896)
[23:24:06 WARN]: at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885)
[23:24:06 WARN]: at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
[23:24:06 WARN]: at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:790)
[23:24:06 WARN]: at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2472)
[23:24:06 WARN]: at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2583)
[23:24:06 WARN]: at me.Austin.MT.RecentTickets.recentTickets(RecentTickets.java:47)
[23:24:06 WARN]: at me.Austin.MT.GUIs.AdminGUIManager.onInvClick(AdminGUIManager.java:94)
[23:24:06 WARN]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[23:24:06 WARN]: at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
[23:24:06 WARN]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
[23:24:06 WARN]: at java.lang.reflect.Method.invoke(Unknown Source)
[23:24:06 WARN]: at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302)
[23:24:06 WARN]: at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
[23:24:06 WARN]: at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502)
[23:24:06 WARN]: at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487)
[23:24:06 WARN]: at net.minecraft.server.v1_11_R1.PlayerConnection.a(PlayerConnection.java:1844)
[23:24:06 WARN]: at net.minecraft.server.v1_11_R1.PacketPlayInWindowClick.a(SourceFile:33)
[23:24:06 WARN]: at net.minecraft.server.v1_11_R1.PacketPlayInWindowClick.a(SourceFile:10)
[23:24:06 WARN]: at net.minecraft.server.v1_11_R1.PlayerConnectionUtils$1.run(SourceFile:13)
[23:24:06 WARN]: at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
[23:24:06 WARN]: at java.util.concurrent.FutureTask.run(Unknown Source)
[23:24:06 WARN]: at net.minecraft.server.v1_11_R1.SystemUtils.a(SourceFile:46)
[23:24:06 WARN]: at net.minecraft.server.v1_11_R1.MinecraftServer.D(MinecraftServer.java:739)
[23:24:06 WARN]: at net.minecraft.server.v1_11_R1.DedicatedServer.D(DedicatedServer.java:399)
[23:24:06 WARN]: at net.minecraft.server.v1_11_R1.MinecraftServer.C(MinecraftServer.java:675)
[23:24:06 WARN]: at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:574)
[23:24:06 WARN]: at java.lang.Thread.run(Unknown Source)
はあなたが必要以上インチ以上)(result.nextを呼び出しているようなコード
public class RecentTickets {
public static HashMap<Integer, String> rTickets = new HashMap<>();
/*
* TODO: Return the most 5 recent
*
*
*/
/**
* RecentTickers Class - Returns the recent tickets
*
* @param p Player that runs the command
* @return The 5 most recent tickets
* @throws SQLException Just in case MySQL wants to be a dick
*/
public static HashMap<Integer, String> recentTickets(Player p) throws SQLException {
rTickets.clear();
int t = 0;
Statement statement = MySQL.getConnection().createStatement();
ResultSet r2 = statement
.executeQuery("SELECT COUNT(*) FROM tickets ORDER BY Date DESC;");
while (r2.next()) {
t = r2.getInt(1);
}
if (t > 5) {
ResultSet result = statement.executeQuery("SELECT * FROM tickets ORDER BY Date DESC LIMIT 5;");
result.next();
int i;
for (i = 0; i < t; i++) {
rTickets.put(result.getInt("TicketID"), result.getString("UUID"));
result.next();
}
return rTickets;
} else {
ResultSet result = statement.executeQuery(
"SELECT * FROM tickets ORDER BY Date DESC LIMIT " + t + ";");
result.next();
int i;
for (i = 0; i < t; i++) {
rTickets.put(result.getInt("TicketID"), result.getString("UUID"));
result.next();
}
return rTickets;
}
}
}
result.hasNext()が存在しないため、最後の呼び出しは機能しません。 –
ああそう!私はhasNextメソッドを持っていると仮定しましたが、最初のwhileループと同じ方法であったはずです。回答を更新しました –
好奇心からもう1つ、最初にカウントを取得してから、カウントに基づいて制限を設定していますか?つまり、SELECT * FROMチケットをORDER BY日付DESC LIMIT 5で直接実行するとします。 5人以上がいるときには5人にしかならず、5人に満たない人は5人になるでしょう。それは私に過労のように見えます。 2行があり、5を置くと、2行しか得られません。 –