Wenn ich diesen Teil des Codes ausführen, gibt es mir eine SQLException. Alle MySQL-Informationen sind korrekt, genauso wie der Code, den ich genau in einer anderen Klasse verwendet habe, aber ich habe nur etwas anderes abgefragt und es hat gut funktioniert. HierSQLException Nach Ende der Ergebnismenge
ist der Stack-Trace
[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)
Hier ist der Code
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;
}
}
}
Der letzte Anruf funktioniert nicht wegen result.hasNext() nicht vorhanden. –
Oh richtig! Ich nahm an, dass es eine hasNext-Methode hätte, aber es sollte genauso sein wie in der ersten while-Schleife. aktualisiert die Antwort –
Eine weitere Sache aus Neugier, warum werden Sie zuerst zählen und dann Limit basierend auf zählen? Ich meine, wenn Sie direkt SELECT * FROM Tickets ORDER BY Date DESC LIMIT 5; Dies würden Sie nur 5 bekommen, wenn es mehr als 5 gibt und wenn es weniger als 5 gibt, werden Sie so viele bekommen. Es sieht für mich wie ein Overkill aus. Wenn es 2 Zeilen gibt und Sie Limit 5 setzen, erhalten Sie immer noch 2 rows. –