- 浏览: 37184 次
- 性别:
- 来自: 杭州
文章分类
最新评论
项目发布在WAS5上的,采用ORACLE11G数据库,通过WAS的数据源连接,
在以下语句时出错了:PreparedStatement pstmt = conn.prepareStatement(sql);
出错信息是:
java.lang.NullPointerException
at oracle.jdbc.dbaccess.DBData.clearItem(DBData.java:431)
at oracle.jdbc.dbaccess.DBDataSetImpl.clearItem(DBDataSetImpl.java:3528)
at oracle.jdbc.driver.OraclePreparedStatement.clearParameters(OraclePreparedStatement.java:3401)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.resetStatement(WSJdbcConnection.java:1719)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:1415)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:1381)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:497)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:94)
看上去像是数据库驱动的问题,于是就挨个换驱动。
但是还是不行……
程序上也莫名其妙,看不出问题。
网上有这种解决方法:(http://www.blogjava.net/Unmi/archive/2007/04/21/124160.html)
Hibernate程序使用WAS连接池提交事务时出现 NullPointerException
Hibernate应用程序部署到WebSphere Application Server 5.1上,使用WAS的连接池,程序在处理了比较多的 session.save(object)操作之后,在执行提交事物 trans.commit()之时出现以下异常
java.lang.NullPointerException
at oracle.jdbc.dbaccess.DBData.clearItem(DBData.java:431)
at oracle.jdbc.dbaccess.DBDataSetImpl.clearItem(DBDataSetImpl.java:3528)
at oracle.jdbc.driver.OraclePreparedStatement.clearParameters(OraclePreparedStatement.java:3401)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.resetStatement(WSJdbcConnection.java:1719)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:1415)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:1381)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:497)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:94)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:87)
at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:218)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2220)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:52)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:28)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
因为开发用的是Tomcat应用服务器,配置的Tomcat连接池,所以在本地跑怎么操作都不会有这种错误,费了好一翻工夫也没能定位,查错中总是受 java.lang.NullPointerException 的影响,一遍一遍地审视代码,会是哪个变量没有初始化呢?
自我折磨了好一阵子,无奈之时去网上Google一把(其实早该这么做的,也就因为怀疑问题出在自己写的代码),才发现原来别人也遇到过类似的问题, Hibernate的官方论坛也有这种讨论.
http://www.google.cn/search?complete=1&hl=zh-CN&newwindow=1&q=+oracle.jdbc.dbaccess.DBDataSetImpl.clearItem&meta=
网上有说是驱动的问题,有说是Hibernate数据库方言的问题,也有说最大缓存语句的问题
1. Delete Object error http://forum.hibernate.org/viewtopic.php?t=934050
其中提到的有换 Oracle 数据库驱动, 有人试着换成 ojdcbc14.jar 解决,最后有人说到设置 c3p0 的hibernate.c3p0.max_statements 为 0 就行
2. NullPointerException on transaction.commit() http://forum.hibernate.org/viewtopic.php?t=973414&sid=04bbd1a8951b3051c52e374a7888d35e
回贴中说是把 org.hibernate.dialect.OracleDialect 换成 org.hibernate.dialect.Oracle9Dialect, 但有人采取这种做法无效,何况我用的还是 8.0.5 的Oracle,I 都不带.
3. WAS 6上DataSource的问题 http://www.itpub.net/743938.html
这篇贴主就直接撇名了把Data Source的Command Cache只能设为0,一旦大于0就报以上错误,看来这是一个比较明确的解决办法。于是我就在WAS的控制台下把我所用连接池的语句高速缓存大小 设置为 0 ,然后重启WAS,问题得到解决。就是不知道不缓存 Statement 对性能会产生怎么样的影响,须进一步了解一下。
我也试过换数据库驱动的办法,把原有的驱动换成在我本地可用的class12.jar包,没有效果。又换成ojdbc.jar包试试,还是没用。
总结出现以上错误的解决办法,设置WAS的数据源属性的 Command Cache(也就是语句高速缓存大小)为0, 如果用的别的连接池产品,要设置相应的 max_statements 为 0,属性名具体参考对应连接池产品。
注意,改了WAS的数据源设置需要重启WAS的。
直接试了第3种方式,事实证明是有效果的。
咨询了客服,说这个“语句高速缓存大小”是指同时运行的sql语句及语句长度的限制。
设为0则是不限制。
说是,如果服务器性能比较好,用户不是特别多的话,可以这样设。
在以下语句时出错了:PreparedStatement pstmt = conn.prepareStatement(sql);
出错信息是:
java.lang.NullPointerException
at oracle.jdbc.dbaccess.DBData.clearItem(DBData.java:431)
at oracle.jdbc.dbaccess.DBDataSetImpl.clearItem(DBDataSetImpl.java:3528)
at oracle.jdbc.driver.OraclePreparedStatement.clearParameters(OraclePreparedStatement.java:3401)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.resetStatement(WSJdbcConnection.java:1719)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:1415)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:1381)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:497)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:94)
看上去像是数据库驱动的问题,于是就挨个换驱动。
但是还是不行……
程序上也莫名其妙,看不出问题。
网上有这种解决方法:(http://www.blogjava.net/Unmi/archive/2007/04/21/124160.html)
Hibernate程序使用WAS连接池提交事务时出现 NullPointerException
Hibernate应用程序部署到WebSphere Application Server 5.1上,使用WAS的连接池,程序在处理了比较多的 session.save(object)操作之后,在执行提交事物 trans.commit()之时出现以下异常
java.lang.NullPointerException
at oracle.jdbc.dbaccess.DBData.clearItem(DBData.java:431)
at oracle.jdbc.dbaccess.DBDataSetImpl.clearItem(DBDataSetImpl.java:3528)
at oracle.jdbc.driver.OraclePreparedStatement.clearParameters(OraclePreparedStatement.java:3401)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.resetStatement(WSJdbcConnection.java:1719)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:1415)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:1381)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:497)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:94)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:87)
at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:218)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2220)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:52)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:28)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
因为开发用的是Tomcat应用服务器,配置的Tomcat连接池,所以在本地跑怎么操作都不会有这种错误,费了好一翻工夫也没能定位,查错中总是受 java.lang.NullPointerException 的影响,一遍一遍地审视代码,会是哪个变量没有初始化呢?
自我折磨了好一阵子,无奈之时去网上Google一把(其实早该这么做的,也就因为怀疑问题出在自己写的代码),才发现原来别人也遇到过类似的问题, Hibernate的官方论坛也有这种讨论.
http://www.google.cn/search?complete=1&hl=zh-CN&newwindow=1&q=+oracle.jdbc.dbaccess.DBDataSetImpl.clearItem&meta=
网上有说是驱动的问题,有说是Hibernate数据库方言的问题,也有说最大缓存语句的问题
1. Delete Object error http://forum.hibernate.org/viewtopic.php?t=934050
其中提到的有换 Oracle 数据库驱动, 有人试着换成 ojdcbc14.jar 解决,最后有人说到设置 c3p0 的hibernate.c3p0.max_statements 为 0 就行
2. NullPointerException on transaction.commit() http://forum.hibernate.org/viewtopic.php?t=973414&sid=04bbd1a8951b3051c52e374a7888d35e
回贴中说是把 org.hibernate.dialect.OracleDialect 换成 org.hibernate.dialect.Oracle9Dialect, 但有人采取这种做法无效,何况我用的还是 8.0.5 的Oracle,I 都不带.
3. WAS 6上DataSource的问题 http://www.itpub.net/743938.html
这篇贴主就直接撇名了把Data Source的Command Cache只能设为0,一旦大于0就报以上错误,看来这是一个比较明确的解决办法。于是我就在WAS的控制台下把我所用连接池的语句高速缓存大小 设置为 0 ,然后重启WAS,问题得到解决。就是不知道不缓存 Statement 对性能会产生怎么样的影响,须进一步了解一下。
我也试过换数据库驱动的办法,把原有的驱动换成在我本地可用的class12.jar包,没有效果。又换成ojdbc.jar包试试,还是没用。
总结出现以上错误的解决办法,设置WAS的数据源属性的 Command Cache(也就是语句高速缓存大小)为0, 如果用的别的连接池产品,要设置相应的 max_statements 为 0,属性名具体参考对应连接池产品。
注意,改了WAS的数据源设置需要重启WAS的。
直接试了第3种方式,事实证明是有效果的。
咨询了客服,说这个“语句高速缓存大小”是指同时运行的sql语句及语句长度的限制。
设为0则是不限制。
说是,如果服务器性能比较好,用户不是特别多的话,可以这样设。
发表评论
-
Oracle12c连接问题ORA-28040:没有匹配的验证协议
2014-12-15 10:19 11892使用hibernate 连接oracle12c时报名如下 OR ... -
ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务
2014-12-15 09:59 578oracle12c安装成功后,客户端连接报错误信息“ORA-1 ... -
ORACLE存储过程传自定义数组参数问题
2014-10-10 09:50 1897问题来自于通过存储过程保存数据时出现以下错误 java.sql ... -
PreparedStatement的setString()长度
2014-09-09 11:40 877前段时间在做一登录模块时,遇到一个文本输入的问题。即,文本的最 ... -
ORA-00376 此时无法读取文件
2014-01-10 11:36 2830在查询一个表的时候,进行count(*)统计的时候,报了下面这 ... -
ORACLE查看并修改最大连接数
2013-11-15 12:37 501第一步,在cmd命令行,输 ... -
IO异常
2013-10-12 14:09 0IO error java.net.SocketExcepti ... -
java.sql.SQLException: Io 异常: Connection refused
2013-08-23 16:46 0程序连接oracle11g数据库时出现以下错误: java.s ... -
java.sql.SQLException: Io 异常: Got minus one from a read call解决综合
2013-08-23 16:36 2218Caught: java.sql.SQLException: ... -
Oracle中的DDL语句
2013-08-15 15:35 921SQL StatementsSELECTData retrie ... -
理解oracle中连接和会话
2013-08-15 09:42 7011. 概念不同: ... -
oracle临时表的用法总结
2013-08-14 17:39 671目前所有使用Oracle作为数据库支撑平台的应用,大部分数据量 ... -
JAVA调用oracle存储过程返回游标出现“对象不再存在”问题
2013-08-13 11:16 2450运行在was5.1上的应用某个功能在DAO中调用存储过程返回游 ...
相关推荐
在本文中,我们将深入探讨关于 WebSphere 应用部署的相关知识点,包括服务管理、应用安装与部署以及一些实用操作技巧。 首先,我们要了解如何管理 WebSphere 服务。在 Linux 环境下,可以通过 SSH 登录服务器并执行...
【标题】:WebSphere安装与卸载指南 【正文】: WebSphere是IBM推出的一款强大的企业级应用服务器,广泛应用于构建、部署和管理各种企业级应用程序。本文档将深入探讨WebSphere的安装、配置、发布应用程序以及卸载...
【关于WebSphere建立jdbc数据源】 在WebSphere应用服务器中,建立JDBC数据源是连接到数据库的关键步骤,它允许应用程序通过Java Database Connectivity (JDBC) API与数据库进行交互。以下是一个详细的步骤指南: 1...
Websphere 6.1 资料集涵盖了关于IBM的Websphere Application Server (WAS) 6.1版本的全面知识,包括安装、配置和实用操作等多个方面。Websphere是IBM提供的一个强大的企业级Java应用服务器,用于部署和管理基于Java...
WebSphere是IBM开发的一款强大的企业级应用服务器,它在IT行业内扮演着至关重要的角色,尤其在企业级Java应用程序的部署和管理方面。本实验报告基于吉林大学的WebSphere课程,涵盖了八次实验的内容,旨在帮助学生...
1. **数据库插入数据异常**:当遇到`java.lang.NullPointerException`错误,特别是在Oracle JDBC操作中,可能是由于数据源配置或连接池设置不当导致的。解决方案是将连接池的语句高速缓存大小设置为0,这有助于防止...
【标题】:Websphere 8.5安装 在IT领域,WebSphere是IBM提供的一款企业级应用服务器,常用于构建、部署和管理各种企业应用程序。本文将详细讲解WebSphere 8.5的安装过程,包括IBM Installation Manager的安装、...
### WebSphere设计与LDAP集成深度解析 #### 一、引言:目录服务与WebSphere的关系 WebSphere作为IBM的一款企业级应用服务器,提供了强大的中间件功能,包括事务处理、消息传递、安全性和集群管理等,旨在帮助企业...
### WebSphere如何打补丁 #### 一、概述 在IT行业中,中间件如IBM WebSphere Application Server (WAS)的稳定性和安全性至关重要。为了确保系统能够正常运行并避免潜在的安全漏洞,定期更新和打补丁是必不可少的...
【IBM WebSphere MQ安装包详解】 IBM WebSphere MQ,前身为IBM MQSeries,是IBM公司推出的一款企业级的消息中间件产品。它在信息技术领域扮演着至关重要的角色,为跨网络、操作系统和应用程序提供了高效、安全的...
/opt/IBM/WebSphere/AppServer/classes:/opt/IBM/WebSphere/AppServer/lib:/opt/IBM/WebSphere/AppServer/installedChannels:/opt/IBM/WebSphere/AppServer/lib/ext:/opt/IBM/WebSphere/AppServer/web/help:/opt/IBM...
"Linux下WebSphere启动停止" Linux操作系统下WebSphere服务器的启动和停止是非常重要的操作,因为这直接关系到WebSphere服务器的使用和维护。下面将详细介绍Linux下WebSphere启动停止的过程。 一、WebSphere服务器...
### 在Linux服务器上每周自动重启WebSphere服务配置 #### 知识点概述 本文档将详细介绍如何在Linux环境中设置cron任务来实现WebSphere服务的自动重启。此方法不仅适用于WebSphere服务,还可广泛应用于需要定时执行...
在WebSphere上部署CXF(CXF全称为Apache CXF,是一个开源的Java服务框架)时,可能会遇到一系列挑战。本文将深入探讨这些常见问题及其解决方案,帮助你顺利地在WebSphere应用程序服务器上运行CXF服务。 首先,理解...
WebSphere是IBM推出的一款强大的企业级应用服务器,广泛用于构建、部署和管理Java应用程序和Web服务。本合集中的入门教程旨在帮助初学者快速掌握WebSphere的基础知识和操作技巧,以便在实际工作中灵活运用。 一、...
3. "E书说明.txt" - 这个文本文件可能包含关于如何使用提供的电子书(E书)的指南,例如阅读设备要求、阅读软件安装步骤等。 总之,Websphere中文入门教程是一个全面的学习资源,涵盖了Websphere应用服务器的基础...
在深入探讨WebSphere中几个关键目录的作用及其重要性之前,我们先简要了解下WebSphere应用服务器。IBM WebSphere Application Server(简称WebSphere)是一种基于Java的企业级应用程序服务器,广泛应用于构建、部署...
### WebSphere Commerce 使用与定制详解 #### 一、引言 在本文档中,我们将详细介绍如何使用 IBM WebSphere Commerce 平台以及...通过参考以上资源,您可以获取更多关于 WebSphere Commerce 的详细信息和技术支持。
WebSphere是IBM提供的一款强大的企业级应用程序服务器,它在IT行业中扮演着至关重要的角色,尤其在构建、部署和管理企业级Web应用程序方面。WebSphere作为IBM的中间件产品,是其软件栈的核心部分,旨在帮助企业实现...