首先,编写数据库配置文件,命名为dbcp.properties。
driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://127.0.0.1:1433
username=stu
password=123
initialSize=10
maxActive=50
maxIdle=20
minIdle=5
maxWait=60000
characterEncoding=UTF8
defaultAutoCommit=true
该文件的编写遵循properties文件的编写方式,采用名值对的形式。比较重要的参数包括:driverClassName指明加载的连接驱动器的全包名。url为访问数据库的url,username和password为访问数据库的用户名和密码。initialSize为初始连接池的大小,其他参数含义可以根据英文单词猜出。
其次,编写使用该类的工具类。
import org.apache.commons.dbcp2.BasicDataSourceFactory;
import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.Statement;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
/**
* Created by dan on 2015/12/2.
*/
public class DbcpJdbcUtil {
private static DataSource ds = null;
static {
try{
InputStream in = DbcpJdbcUtil.class.getClassLoader().getResourceAsStream("dbcp.properties");
Properties prop = new Properties();
prop.load(in);
ds = BasicDataSourceFactory.createDataSource(prop);
}catch(Exception e){
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException{
return ds.getConnection();
}
public static void release(Connection conn, Statement st, ResultSet rs){
if (rs != null){
try{
rs.close();
}catch(Exception e){
e.printStackTrace();
}
}
if (st != null){
try{
st.close();
}catch(Exception e){
e.printStackTrace();
}
}
if (conn != null){
try{
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
需要在类路径中加载的包包括:commons-dbcp2-2.1.1.jar
在该类中,使用类加载的方式加载配置文件,注意配置文件的名字一定要与刚刚写的properties一致。
使用类加载的方式,一定要注意properties在src目录的根目录下,不是类的包中。
在整个项目中,一般只申请一个连接池,所以该类的连接池对象被声明为类变量,调用该类变量,获取连接的方法getConnection被声明为类方法。
release统一负责释放所有与数据库相关的连接资源,其中connection的释放实际上是将conncetion对象重新放回到连接池中。
当建立完成上述类后,就可以通过调用getConnection方法获取链接。
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
public static void main(String[] args) {
try {
//Connection conn = JdbcUtil.getConnection();
Connection conn = DbcpJdbcUtil.getConnection();
//Connection conn = C3P0JdbcUtil.getConnection();
Statement stmt = conn.createStatement();
String sql = "select sn,sex from s";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
System.out.println(rs.getString("sn") + " " + rs.getString("sex"));
}
C3P0JdbcUtil.release(conn, stmt, rs);
} catch (SQLException e) {
e.printStackTrace();
}
}
}