读书人

数据库关闭错误

发布时间: 2013-09-08 15:21:21 作者: rapoo

数据库关闭异常
请先看我的代码:


public Vector select(Object pojo,String condition , String conditionValue){
Vector v = new Vector();
GetConnection getConn = null ;
SQLFactory sf = new SQLFactory(pojo);
String sql = sf.createSql(
SQLFactory.SELECT,condition,conditionValue);
try{
getConn = new GetConnection();
conn = getConn.getConnection() ;
stat = conn.createStatement();
rs = stat.executeQuery(sql);
while(rs.next()){
Vector tempV = new Vector();
tempV.add(rs.getInt(1));
tempV.add(rs.getString(2));
tempV.add(rs.getString(3));
tempV.add(rs.getString(4));
v.add(tempV);
}
}
catch(Exception err){
err.printStackTrace();
}
finally{
try {
System.out.println(rs);
if( null != rs
&& !rs.isClosed() )
rs.close();
rs = null ;
if( null != stat && !stat.isClosed())
stat.close();
stat = null ;
} catch (SQLException e) {
e.printStackTrace();
}
getConn.close();
conn = null ;
}
return v ;
}

这个代码,报错如下:
oracle.jdbc.driver.OracleResultSetImpl@1dfc547
Exception in thread "main" java.lang.AbstractMethodError: oracle.jdbc.driver.OracleResultSetImpl.isClosed()Z
at dao.BasicDBOImpl.select(BasicDBOImpl.java:124)
at util.CheckData.isExist(CheckData.java:12)
at dao.BasicDBOImpl.add(BasicDBOImpl.java:26)
at dao.BasicDBOImpl.main(BasicDBOImpl.java:140)

从报错情况看,输出:oracle.jdbc.driver.OracleResultSetImpl@1dfc547,
说明rs不为null,
与此同时,at dao.BasicDBOImpl.select(BasicDBOImpl.java:124),
说明问题出在第125&& !rs.isClosed()这里!

-------------------------

问题1,既然rs没问题,怎么会有错 ?

问题2:怎么改 ?


菜鸟求教
------解决方案--------------------


换个其他版本的驱动试试
[解决办法]
估计是oracle.jdbc.driver.OracleResultSetImpl没有给出isClosed()的实现,所以导致调用了抽象方法出错
[解决办法]
数据库关闭错误有兴趣的话可以去看看源码
[解决办法]
数据库关闭错误好像不是开源的,还是找个官方文档看看吧,具体什么原因不好乱猜
[解决办法]
我也遇到过类似的问题,我是这样解决的。

在上面提前定义 :ResultSet rs = null;
[解决办法]
编译不报错?如楼上的所说的,rs在try外面都没定义啊。
[解决办法]

引用:
请先看我的代码:

public Vector select(Object pojo,String condition , String conditionValue){
Vector v = new Vector();
GetConnection getConn = null ;
SQLFactory sf = new SQLFactory(pojo);
String sql = sf.createSql(
SQLFactory.SELECT,condition,conditionValue);
try{
getConn = new GetConnection();
conn = getConn.getConnection() ;
stat = conn.createStatement();
rs = stat.executeQuery(sql);
while(rs.next()){
Vector tempV = new Vector();
tempV.add(rs.getInt(1));
tempV.add(rs.getString(2));
tempV.add(rs.getString(3));
tempV.add(rs.getString(4));
v.add(tempV);
}
}
catch(Exception err){
err.printStackTrace();
}
finally{
try {
System.out.println(rs);
if( null != rs
&& !rs.isClosed() )
rs.close();
rs = null ;
if( null != stat && !stat.isClosed())
stat.close();
stat = null ;
} catch (SQLException e) {
e.printStackTrace();
}
getConn.close();
conn = null ;
}
return v ;
}

这个代码,报错如下:
oracle.jdbc.driver.OracleResultSetImpl@1dfc547
Exception in thread "main" java.lang.AbstractMethodError: oracle.jdbc.driver.OracleResultSetImpl.isClosed()Z
at dao.BasicDBOImpl.select(BasicDBOImpl.java:124)


at util.CheckData.isExist(CheckData.java:12)
at dao.BasicDBOImpl.add(BasicDBOImpl.java:26)
at dao.BasicDBOImpl.main(BasicDBOImpl.java:140)

从报错情况看,输出:oracle.jdbc.driver.OracleResultSetImpl@1dfc547,
说明rs不为null,
与此同时,at dao.BasicDBOImpl.select(BasicDBOImpl.java:124),
说明问题出在第125&& !rs.isClosed()这里!

-------------------------

问题1,既然rs没问题,怎么会有错 ?

问题2:怎么改 ?


菜鸟求教

你为什么要判断rs.isclosed呢?用完之后直接rs.close就行了。具体可以看jar包源码BasicDBOImpl接口实现
[解决办法]
貌似没问题啊,把jar包换了

读书人网 >J2SE开发

热点推荐