大家好!
我有一个应用程序,它配置了spring 3和hibernate 3.在应用程序中所有对JDBCTemplate和HibernateTemplate的数据库请求。在我的情况下,我有一个方法,它注册一个数组参数:
protected void registerArrayParameter(PreparedStatement st, int num, Long[] mas) throws SQLException {
Connection conn = jdbcTemplate.getDataSource().getConnection();
OracleConnection ocon = (OracleConnection) ((DelegatingConnection) conn).getInnermostDelegate();
ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("CCSYS.NUMBER_TABLE", ocon);
java.sql.Array sqlArray = new oracle.sql.ARRAY(arrayDescriptor, ocon, mas);
st.setArray(num, sqlArray);
}
应用程序通常在jdbcTemplate.getDataSource()。getConnection()上暂停(冻结)。
有人能知道它会是什么吗?
感谢您的回复。
答案 0 :(得分:0)
解决!
在我的情况下,我有一个类扩展BasicDataSourse:
public class SomeSource extends BasicDataSource implements Serializable {
public static final long serialVersionUID = 4467486478647684235L;
public static SomeSource dataSource;
public SomeSource(){
super();
/* implementation*/
....
dataSource = this;
}
}
我修改了方法,它注册了一个数组参数:
protected void registerArrayParameter(PreparedStatement st, int num, Long[] mas) throws SQLException {
Connection conn = jdbcTemplate.getDataSource().getConnection();
OracleConnection ocon = (OracleConnection) ((DelegatingConnection) conn).getInnermostDelegate();
ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("CCSYS.NUMBER_TABLE", ocon);
java.sql.Array sqlArray = new oracle.sql.ARRAY(arrayDescriptor, ocon, mas);
st.setArray(num, sqlArray);
/*added*/
conn.close();
ocon.close();
SomeSource.dataSource.close();
}
之后,应用钢无需暂停/冷冻......