下面的朋友们是我的代码,用于构建一个通用类,以便让DB连接在独立的应用程序中执行迭代。
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class DBHandler {
private static DBHandler datasource;
private static ComboPooledDataSource cpds;
private static String user,ip;
private static String db="";
static DBHandler database;
static Connection con;
static {
ip="my ip address";
db="test";
}
public static Connection dbconnection(){
try {
if(database==null){
database=new DBHandler();
}
if(cpds.getNumConnections()==cpds.getMaxPoolSize()){
//cpds.close();//what will happen if i use close() like this.
database=new DBHandler();//will this line creates a new datasource
}
return database.getConnection();
} catch (Exception e) {
}
return null;
}
DBHandler() throws IOException, SQLException, PropertyVetoException {
String url;
if(ip.startsWith("sqlserver")) {
url="jdbc:" +ip+";databaseName="+db+";selectMethod=cursor";
user="user";
}
else {
url="jdbc:" + ip + "/"+db;
user="root";
}
cpds = new ComboPooledDataSource();
cpds.setDriverClass("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //loads the jdbc driver
cpds.setJdbcUrl(url);
cpds.setUser("user");
cpds.setPassword("password");
cpds.setMinPoolSize(2);
cpds.setAcquireIncrement(1);
cpds.setMaxPoolSize(15);
cpds.setMaxIdleTime(120);
}
public static DBHandler getInstance() throws IOException, SQLException, PropertyVetoException {
if (datasource == null) {
datasource = new DBHandler();
return datasource;
} else {
return datasource;
}
}
public Connection getConnection() throws SQLException {
Connection con=null;
con= this.cpds.getConnection();
return con;
}
}
我的问题在几次交易后,我的连接已经结束,应用程序处于挂起状态。
疑问1:这段代码将创建新的数据源或对同一个池的新引用。 疑问2:如何创建通用方法来关闭同一类中的空闲连接,而不是我使用连接的地方。 我的setMaxIdleTime将在指定时间后关闭()与池的连接。
如何在一段时间后关闭连接。 请帮帮我,我推荐谷歌,但没有找到任何相关的答案
我们只是使用一些核心概念,因此不能使用框架来使用通用的ConnectionPool类。