我有c3p0連接池的問題,我是新的c3p0。c3p0連接池充分事件連接關閉時關閉
我的桌面程序中使用的Java與MSSQL 2008R2 JDBC驅動程序我用的是JTDS 和連接池,我使用C3P0
我有當程序運行一段時間的一些問題,該程序被卡住因爲它正在等待從池中獲得連接。
看來連接池已滿,因此sql語句無法執行。 我每次完成執行sql語句時都已關閉連接。
沒有人有c3p0這個相同的問題?
說明: 我使用ComboPooledDataSource,當我想獲得一些連接時,我使用ComboPooledDataSource,getConnection()方法。來自ComboPooledDataSource的這個getConnection()方法,它是否獲得空閒連接?
如何使連接閒置?因爲我每次獲得連接時都已關閉連接。
謝謝。
這是我使用的代碼: 一般我有2類:1.對於 數據庫連接(獲取連接和池)2.對於數據庫事務 (執行查詢語句)
public final class DBConnection {
private static DatabaseProperties dbProp;
private static ComboPooledDataSource ds;
private DBConnection(){}
private static void create(){
DatabaseProperties dp = getDatabaseProperties();
boolean success = true;
do{
try{
ds = new ComboPooledDataSource();
ds.setDriverClass("net.sourceforge.jtds.jdbc.Driver");
ds.setJdbcUrl("jdbc:jtds:sqlserver://"+ dp.getIpaddr()+":"+dp.getPort()+ "/"+dp.getDbname(););
ds.setUser(dp.getUsername());
ds.setPassword(dp.getPassword());
ds.setMinPoolSize(3);
ds.setAcquireIncrement(1);
ds.setMaxPoolSize(20);
} catch (Exception ex) {
LoggerController.log(Level.SEVERE,"Database error on creating connection",ex,LoggerController.DATABASE);
success = false;
}
}while(!success);
}
public static ComboPooledDataSource getDataSource(){
if(ds == null)create();
return ds;
}
public static Connection getConnection(){
Connection con = null;
try {
con = DBConnection.getDataSource().getConnection();
} catch (SQLException ex) {
LoggerController.log(Level.SEVERE,"Database error on getting connection",ex,LoggerController.DATABASE);
}
return con;
}
public static void close(){
ds.close();
}
}
public class DBTrans {
private DBTrans(){}
public static DataTable executeQuery(String query) throws SQLException{
DataTable dt = null;
Connection con = null;
try {
con = DBConnection.getConnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
dt = new DataTable(rs);
} catch (SQLException ex) {
throw new SQLException("QUERY= ["+query+"]\n"+ex.getMessage());
}
finally{
if(con!=null){
con.close();
}
}
return dt;
}
public static int executeUpdate(String query) throws SQLException{
int sql = 0;
Connection con = null;
try {
con = DBConnection.getConnection();
Statement stmt = con.createStatement();
sql = stmt.executeUpdate(query);
con.close();
} catch (SQLException ex) {
throw new SQLException("QUERY=["+query+"]\n"+ex.getMessage());
}
finally{
if(con!=null){
con.close();
}
}
return sql;
}
}
是否有異常痕跡? – Santosh
nope,該程序只是卡住,等待連接。 – Pichanz
你有調試/分析你的程序嗎? – Alfabravo