package onlyfun.caterpillar; import java.io.FileInputStream; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Properties; public class BasicDBSource implements DBSource { private Properties props; private String url; private String user; private String passwd; private int max; // 連接池中最大Connection數目 private List<Connection> connections; public BasicDBSource() throws IOException, ClassNotFoundException { this("jdbc.properties"); } public BasicDBSource(String configFile) throws IOException, ClassNotFoundException { props = new Properties(); props.load(new FileInputStream(configFile)); url = props.getProperty("onlyfun.caterpillar.url"); user = props.getProperty("onlyfun.caterpillar.user"); passwd = props.getProperty("onlyfun.caterpillar.password"); max = Integer.parseInt(props.getProperty("onlyfun.caterpillar.poolmax")); Class.forName(props.getProperty("onlyfun.caterpillar.driver")); connections = new ArrayList<Connection>(); } public synchronized Connection getConnection() throws SQLException { if(connections.size() == 0) { return DriverManager.getConnection(url, user, passwd); } else { int lastIndex = connections.size() - 1; return connections.remove(lastIndex); } } public synchronized void closeConnection(Connection conn) throws SQLException { if(connections.size() == max) { conn.close(); } else { connections.add(conn); } } }