package com.androideasyapps.phoenix.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;
/**
* Android has some issues with H2 pool, so this is a very simple pool.
*
* @author seans
*/
public class DBPool {
private String url;
private LinkedList<Connection> freeConnections = new LinkedList<Connection>();
private int active = 0;
public DBPool() {
}
DBPool(String url) {
this.url = url;
}
public static DBPool create(String jdbcUrl, String string, String string2) {
return new DBPool(jdbcUrl);
}
Connection createConnection() throws SQLException {
return DriverManager.getConnection(url);
}
public Connection getConnection() throws SQLException {
synchronized (freeConnections) {
active++;
Connection c = freeConnections.poll();
if (c == null) {
c = createConnection();
}
return c;
}
}
public void release(Connection c) throws SQLException {
active--;
synchronized (freeConnections) {
if (freeConnections.size() > 10) {
c.close();
} else {
freeConnections.add(c);
}
}
}
public int getActiveConnections() {
return active;
}
public int getPoolSize() {
return freeConnections.size();
}
public void dispose() {
synchronized (freeConnections) {
for (Connection c : freeConnections) {
try {
c.close();
} catch (Throwable t) {
t.printStackTrace();
}
}
freeConnections.clear();
}
}
}