捕获 ResultSet.next() 的异常
Posted
技术标签:
【中文标题】捕获 ResultSet.next() 的异常【英文标题】:Catching ResultSet.next()'s exception 【发布时间】:2011-06-01 16:48:32 【问题描述】:我有一个只向前的光标。由于某些问题,在某些行上获取特定列可能会引发异常(专有驱动程序,该异常实际上是由于编码引起的)。
那么如何在这段代码(Scala 代码)中捕获这样的异常:
while(rs.next)
println(rs.getString("column"))
我试过while(true)
里面有一个try/catch 块,但显然在抛出异常之后,无论如何我都无法移动光标。调用.next()
方法时抛出异常。
【问题讨论】:
如果 while(true) 选项不起作用,则必须修复驱动程序。即使您捕获了异常,驱动程序的 ResultSet 实现也会“损坏” 【参考方案1】:我会使用scala.util.control.Exception
。例如:
scala> import scala.util.control.Exception._
import scala.util.control.Exception._
scala> def div2(by: Int) = catching(classOf[ArithmeticException]) opt (2 / by)
div2: (by: Int)Option[Int]
scala> div2(2)
res23: Option[Int] = Some(1)
scala> div2(0)
res24: Option[Int] = None
【讨论】:
由于 Bozho 提到的这一点,知道这行不通,我试了一下,只是为了了解更多关于control
包的信息。我做了while (true)catching(classOf[com.foo.BarException]) opt (rs.next)
,结果很有趣,它捕获了异常,并在抛出异常后准确地输出了 8 次相同的行。以上是关于捕获 ResultSet.next() 的异常的主要内容,如果未能解决你的问题,请参考以下文章
java.sql.SQLException: 关闭的 Resultset: next
ResultSet 不为空,但 resultset.next() 返回 false
为啥最后一次“ResultSet.next()”迭代比之前的迭代花费更多的时间?