日期:2014-05-17  浏览次数:20763 次

Resultset对象关闭的问题
今天在做一个查询功能,遇到了这样一个问题,关闭resultset对象时出现了莫名其妙的异常,如下:
if (null != rs && !rs.isClosed()) {
rs.close();
}
这样写就会出现java.lang.AbstractMethodError: com.mysql.jdbc.ResultSet.isClosed()Z的错误
而if (null != rs) {
rs.close();
}这样写就没有问题,难道 !rs.isClosed()这样一句判断出异常了吗?
求大神给解答


------解决方案--------------------
楼主再去好好确认下吧。
查看了源码,com.mysql.jdbc.ResultSet.java中是没有isClosed()方法的。
楼主说看了api有这个方法,不知道看的是哪个api
是否查看的是java.sql.ResultSet.java? 它是一个接口,isClosed只是一个方法声明,没有方法体的。

java.lang.AbstractMethodError: com.mysql.jdbc.ResultSet.isClosed()Z
这句错误已经明确说了。
当应用程序试图调用一个抽象方法时,会抛出此错误。所以isClosed()方法是没有被实现的。

(java.sql.Connection.java倒是有个isClosed方法。不过和楼主说的无关。)
------解决方案--------------------
楼主这样做你就知道怎么回事了:

写一个接口:
interface A{
public void a();
}
然后写一个类B实现它,并将这个类的class文件导出成jar包。

这时候新建个工程,复制A接口和上面的jar包到环境变量。
这时候你就可以用
A a = new B();
但你调用a.b()的时候就会说b是个抽象方法

------解决方案--------------------
你用的那个数据库版本有点低,那个方法是没有实现的,所以会出现异常,别用那个方法了,换种写法判断非空性,或者重装新版本的数据库