【问题标题】:Retrieving records from MySQL in Java在 Java 中从 MySQL 中检索记录
【发布时间】:2010-09-19 16:48:43
【问题描述】:

我正在用 Java 构建一个应用程序来从 MySQL 数据库中检索数据。执行查询后,我得到一个 ResultSet 并执行以下操作以提取记录:

while (rs.next())
        {
            for (int column = 1; column <= rm.getColumnCount(); column++) {
                row.add(rs.getObject(column));
            }
            result.add(row.toString());
            row.clear();
        }

其中 rs = ResultSet 和 rm = ResultSetMetaData

问题是我必须做 result.add(row.toString()); 而不仅仅是 result.add(row); (我用它'想创建一个二维 ArrayList)。否则我会得到空结果。

我尝试将 row.clear(); 放在开头,在 for 循环之前,但这会导致我的所有结果都被多个实例填充最后的记录。就像 row 直到最后才添加到 result 中,当它等于最后一条记录时。在将 ArrayList row 作为元素添加到另一个 ArrayList 之前,我是否需要“提交”它?如果是这样,怎么做? 另外,出于好奇,为什么 .toString() 的工作方式不同?

【问题讨论】:

    标签: java mysql arraylist


    【解决方案1】:

    通过添加 row.toString(),您正在创建一个新的 String 对象以添加到结果中。

    另一方面,通过添加行,您将相同的对象添加到结果中,因此,每次调用 row.clear() 时,都会清空结果中的所有行。

    你应该做的是在for循环之前创建一个新的行对象,不要做row.clear()。下面是一个例子。

    while (rs.next())
            {
                row = new ArrayList();
    
                for (int column = 1; column <= rm.getColumnCount(); column++) {
                    row.add(rs.getObject(column));
                }
    
                result.add(row);
            }
    

    【讨论】:

    • 好的,所以基本上 result.add(row) 就像“通过引用传递”一样工作,不是复制对象,而只是提供对它的引用?谢谢,这解决了我的问题:)
    猜你喜欢
    • 2012-06-27
    • 1970-01-01
    • 2012-04-12
    • 2010-10-04
    • 2016-01-14
    • 1970-01-01
    • 2013-03-05
    • 2018-11-13
    • 1970-01-01
    相关资源
    最近更新 更多