Hibernate3中使用连接池c3p0遇到的问题
在实际的工作中使用Hibernate3,连接池是一个很重要的环节。在Hibernate3中可以使用第三方c3p0和Proxool。
我在不使c3p0时,对数据的增删改操作都测试通过。在此基础上,按文档的所述加上c3p0的配置后,可以查询,也可以添加记录,但是抛出了异常。
Problem with checked-in Statement, discarding.
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.mchange.v2.c3p0.stmt.GooGooStatementCache.refreshStatement(GooGooStatementCache.java:460)
at com.mchange.v2.c3p0.stmt.GooGooStatementCache.checkinStatement(GooGooStatementCache.java:139)
at com.mchange.v2.c3p0.impl.C3P0PooledConnection$1WrapperStatementHelper.doClose(C3P0PooledConnection.java:511)
at com.mchange.v2.c3p0.impl.C3P0PooledConnection$2.close(C3P0PooledConnection.java:570)
at org.hibernate.jdbc.AbstractBatcher.closePreparedStatement(AbstractBatcher.java:369)
at org.hibernate.jdbc.AbstractBatcher.closeStatement(AbstractBatcher.java:178)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:158)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:226)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:136)
at org.hibernate.event.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:271)
at org.hibernate.event.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:24)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:719)
at sample.Hello.saveOrUpdate(Hello.java:43)
at sample.Hello.main(Hello.java:28)
程序代码为:
Hello_Bean bean = new Hello_Bean(233, "name", "address");
try {
Session session = HibernateUtil.CurrentSession();//功能为取得一个Session
Transaction tx = session.beginTransaction();
session.save(bean);
session.flush();
//session.saveOrUpdate(bean);
log.info("Insert id = " + bean.getId());
tx.commit();
HibernateUtil.closeSession();
}
catch (Exception e) {
e.printStackTrace();
}
配置为:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory>
<!--properties-->
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@172.19.100.29:1521:xxpttest</property>
<property name="hibernate.connection.username">pzf</property>
<property name="hibernate.connection.password">pzf</property>
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property name="hibernate.c3p0.min_size">2</property>
<property name="hibernate.c3p0.max_size">5</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_statements">50</property>
<!--<property name="hibernate.show_sql">true</property> -->
<!-- Mapping files -->
<mapping resource="sample/Hello_Bean.hbm.xml"/>
<!-- cache settings -->
<class-cache class="sample.Hello_Bean" usage="read-write"/>
</session-factory>
</hibernate-configuration>
敬请各位指点。