1.导入jar包
druid-1.0.9.jar
导入数据库驱动jar包
2.定义配置文件
properties形式
可以叫任意名称,可以放置在任意目录下。(意味着不能自动加载,需要手动导入)
3.加载配置文件 properties
4.获取数据库连接池对象:通过工厂类来获取
5.获取连接:getConnection
配置文件
jar包
文档
源码
基本使用
package cn.itcust.datasource.druid; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.InputStream; import java.sql.Connection; import java.util.Properties; /** * Druid演示 */ public class DruidDemo1 { public static void main(String[] args) throws Exception { //1.导如jar包 //2.定义配置文件 //3.加载配置文件 // 创建配置文件的对象 Properties pro = new Properties(); //用getClassLoader().getResourceAsStream直接返回字节输入流 InputStream is = DruidDemo1.class.getClassLoader().getResourceAsStream("druid.properties"); //用load加载文件,并且还会把属性值装载到集合 pro.load(is); //4.获取连接池对象 DataSource ds = DruidDataSourceFactory.createDataSource(pro); //5.获取数据库连接 Connection conn = ds.getConnection(); System.out.println(conn); } }
package cn.itcust.datasource.druid; import cn.itcust.datasource.utils.JDBCUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public class DruidDemo2 { public static void main(String[] args) { /** * 完成添加操作 * */ Connection conn = null; PreparedStatement pstmt = null; try { //1.获取连接对象 conn = JDBCUtils.getConnection(); //2.定义SQL String sql = "insert into user values(null,?,?)"; //3.获取pstmt对象 pstmt = conn.prepareStatement(sql); //给问号赋值 pstmt.setString(1, "dawang"); pstmt.setString(2, "789"); //4.执行SQL int count = pstmt.executeUpdate(); System.out.println(count); } catch (SQLException e) { e.printStackTrace(); }finally { //释放资源 JDBCUtils.close(pstmt,conn); } } }
定义工具类,简化操作
原因:连接池只有需要一个
不定义就会非常麻烦
1.定义一个工具类 JDBCUtils
2.提供静态代码块,加载配置文件,初始化连接池对象
3.提供方法
1.获取连接方法:通过数据库连接池来获取连接对象
2.释放资源
3.获取连接池的方法(有的工具类、小框架里,只需要连接池不需要连接对象,会自己调用连接池的方法)
package cn.itcust.datasource.utils; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; /** * Druid连接池的工具类 */ public class JDBCUtils { //定义一个成员变量 Datasoutce private static DataSource ds; //初始化,赋值 static { try { //1.加载配置文件,先创建配置文件对象 Properties pro = new Properties(); //2.通过load方法加载 pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties")); //3.获取连接池 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 void close(Statement stmt, Connection conn){ if (stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null){ try { conn.close();//归还数据库连接 } catch (SQLException e) { e.printStackTrace(); } } /** * 还有一种简化的操作 * 两个参数也调用三个参数的方法,第一个不给值就行了 * */ // public static void close(null,stmt,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(); } } } /** *获取连接池的方法 * */ public static DataSource getDataSource(){ return ds; } }
配置文件
#注册驱动
driverClassName=com.mysql.jdbc.Driver
#数据库连接地址
url=jdbc:mysql:///db4
#用户名
username=root
#密码
password=ROOT
#初始化连接数量
initialSize=5
#最大连接
maxActive=10
#最大等待时间
maxWait=3000