程序执行大概4小时候出错,之前一直正常,该关闭的连接都关闭了,因为程序是定时执行的,经测试和运行次数无关java.sql.SQLException: 关闭的连接
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.driver.OracleConnection.privatePrepareStatement(OracleConnection.java:895)
at oracle.jdbc.driver.OracleConnection.prepareStatement(OracleConnection.java:802)
at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.logicalcobwebs.proxool.ProxyConnection.invoke(ProxyConnection.java:68)
at org.logicalcobwebs.cglib.proxy.Proxy$ProxyImpl$$EnhancerByCGLIB$$355c63a8.prepareStatement(<generated>)
at com.anyi.erp.inf.bus.AppInf.selectAddDbi(AppInf.java:1551)
at com.anyi.erp.inf.socket.StartBudgetBalance.go(StartBudgetBalance.java:112)
at com.anyi.erp.inf.socket.StartBudgetBalance.run(StartBudgetBalance.java:53)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)获取连接的方法
public static Connection getConn() throws Exception{
int type = 2;//1为正式环境连接,2为测试模式连接
Connection conn = null;
if (type == 1) {
//conn = InterfaceDAOFactory.getInstance().getConnection();
}else{
try {
conn = InterfaceHibernateSessionFactory.getSession().connection();//自己写连接池
System.out.println(conn);
} catch (Exception ex) {
ex.printStackTrace();
}
}
if (conn == null) {
throw new Exception("数据库连接中断!");
}
return conn;
}hibernate3加载proxool.xml,版本0.8.3
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory>
<property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
<property name="hibernate.proxool.pool_alias">INTERDBPool</property>
<property name="hibernate.proxool.xml">interfaceproxool.xml</property>
<property name="show_sql">false</property>
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
</session-factory></hibernate-configuration>
连接池配置文件
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>INTERDBPool</alias>
<driver-url>jdbc:oracle:thin:@127.0.0.1:1521:db</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver-properties>
<property name="user" value="zbjk" />
<property name="password" value="1" />
</driver-properties>
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<prototype-count>10</prototype-count>
<maximum-connection-count>10</maximum-connection-count>
<minimum-connection-count>2</minimum-connection-count>
<maximum-active-time>30000</maximum-active-time>
</proxool>
</something-else-entirely>
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.driver.OracleConnection.privatePrepareStatement(OracleConnection.java:895)
at oracle.jdbc.driver.OracleConnection.prepareStatement(OracleConnection.java:802)
at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.logicalcobwebs.proxool.ProxyConnection.invoke(ProxyConnection.java:68)
at org.logicalcobwebs.cglib.proxy.Proxy$ProxyImpl$$EnhancerByCGLIB$$355c63a8.prepareStatement(<generated>)
at com.anyi.erp.inf.bus.AppInf.selectAddDbi(AppInf.java:1551)
at com.anyi.erp.inf.socket.StartBudgetBalance.go(StartBudgetBalance.java:112)
at com.anyi.erp.inf.socket.StartBudgetBalance.run(StartBudgetBalance.java:53)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)获取连接的方法
public static Connection getConn() throws Exception{
int type = 2;//1为正式环境连接,2为测试模式连接
Connection conn = null;
if (type == 1) {
//conn = InterfaceDAOFactory.getInstance().getConnection();
}else{
try {
conn = InterfaceHibernateSessionFactory.getSession().connection();//自己写连接池
System.out.println(conn);
} catch (Exception ex) {
ex.printStackTrace();
}
}
if (conn == null) {
throw new Exception("数据库连接中断!");
}
return conn;
}hibernate3加载proxool.xml,版本0.8.3
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory>
<property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
<property name="hibernate.proxool.pool_alias">INTERDBPool</property>
<property name="hibernate.proxool.xml">interfaceproxool.xml</property>
<property name="show_sql">false</property>
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
</session-factory></hibernate-configuration>
连接池配置文件
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>INTERDBPool</alias>
<driver-url>jdbc:oracle:thin:@127.0.0.1:1521:db</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver-properties>
<property name="user" value="zbjk" />
<property name="password" value="1" />
</driver-properties>
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<prototype-count>10</prototype-count>
<maximum-connection-count>10</maximum-connection-count>
<minimum-connection-count>2</minimum-connection-count>
<maximum-active-time>30000</maximum-active-time>
</proxool>
</something-else-entirely>
<property name="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</property>
<property name="hibernate.c3p0.max_size">
200
</property>
<property name="hibernate.c3p0.min_size">
5
</property>
<property name="hibernate.c3p0.timeout">
120
</property>
<property name="hibernate.c3p0.max_statements">
100
</property>
<property name="hibernate.c3p0.idle_test_period">
120
</property>
<property name="hibernate.c3p0.acquire_increment">
2
</property>
myConn = interfaceDbUtil.getConn();
mySt = myConn.prepareStatement(sSQL);是从mySt = myConn.prepareStatement(sSQL)这句报的错,数据库是9i的,我配了2个连接池,分别连接同一个数据库实例里的2个用户,结果4小时左右都报错了,都是mySt = myConn.prepareStatement(sSQL)出错,错误的信息完全一样
程序是用JAVA的timer来设定时间定时执行的,对oracle不怎么会用,没仔细研究过