Java 如何从查询中获得结果?(MySQL)
我正在给玩家排名,我需要将结果输入Java 我的代码是Java 如何从查询中获得结果?(MySQL),java,mysql,resultset,rank,Java,Mysql,Resultset,Rank,我正在给玩家排名,我需要将结果输入Java 我的代码是 public static int getRank(UUID uuid) throws SQLException { checkConnection(); PreparedStatement s = con.prepareStatement( "SET @rownum := 0; SELECT rank FROM ( SELECT @rownum := @rownum + 1 AS rank, win
public static int getRank(UUID uuid) throws SQLException {
checkConnection();
PreparedStatement s = con.prepareStatement(
"SET @rownum := 0; SELECT rank FROM ( SELECT @rownum := @rownum + 1 AS rank, wins, uuid FROM `SKYWARS` ORDER BY wins DESC ) as result WHERE uuid=?");
s.setString(1, uuid.toString());
ResultSet r = s.executeQuery();
r.next();
return r.getInt(1);
}
但是s.execute()返回false,这意味着没有结果集。如何获得结果集?在MySQL workbench中,它返回网格中的值rank和wins
解决方案:
我在连接语句中添加了
?allowmultiquerys=true
。这使我的代码按原样工作。@barmar提出了一个很好的解决方案:
public static int getRank(UUID uuid) throws SQLException {
checkConnection();
PreparedStatement s1 = con.prepareStatement(
"SET @rownum := 0;");
s1.execute();
PreparedStatement s = con.prepareStatement(
" SELECT rank FROM ( SELECT @rownum := @rownum + 1 AS rank, wins, uuid FROM `SKYWARS` ORDER BY wins DESC ) as rank WHERE uuid=?");
s.setString(1, uuid.toString());
if (!s.execute()) {
System.out.println(123);
} else {
ResultSet r = s.executeQuery();
r.next();
return r.getInt(1);
}
return 0;
}
SET语句可以拆分。根据您的描述,这听起来更像是一个Java问题。添加一个标记可能会对您有所帮助。我不使用Java,但许多MySQL API不允许您在一个调用中执行多个查询。将
SET
语句放在单独的调用中。@Barmar我设置了一个属性以允许multiQuery@UncleCarl谢谢,will do Edit:我已经知道了如何打印SQL错误消息。