Привет, друзья, ниже - мой код для создания универсального класса для получения соединений с БД для выполнения итераций в автономных приложениях.
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 закрыть () подключение к пулу через указанное время.
Как закрыть подключение через некоторое время.Пожалуйста, помогите мне, я ссылаюсь на Google, но не нашел никакого связанного ответа
Мы просто используем некоторые основные понятия, поэтому не можем использовать каркасы для использования универсального класса ConnectionPool.