从数据库到表单实现next和previous

时间:2015-04-01 17:50:12

标签: java mysql database resultset

我在实施这个案子时遇到了问题。

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;
}

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

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

我需要下一个,上一个,最后一个和第一个功能,但我不确定我的第一个实现。

有人可以给我一些关于如何开始这个的建议 我需要解决方案,建议。重复意味着什么。

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

答案 1 :(得分:0)

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

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

Need for closing DB resources separately 还要考虑这样一种情况,即连接池中允许打开的最大数据连接数被设置为固定号。您最终会达到这个目标,您的应用程序将崩溃或无法正确响应。

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

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

回答#2

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

另一个建议是不要通过JDBC进行select *调用。这不是很有用。您应该优先提到列名,这将允许您控制要提取到结果集中的数据,在许多情况下也可以使查询执行更快。

相关问题