我正在为Bungeecord的Minecraft服务器(用Java编写)编写全局禁用系统。当被禁止的球员试图加入时,他应该被踢出原因。我试图从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[\2476Minepedia\2474]\n\247bDu wurdest aus folgendem Grund gebannt:\n\247c"
+ rsn.toString()
+ "\n\247bWenn du denkst, dass es ein Versehen war, dann schreib bitte eine Email an \247cminepedia@web.de\247b!");
ev.setCancelled(true);
}
}
如果我使用ResultSet或JDBC4ResultSet并不重要,我总是得到com.mysql.jdbc.JDBC4ResultSet@65cda838
。
答案 0 :(得分:4)
将.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()
。