总结玩家名单的杀戮

鲍勃

基本上我有一个球员名单:

    final List<String> members = getClanMembers(clan);

每个玩家都有多个杀手

我想总结一下,得出所有玩家总杀手数。

这就是我现在正在做的:

    Integer kills = 0;
    for (final String plr : members) {
        try {
            final PreparedStatement sel = conn.prepareStatement("SELECT kills FROM Stats WHERE player=?");
            sel.setString(1, plr);
            final ResultSet rs = sel.executeQuery();
            kills += rs.getRow() != 0 ? rs.getInt("kills") : 0;
        } catch (final SQLException e) {
            e.printStackTrace();
        }
    }

但是,我认为这段代码效率不高,而且我知道您可以在MySQL中创建变量来做得更好。(错误的内容:尝试在for循环中捕获问题,一次执行太多查询)

有人可以给我一些提示吗?

提前致谢。

编辑:我忘了提一下,我只想总结ArrayList中的玩家的杀死人数,而不是表中的所有玩家。

杰森

将该SUM()函数与一个WHERE player IN ...子句结合使用,该子句将求和限制为仅指定族中的那些记录。

SELECT SUM(kills) FROM Stats WHERE player IN (?, ?, ?)

注意:您需要插入正确的数字“?” 对于阵列中的播放器数量,然后将这些参数设置为阵列中的播放器名称。

Integer kills = 0;
if(members.size() > 0) {
    StringBuilder sql = new StringBuilder("SELECT SUM(kills) FROM Stats WHERE player in (?");
    for(int index = 1; index < members.size(); index++) {
        sql.append(",?");
    }
    sql.append(")");
    try {
        final PreparedStatement sel = conn.prepareStatement(sql.toString());
        for (int index = 0; index < members.size(); index++) {
            sel.setString(index + 1, members.get(index));
        }
        final ResultSet rs = sel.executeQuery();
        kills = rs.getRow() != 0 ? rs.getInt(1) : 0;
    } catch (final SQLException e) {
        e.printStackTrace();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章