我在给玩家排名,我需要把结果放到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, 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工作台中,它返回网格中的值rank和wins。
解决方案:i将?allowMultiQueries=true
添加到连接语句中。这使得我的代码可以按原样工作。
发布于 2018-07-26 05:24:12
@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语句可以被拆分。
https://stackoverflow.com/questions/51526868
复制相似问题