如何使用Druid连接池技术连接数据库?
1、什么是数据库连接池?
其实就是存放数据库连接的一个容器
2、数据库连接池的执行过程
当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器获取连接对象,用户访问完之后,会将连接对象归还给容器
3、使用数据库的优势
节约资源
用户访问高效
4、数据库连接池技术有哪些?
C3P0
Druid(由阿里巴巴提供)
5、如何使用Druid连接池技术连接数据库?
1、一般方法
(1)导入jar包 druid-1.0.9.jar
(2)定义配置文件(是properties形式的,任意名称,可以放到任意目录下,一般放到src目录下)
文件内容如下:
(3)加载配置文件。采用Properties方法
(4)获取数据库连接池对象:通过工厂来获取 DruidDataSourceFactory
(5)获取连接getConnection
public class DruidDemo1 {
public static void main(String[] args) throws Exception {
//1.导入jar包
//2.定义配置文件
//3.加载配置文件
Properties pro = new Properties();
InputStream is = DruidDemo1.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//4.获取连接池对象
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
//5.获取连接对象
Connection conn = ds.getConnection();
}
}
这里没有执行sql语句!
2、定义工具类方法(省事)
(1)、定义一个类 JDBCUtils
(2)、提供静态代码块加载配置文件,初始化连接池对象
(3)、要提供的方法
获取连接池方法:通过数据库连接池获取连接
获取连接池方法
释放资源
主函数
public class DruidDemo2 {
public static void main(String[] args) {
//给user表添加一条记录
PreparedStatement pstmt = null;
Connection conn = null;
//1.获取连接
try {
conn = Utils.getConnection();
//2.定义sql
String sql = "insert into user values(null,?,?,?)";
//3.获取pstmt对象
pstmt = conn.prepareStatement(sql);
//4.给?赋值
pstmt.setString(1,"wangwu");
pstmt.setString(2, "345");
pstmt.setInt(3, 3000);
//5.执行sql
int count = pstmt.executeUpdate();
System.out.println(count);
} catch (SQLException e) {
e.printStackTrace();
}finally {
//6.释放资源
Utils.close(pstmt, conn);
}
}
}
JDBCUtils工具类:
public class Utils {
//1.定义成员变量 DataSource
private static DataSource ds;
static {
//1.加载配置文件
Properties pro = new Properties();
try {
//2.获取DataSource
pro.load(Utils.class.getClassLoader().getResourceAsStream("druid.properties"));
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
//获取连接
public static Connection getConnection() throws SQLException{
return ds.getConnection();
}
//获取连接池方法
public static DataSource getDataSource() {
return ds;
}
//释放资源
public static void close(Statement pstmt, Connection conn){
close(null,pstmt,conn);
}
public static void close(ResultSet rs,Statement stmt,Connection conn){
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}