我正在为Bungeecord(Java)的Minecraftserver编写一个全局bansystem。当一名被禁赛的球员试图加入时,他应该被踢出理由。我试图从MySQL表中找到原因。
这是重要的代码:
PreparedStatement psn = null;
psn = Methoden.getConnection()
.prepareStatement("SELECT Grund FROM BanList WHERE Name = '" + pn + "'");
if (psn != null) {
ResultSet rsn = psn.executeQuery();
// JDBC4ResultSet rsn = (JDBC4ResultSet) psn.executeQuery();
if (rsn.next() == true) {
ev.setCancelReason(
"2474[2476Minepedia2474]n247bDu wurdest aus folgendem Grund gebannt:n247c"
+ rsn.toString()
+ "n247bWenn du denkst, dass es ein Versehen war, dann schreib bitte eine Email an 247cminepedia@web.de247b!");
ev.setCancelled(true);
}
}
不管我使用ResultSet还是JDBC4ResultSet,我总是得到com.mysql.jdbc.JDBC4ResultSet@65cda838
。
将.toString()
方法应用于ResultSet对象将返回ResultSet对象本身的字符串表示,而不是ResultSet的内容。在您的情况下,ResultSet对象的字符串表示形式为"com.mysql.jdbc.JDBC4ResultSet@65cda838".
您将希望使用rsn.getString(1)
或rsn.getString("Grund")
来检索执行rsn.next()
时返回的值。
顺便说一句,您也错误地使用了PreparedStatement。你应该做
prepareStatement("SELECT Grund FROM BanList WHERE Name = ?);
然后是
psn.setString(1, pn);
在进行.executeQuery()
之前。