-
关闭statement时出现NullPointerException10
公司的一个系统出了个很奇怪的问题,方法调用Trace如下:
ABC.java...... Connection connection = null; PreparedStatement ps = null; ResultSet rs = null; ...... try { if(A){ theSQL = "******"; connection = theContext.theSQLMgr.getDBSession().getConnection(); ps = connection.prepareStatement(theSQL); ...... } else{ theSQL = "******"; connection = theContext.theSQLMgr.getDBSession().getConnection(); ps = connection.prepareStatement(theSQL); ...... } } catch (SQLException e) { e.printStackTrace(); throw new DBResourceException(e); } finally { DBUtils.release(theContext, rs, ps, connection); }
DBUtils.java
public static void release(Context context, ResultSet rs, Statement ps, Connection con) { if (rs != null) { context.theSQLMgr.getDBSession().releaseResultSet(rs); } if (ps != null) { context.theSQLMgr.getDBSession().releaseStatement(ps); } if (con != null) context.theSQLMgr.getDBSession().releaseConnection(con); }
DBSession.class
/** * Releases preparedStatement from the database. * @param statement */ public void releaseStatement(Statement statement) { if (statement != null) { try { statement.close(); } catch (SQLException e) { dbSessionLogger.warn("Error:DBSession.releaseStatement", e); } } }
***WrappedStatement.class(implements PreparedStatement)
public void close() throws SQLException { SsaGenericApplication.logDebug(this.name + "--[close]:: closing statemt..."); if ((!this.inTrans) || (!this.updateQuery)) { this.stmt.close(); this.stmt = null; } SsaGenericApplication.logDebug(this.name + "--[close]::statment closed"); }
在最后这个class中就报异常了,信息如下:
10:29:10,414 ERROR [STDERR] Caused by: java.lang.NullPointerException 10:29:10,414 ERROR [STDERR] at com.***.service.baseobjects.***WrappedStatement.close(Unknown Source) 10:29:10,414 ERROR [STDERR] at com.agileitp.forte.genericdbms.DBSession.releaseStatement(DBSession.java:202) 10:29:10,414 ERROR [STDERR] at com.***.service.utils.DBUtils.release(DBUtils.java:36) 10:29:10,414 ERROR [STDERR] at com.***.service.dcustomize.TransferP1S1.processStep(TransferP1S1.java:297) 10:29:10,414 ERROR [STDERR] at com.***.service.exeprocessmanager.TransactionService.executeProcedure(Unknown Source) 10:29:10,414 ERROR [STDERR] at com.***.service.exeprocessmanager.TransactionServiceSOBean.executeProcedure(Unknown Source) 10:29:10,414 ERROR [STDERR] at sun.reflect.GeneratedMethodAccessor132.invoke(Unknown Source) 10:29:10,414 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 10:29:10,414 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:592) 10:29:10,414 ERROR [STDERR] at org.jboss.invocation.Invocation.performCall(Invocation.java:359)
理论上,最后一个class的
this.stmt.close();
不可能报错,因为之前已经做过ps!=null的判断了,至此失去思路。
不知错误可能出在哪里?
2012年11月29日 14:48
1个答案 按时间排序 按投票排序
-
public void close()
throws SQLException
{
SsaGenericApplication.logDebug(this.name + "--[close]:: closing statemt...");
if ((!this.inTrans) || (!this.updateQuery))
{
this.stmt.close();
this.stmt = null;
}
SsaGenericApplication.logDebug(this.name + "--[close]::statment closed");
}
估计是你最合格包装的statement的 this.stmt 为null 你可以看看2012年11月29日 15:49
相关推荐
9. 关闭资源:在完成数据库操作后,必须关闭`ResultSet`,`Statement`和`Connection`,以释放数据库资源。通常使用`try-with-resources`语句块来确保资源被正确关闭。 10. 数据库连接池:在实际应用中,为了提高...
- `NullPointerException`: 当尝试访问null对象的方法或属性时抛出,可能出现在未正确初始化数据库连接时。 - `ClassNotFoundException`: 在加载数据库驱动时找不到指定类时抛出。 - `IOException`: 数据流读写...
- **执行新的SQL前关闭之前的Statement**:每执行一条新的SQL语句之前,都需要关闭上一条SQL语句所使用的`Statement`。 ```java stmt.close(); ``` - **提交事务**:所有操作完成后,需要提交事务。 ```java ...
例如,确保正确的驱动程序加载,正确配置连接参数,以及在关闭资源(如Statement和ResultSet)时处理异常。 【Hibernate异常处理】 Hibernate是一个流行的ORM(对象关系映射)框架,允许开发者使用面向对象的方式...
如果在执行查询时遇到`NullPointerException`异常,通常是由于`ResultSet`对象未正确初始化导致的。确保在执行查询前已经正确设置了`Statement`对象,并且成功执行了SQL语句。 #### SQLServerException异常 如果...
- 为了保证程序的健壮性,应该添加适当的异常处理代码,比如在连接数据库时可能出现的`SQLException`,在处理用户输入时可能出现的`NullPointerException`等。 7. **设计模式**: - 在文档中,`Denglu` 和 `...
**描述**:当执行SQL语句时出现错误时会抛出此异常。 **解决方案**: 1. **异常处理**:使用try-catch语句处理SQLException。 2. **参数验证**:对输入参数进行有效性验证。 3. **使用PreparedStatement**:使用...
- `try-catch-finally`结构用于捕获和处理程序运行时可能出现的异常。 2. **集合框架**: - 对象具有唯一字符串键的容器应使用`Map`,因为`Map`允许通过键来检索对象,而`Set`、`List`、`Collection`和`...
在操作数据库时,应使用正确的资源管理策略,比如,在操作完成后及时关闭ResultSet、Statement和Connection对象。 以上是35个常见的Java代码性能优化技巧的总结,实际运用时需要根据具体的应用场景和需求进行适当的...
- 运行时异常是程序运行过程中可能出现的、不能被编译器强制捕获的异常,例如空指针异常(NullPointerException)、算术异常(ArithmeticException)等。 - 一般异常(非运行时异常)是可以通过编程时的检查和处理...
一旦连接建立,就可以使用`Statement` 或 `PreparedStatement` 对象执行SQL语句,进行数据的查询、插入、更新和删除。这种方法虽然更加灵活,但需要注意的是,直接操作数据库可能会影响Windchill系统的稳定性和性能...
- NullPointerException:访问或操作null对象时抛出。 - ClassNotFoundException:尝试加载找不到的类时抛出。 - ArithmeticException:进行非法数学运算,如除以零。 - ArrayIndexOutOfBoundsException:数组访问...
使用`try-catch-finally`块来捕获并处理可能出现的异常,如`IOException`、`NullPointerException`等,确保程序在遇到错误时能优雅地退出或提供反馈。 4. **集合框架实例** Java集合框架包括ArrayList、LinkedList...
- `RuntimeException`是运行时异常,包括`NullPointerException`, `NumberFormatException`, `ArrayIndexOutOfBoundsException`, `ClassCastException`, `ArithmeticException`等,通常不需要显式捕获。 - `Check...
在finally块中,`conn.close()`用于关闭连接,但在出现异常时,`conn`可能为null,因此需要进行null检查以防止NullPointerException。 7. **效率优化**: 虽然示例代码能正常工作,但为了提高性能,可以考虑使用`...
运行时异常是程序运行过程中可能出现的异常,如NullPointerException。 5. **集合框架** - **ArrayList和LinkedList的区别?** ArrayList基于动态数组,访问速度快,插入删除慢;LinkedList基于双向链表,插入删除...
在Java中,使用JDBC进行数据库操作包括加载驱动、建立连接、创建Statement或PreparedStatement对象、执行SQL语句、处理结果集以及关闭资源。在分页查询中,可能还需要使用PreparedStatement设置LIMIT子句。 8. **...
49. **NullPointerException**:空引用异常,访问空对象时抛出。 50. **ClassNotFoundException**:类没有找到异常,加载类时找不到对应的.class文件。 51. **NumberFormatException**:数字格式异常,解析字符串...
- **运行时异常**:由运行时环境检测到错误而抛出的异常,如`NullPointerException`。 - **错误**:通常表示无法预见的异常情况,如`OutOfMemoryError`。 #### 10. Java语言学习六大要点 Java学习过程中,应重点...