【问题标题】:Implement next and previous from database to form实现从数据库到表单的下一个和上一个
【发布时间】:2015-06-06 11:52:31
【问题描述】:

我在执行这个案例时遇到了问题。

1) 一些例子表明我们可以像下面这样使用:

        try{   
        bd.conectarBaseDeDatos();
                PreparedStatement stmt;
                String sql=("SELECT * FROM cab_pedido a, det_pedido b WHERE a.numero = b.numero and a.cod_agencia = b.cod_agencia");     
                System.out.println(sql);
                stmt = bd.conexion.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 
                bd.result = stmt.executeQuery(sql);
        }
    catch (InstantiationException | IllegalAccessException | SQLException e){ System.out.println(e);}  
       return rs;
}

这将返回我的结果集,我可以使用 rs.next()。 rs.previous() 等来解决我的问题,但我看到一些 cmets 说我们应该关闭 rs 和 db 连接。那有多危险?我可以在不关闭结果集和连接的情况下实现吗?因为当我们关闭 resultSet 时,我将无法再获取数据。

2) 将数据存入Hashmap或list 这是另一种可能性,但如果我想获得最后一个或第一个值,我该怎么做?

我需要 next、prev、last 和 first 函数,但我不确定我的第一个实现。

谁能给我一些关于如何开始的建议。
我需要解决方案,建议。那个重复没有任何意义。

【问题讨论】:

    标签: java mysql database resultset


    【解决方案1】:

    我将尝试在这里开始回答,因为我还没有评论的选项从您的代码和问题中可以理解的是:

    • 您有一个resultset,您想从中读取第一个、最后一个、上一个、下一个等数据集。
    • 关闭数据库连接资源
    • 使用HashMapList

    嗯,从目前的情况来看,您绝对可以将resultset 中的数据读入ListHashMap

    其次是关闭资源,是的!您应该始终关闭数据库连接资源以避免内存泄漏。您可以通过在代码中的 catch 块之后添加 finally 块来做到这一点。

    开启HasMapList。如果您不确定将从结果集中读取的数据类型,请使用 List 的一些实现,例如ArrayList<String>。如果你知道数据会有键和值,那么你可以去HashMap

    这些只是一般准则。如果您发布更多代码,也许我们可以提供更多帮助。

    【讨论】:

      【解决方案2】:

      #1 的答案 -- 这是一个重复的问题。

      当您关闭数据库连接时。 ResultSet 和 Statement 也关闭。 但这不是一个有保证的行动。因此,您应该关闭所有数据库资源。

      Need for closing DB resources separately 还要考虑允许在连接池中打开的最大数据库连接数设置为固定数字的情况。您最终会达到这一点,您的应用程序将简单地崩溃或无法正确响应。

      这不仅适用于数据库连接/结果,还适用于所有 IO 资源。 您应该(作为一种良好做法)始终在使用完所有 IO 资源后关闭它们。

      不这样做你只是留下内存泄漏的原因。

      回答#2

      在您可能想要关闭结果集之前将信息/数据移动到适当的数据结构中是一件好事。这更多的是我们一直面临的实施方案。 再次使用的数据结构形式将基于场景。但在所有情况下,您都可能希望使用 Bean 类/POJO 来存储获取的每一行的相关信息,因为每行都会获取多个值。

      另一个建议是不要通过 JDBC 进行 select * 调用。这不是很有用。您最好提及列名,这将允许您控制要提取到结果集中的数据,并且在许多情况下还可以加快查询执行速度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多