有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java实现从数据库到表单的下一步和上一步

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

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()等来解决我的问题,但我看到一些评论说我们应该关闭rs和db连接。这有多危险?我可以在不关闭结果集和连接的情况下实现吗?因为当我们关闭resultSet时,我将无法再获取数据

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

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

有谁能给我一些关于如何开始的建议吗
我需要解决方案和建议。那个复制品毫无意义


共 (2) 个答案

  1. # 1 楼答案

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

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

    好的,从目前为止的情况来看,你完全可以把数据从resultset读入ListHashMap

    第二,关闭资源,是的!您应该始终关闭数据库连接资源,以避免内存泄漏。可以通过在代码中的catch块之后添加finally块来实现

    HasMapList上。如果您不确定要从结果集中读取的数据类型,那么可以使用List的一些实现,例如ArrayList<String>。如果您知道数据将包含键和值,那么可以选择HashMap

    这些只是一般准则。如果你再发一些代码,也许我们可以进一步帮助你

  2. # 2 楼答案

    这是一个重复的问题

    当你关闭数据库连接时。结果集和语句也将关闭。 但这并不能保证采取行动。因此,您应该关闭所有数据库资源

    Need for closing DB resources separately 还考虑在连接池中允许打开的DB连接的最大NO设置为固定数的情况。你最终会达到这个目标,你的应用程序就会崩溃或者无法正确响应

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

    如果不这样做,只会留下内存泄漏的原因

    #2的答案

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

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