我们在进行数据库连接时,采用物理连接方式连接数据库非常消耗系统时间,物流连接实例如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
//这里我是用的postgresql数据库
public class DBFactory2 {
private final String driver = "org.postgresql.Driver";
private final String url = "jdbc:postgresql://localhost:5432/jspdb?useUnicode=true&characterEncoding=UTF-8";
private final String user = "postgres";
private final String password = "182085";
public static DBFactory2 INSTANCE;
static {
INSTANCE = new DBFactory2();
}
private DBFactory2() { super(); }
public Connection getConnection() {
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) { e.printStackTrace(); }
return conn;
}
public void closeConn(Connection conn) {
try {
if (conn != null) { conn.close(); }
} catch (SQLException e) { e.printStackTrace(); }
}
}
为了缩短时间,我们可以建立一个“连接池”,每一个物理连接成为“池”中的对象(称之为池化),连接池技术可以大幅度提升连接数据库的效率和应用程序的性能
这里我用的是tomcat自带的JDBC Pool,主要是为了方便不用去下载东西
import java.sql.Connection;import java.sql.SQLException;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.apache.tomcat.jdbc.pool.PoolProperties;
public class DBFactory {
private static DataSource datasource;
public static DBFactory INSTANCE;
static {
INSTANCE = new DBFactory();
setupJdbcPool();
}
public Connection getConnection() {
Connection conn = null;
try {
conn = datasource.getConnection();
} catch (SQLException e) { }
return conn;
}
private static void setupJdbcPool() {
PoolProperties p = new PoolProperties();
p.setDriverClassName("org.postgresql.Driver");
p.setUrl("jdbc:postgresql://localhost:5432/jspdb?useUnicode=true&characterEncoding=UTF-8");
p.setUsername("postgres");
p.setPassword("182085");
p.setMaxActive(100);
p.setInitialSize(10);
p.setMaxWait(10000);
p.setMaxIdle(50);
p.setMinIdle(10);
p.setDefaultAutoCommit(true);
datasource = new DataSource();
datasource.setPoolProperties(p);
}
public void closeConn(Connection conn) {
// TODO Auto-generated method stub
}
}
这样连接池就可以直接拿去用了
来源:陈岗老师ppt