【问题标题】:Select multiple column values with Java ResultSet使用 Java ResultSet 选择多个列值
【发布时间】:2018-08-06 02:51:22
【问题描述】:

我正在尝试从我的 MySQL 表中的一行中选择值。

SELECT fortnite,psn,steam,twitch,xbox,youtube 
  FROM `social_media` 
  WHERE id = '16483378715464928'

当我尝试将结果转换为字符串时,ResultSet 只接收第一个“fortnite”行。我的问题是,如何检索以下列并将它们全部放入一个字符串中以返回。

这是我的示例代码:

    public static String getSocialMedia(String id) {
    String ret = "";
    int i = 1;
    try {
        Statement stmt = null;
        ResultSet resultSet = null;
        getConnection();
        stmt = con.createStatement();
        resultSet = stmt.executeQuery("SELECT fortnite,psn,steam,twitch,xbox,youtube FROM `social_media` WHERE id ='" + id + "'");
        while(resultSet.next()) {
            ret += resultSet.getString(i) + " ";
            i++;
        }
        if(resultSet != null) {
            resultSet.close();
        }
        if(stmt != null) {
            stmt.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return ret;
}

【问题讨论】:

    标签: java mysql sql


    【解决方案1】:

    这是因为这个而发生的。

    while(resultSet.next()) {
         ret += resultSet.getString(i) + " ";
         i++; 
    }
    

    在上面的代码里面,你需要通过名称或者索引来获取所有的值。 next() 函数为您提供完整的行而不是单列。

    你应该把它改成:

    while(resultSet.next()) {
        for(i = 1, i <=6, i++){           
            ret += resultSet.getString(i) + " ";
        } 
    }
    

    【讨论】:

    • 是的,这行得通,我没有意识到 ResultSet 返回完整的行而不是单个查询。这就是为什么我要增加未按计划工作的 getString() 方法。感谢您的帮助!
    【解决方案2】:

    当我尝试将结果转换为字符串时,只有 ResultSet 收到第一个“堡垒之夜”行。我的问题是,我如何检索 以下列并将它们全部放入一个字符串中返回。

    术语在这里很重要,因为误解术语可能会导致您误解文档。在这种情况下,重要的术语区别是“行”vs。 “列”。

    您的查询选择 fortnite,psn,steam,twitch,xbox,youtube。这六个标识符定义了结果集中的每一行将具有的六个 。看起来您的特定查询是通过表的主键进行选择的,因此您只会有 0 行或 1 行,但其他查询可以返回多行。

    您想要提取一行的所有六列的值,但您迭代 while(resultSet.next()),并且 ResultSet.next() 将结果集移动到下一个 (如果有),而不是下一个柱子。由于您只有一行,因此循环仅在一次迭代后终止。

    看起来你想要更像这样的东西:

            if (resultSet.next()) {
                for (i = 1; i <= 6; i++) {
                    ret += resultSet.getString(i) + " ";
                }
            }
    

    if (resultSet.next()) 是将结果集移动到第一行以及检测何时没有结果集所必需的。然后根据查询遍历结果的,您静态知道其编号。

    【讨论】:

    • 感谢您的回复。您的回答清除了我当前关于行与列的所有问题。我对 ResultSet 的工作方式感到困惑。我刚开始使用 Java 和 SQL。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2015-01-07
    • 2018-03-07
    • 2018-05-15
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多