Java 试图从第一个查询中获取一个值,并在第二个查询中使用它来获得特定的结果。好的,accesslevel是从第二个查询中引用的,因此它确实会得到执行。您可以重新检查查询列名与实际db列名吗?错误来自数据库,因此您的第二个PreparedStatement肯定会运

Java 试图从第一个查询中获取一个值,并在第二个查询中使用它来获得特定的结果。好的,accesslevel是从第二个查询中引用的,因此它确实会得到执行。您可以重新检查查询列名与实际db列名吗?错误来自数据库,因此您的第二个PreparedStatement肯定会运,java,sql,Java,Sql,试图从第一个查询中获取一个值,并在第二个查询中使用它来获得特定的结果。好的,accesslevel是从第二个查询中引用的,因此它确实会得到执行。您可以重新检查查询列名与实际db列名吗?错误来自数据库,因此您的第二个PreparedStatement肯定会运行。表“characters”中的列“accesslevel”不存在,这是数据库所说的。可能拼写为“access_level”?不,如果我删除rSet.getInt(“accesslevel”);我在“char_name”处得到了错误,如果我也


试图从第一个查询中获取一个值,并在第二个查询中使用它来获得特定的结果。好的,accesslevel是从第二个查询中引用的,因此它确实会得到执行。您可以重新检查查询列名与实际db列名吗?错误来自数据库,因此您的第二个PreparedStatement肯定会运行。表“characters”中的列“accesslevel”不存在,这是数据库所说的。可能拼写为“access_level”?不,如果我删除rSet.getInt(“accesslevel”);我在“char_name”处得到了错误,如果我也删除了这一个,我会在“online”中得到它。第二份准备好的报表有点问题。是的,这是我需要的,但我的“计数”列在项目处。这是角色拥有的第57项的数量。我正在尝试获取项目的前10个计数_id=57并对它们进行排序desc@GeorgeTagas:您可以使用“select in”语句,而不是内部联接。查看更新后的答案作为示例…是的,我对它做了一点修改以供使用,效果非常好。谢谢你,伙计@乔治塔加斯:很酷,很高兴听到这个。是的,这是我需要的,但我的“计数”是项目栏。这是角色拥有的第57项的数量。我正在尝试获取项目的前10个计数_id=57并对它们进行排序desc@GeorgeTagas:您可以使用“select in”语句,而不是内部联接。查看更新后的答案作为示例…是的,我对它做了一点修改以供使用,效果非常好。谢谢你,伙计@乔治塔加斯:很酷,很高兴听到这个。
        try (Connection con = L2DatabaseFactory.getInstance().getConnection())
        {
            PreparedStatement stm = con.prepareStatement("SELECT count,owner_id FROM items WHERE item_id=57 order by count desc limit 10");
            ResultSet rSet = stm.executeQuery();
            while (rSet.next())
            {
                int owner_id = rSet.getInt("owner_id");
                int count = rSet.getInt("count");
                if (count == 0)
                {
                    continue;
                }
                PreparedStatement stm1 = con.prepareStatement("SELECT char_name,accesslevel,online FROM characters WHERE obj_Id=" + owner_id);
                ResultSet rSet1 = stm1.executeQuery();
                while (rSet1.next())
                {
                    int accessLevel = rSet.getInt("accesslevel");
                    if (accessLevel > 0)
                    {
                        continue;
                    }
                    String pl = rSet.getString("char_name");
                    int online = rSet.getInt("online");
                    String status = online == 1 ? "<font color=\"00FF00\">Online</font>" : "<font color=\"FF0000\">Offline</font>";                     
                    sb.append("<tr><td>"+ pl +"</td><td>"+ count +"</td><td>"+ status +"</td></tr>");
                }
            }
        }
        catch (Exception e)
        {
            _log.log(Level.SEVERE, "Error", e);
        }
private String test() throws SQLException {
    StringBuilder sb = new StringBuilder();
    int count = 0;
    try (Connection con = L2DatabaseFactory.getInstance().getConnection()) {
        try (PreparedStatement stm1 = con.prepareStatement(
                "SELECT char_name,accesslevel,online FROM characters WHERE obj_Id in (SELECT owner_id FROM items WHERE item_id=57 order by count desc limit 10)")) {
            ResultSet rSet = stm1.executeQuery();
            while (rSet.next()) {
                count++;
                int accessLevel = rSet.getInt("accesslevel");
                if (accessLevel > 0) {
                    continue;
                }
                String pl = rSet.getString("char_name");
                int online = rSet.getInt("online");
                String status = online == 1 ? "<font color=\"00FF00\">Online</font>" : "<font color=\"FF0000\">Offline</font>";
                sb.append("<tr><td>" + pl + "</td><td>" + count + "</td><td>" + status + "</td></tr>");
            }
        }
    } catch (Exception e) {
        Logger.getLogger("test").log(Level.SEVERE, "Error", e);
    }
    return sb.toString();
}