我有以下方法,每隔几秒钟插入一大批记录。运行一段时间后,出现如下错误:
错误:通讯链接失败 从服务器成功接收到的最后一个数据包是523毫秒前。成功发送到服务器的最后一个数据包是8毫秒前。 2013年5月16日,上午9:48:30 com.mchange.v2.c3p0.stmt.GooGooStatementCache checkinStatement INFO:签入语句出现问题,被丢弃。 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:语句关闭后不允许进行任何操作。
错误:通讯链接失败
从服务器成功接收到的最后一个数据包是523毫秒前。成功发送到服务器的最后一个数据包是8毫秒前。
2013年5月16日,上午9:48:30 com.mchange.v2.c3p0.stmt.GooGooStatementCache checkinStatement INFO:签入语句出现问题,被丢弃。
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:语句关闭后不允许进行任何操作。
我用来打开和关闭连接的代码如下:
public DataControllerImp() { session = HibernateUtil.getSessionFactory().openSession(); } @Override public void saveMessage(ArrayList<Message> messages) { Transaction tx = session.beginTransaction(); for (int i = 0; i < mesages.size(); i++) { Message message = messages.get(i); try { session.save(message); if (i % 75 == 0) { // flush a batch of inserts and release memory: session.flush(); session.clear(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { session.close(); } } tx.commit(); }
我也在使用c3p0连接池。我的配置如下:
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> <property name="hibernate.c3p0.acquire_increment">1</property> <property name="hibernate.c3p0.idle_test_period">300</property> <property name="hibernate.c3p0.min_size">3</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.max_statements">50</property> <property name="hibernate.c3p0.timeout">300</property> <property name="hibernate.c3p0.acquireRetryAttempts">1</property> <property name="hibernate.c3p0.acquireRetryDelay">250</property>
我是否正确打开和关闭连接?请让我知道我可以更改些什么来停止接收此错误并暂停程序。
Transaction tx = session.beginTransaction(); try { for (int i = 0; i < mesages.size(); i++) { Message message = messages.get(i); session.save(message); if (i % 75 == 0) { // flush a batch of inserts and release memory: session.flush(); session.clear(); } } tx.commit(); }catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); tx.rollBack(); }finally{ session.close(); } }