![]() |
1
35
这是个坏主意。这种方法要求连接一直打开,直到最后一行被读取,并且在DAO层之外,您永远不知道什么时候会发生连接,并且在连接超时的情况下,您似乎也会让结果集保持打开状态,并存在资源泄漏和应用程序崩溃的风险。你不想这样。
通常的JDBC实践是
使用方法如下:
不要像最初想要的那样在DAO层之外传递昂贵的DB资源。对于普通JDBC实践和DAO模式的更多基本示例,您可能会发现 this article 有用的。 |
![]() |
2
38
您可以通过在
|
![]() |
4
3
在你需要它的情况下,这不是一个很坏的主意,只是你经常不需要它。 如果您确实需要这样做,比如说,流式处理整个数据库……您可以预先获取下一行-如果获取失败,则hasNext为false。 以下是我使用的:
然后:
|
![]() |
5
3
一种选择是 ResultSetIterator 从Apache DBUTILS项目。 俾路支正确地指出了在这方面的各种问题。你需要 非常 注意正确处理连接/结果集生命周期。幸运的是,dbutils项目也有 solutions 用于安全地使用结果集。 如果Balusc的解决方案对您来说不切实际(例如,您正在处理无法全部装入内存的大型数据集),那么您可能需要对其进行一次尝试。 |
![]() |
6
3
|
![]() |
7
2
您可以尝试以下操作:
此代码缓存下一个实体,如果缓存的实体有效,则hasNext()返回true,否则返回false。 |
![]() |
8
2
根据您想要的类A,您可以做一些事情。如果主要用例是遍历每个结果,那么最好是预加载所有实体对象并丢弃结果集。 但是,如果不想这样做,可以使用resultset的next()和previous()方法
您必须小心确保当前没有从resultset中读取数据,但是,如果您的实体类是一个正确的pojo(或者至少与resultset正确断开连接),那么这应该是一种很好的方法。 |
![]() |
9
2
我同意俾路支。允许迭代器从DAO方法中逸出会使关闭任何连接资源变得困难。您将被迫了解DAO之外的连接生命周期,这将导致繁琐的代码和潜在的连接泄漏。 但是,我使用的一种选择是将函数或过程类型传递到DAO方法中。基本上,传递某种回调接口,它将获取结果集中的每一行。 例如,可能是这样:
这样,就可以将数据库连接资源保存在DAO中,这是正确的。但是,如果考虑到内存问题,则不一定需要填充集合。 希望这有帮助。 |
![]() |
10
1
entities.next 如果没有更多的行,则返回false,因此您只需获取该返回值并设置一个成员变量来跟踪hasNext()的状态。 但要实现这一点,您还必须使用某种in it方法来读取第一个实体并将其缓存到类中。然后在调用next时,需要返回以前缓存的值并缓存下一个值等… |
![]() |
11
1
你可以使用 ResultSetIterator ,只需将结果集放入构造函数。
|
![]() |
12
1
由于上述原因,迭代器对于遍历结果集是有问题的,但是具有处理错误和关闭资源所需的所有语义的类似迭代器的行为在 RxJava .可观测数据类似于迭代器,但包括订阅的概念、订阅的取消和错误处理。 项目 rxjava-jdbc 具有JDBC操作的可观察性实现,包括适当关闭资源的结果集遍历、错误处理和根据需要取消遍历的能力(取消订阅)。 |
![]() |
13
1
这是包装结果集的迭代器。以映射的形式返回行。我希望你会发现它有帮助。策略是我总是提前带一个元素。
|
![]() |
14
0
您是否希望实际使用结果集中的大部分数据?如果是,请预先缓存它。用弹簧很简单
适应你的口味。 |
![]() |
15
0
我认为有足够的理由谴责为什么在迭代器中使用resultset是一个非常糟糕的主意(简而言之,resultset维护到db的活动连接,不尽快关闭它会导致问题)。 但是在另一种情况下,如果您得到了resultset(rs),并且要对元素进行迭代,但是您还想在迭代之前做一些类似的事情:
你可以这样写来达到同样的效果:
|
![]() |
16
0
可以这样做:
|
![]() |
17
-1
听起来您陷入了提供效率低下的
不幸的是,有时实现接口时并不需要所有成员。在这种情况下,我建议您在该成员中抛出一个您将不支持或无法支持的异常,并将您类型上的该成员记录为不支持的操作。 |
|
Julia · 矢量中相加为总和S的值的数量 2 年前 |
![]() |
apetrai · 我应该如何假设算法使用哪种迭代器类别? 2 年前 |
![]() |
Pratik · 不使用Java DeepCopy迭代器 7 年前 |
![]() |
PanDe · 将两个列表合并为一个Dict、Tuple 7 年前 |
![]() |
bisarch · 迭代哈希集并在每次迭代中删除多个元素 7 年前 |