JDBC操作3:数据库连接池、德鲁伊连接池使用、封装连接池工具类、ThreadLocal以及DBUtils使用
目录1. 数据库连接池2. 德鲁伊连接池使用3.ThreadLocal4. 封装连接池工具类5. DBUtils使用1. 数据库连接池1、什么是数据库连接池2、使用连接池,可以自己创建连接池,实现DataSource接口就可以了,但是实际操作中,一般不去自己实现,使用开源连接池进行使用3、常用开源连接池:DBCP、C3P0、Druid(德鲁伊)4、使用德鲁伊连接,引入jar包2. 德鲁伊连接池使用
目录
1. 数据库连接池
1、什么是数据库连接池
2、使用连接池,可以自己创建连接池,实现DataSource接口就可以了,但是实际操作中,一般不去自己实现,使用开源连接池进行使用
3、常用开源连接池:DBCP、C3P0、Druid(德鲁伊)
4、使用德鲁伊连接,引入jar包
2. 德鲁伊连接池使用
1、导入德鲁伊连接池jar包
2、编写德鲁伊连接池代码
(1)创建properties类型配置文件,设置数据库连接池信息
/** * 德鲁伊连接池 */ public class PoolDemo1 { public static void main(String[] args) throws Exception { //读取properties内容 Properties properties = new Properties(); //properties.load(new FileInputStream("C:\\Users\\lenovo\\Desktop\\0621\\jdbc_database\\src\\db.properties")); //通过类加载器读取类路径下内容 properties.load(PoolDemo1.class.getClassLoader().getResourceAsStream("db.properties")); DataSource dataSource = DruidDataSourceFactory.createDataSource(properties); //通过返回数据源对象,获取数据库连接 Connection connection = dataSource.getConnection(); System.out.println(connection); } }
3.ThreadLocal
JDK 1.2的版本中就提供java.lang.ThreadLocal,为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。
ThreadLocal用于保存某个线程共享变量,原因是在Java中,每一个线程对象中都有一个ThreadLocalMap<ThreadLocal, Object>,其key就是一个ThreadLocal,而Object即为该线程的共享变量。而这个map是通过ThreadLocal的set和get方法操作的。对于同一个static ThreadLocal,不同线程只能从中get,set,remove自己的变量,而不会影响其他线程的变量。
1、ThreadLocal.get: 获取ThreadLocal中当前线程共享变量的值。
2、ThreadLocal.set: 设置ThreadLocal中当前线程共享变量的值。
3、ThreadLocal.remove: 移除ThreadLocal中当前线程共享变量的值。
4. 封装连接池工具类
/** * 数据库连接池工具类 */ public class JdbcUtils { //定义成员变量 private static DataSource dataSource; private static ThreadLocal<Connection> threadLocal; //静态代码块 static { try { //加载连接池配置文件,创建DataSource Properties properties = new Properties(); properties.load(JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties")); dataSource = DruidDataSourceFactory.createDataSource(properties); //初始化threadLocal对象 threadLocal = new ThreadLocal<>(); } catch (Exception e) { e.printStackTrace(); } } //获取数据库连接池连接 public static Connection getConnection() { //1 ThreadLocal可以把线程和连接绑定在一起 //从ThreadLocal获取连接 Connection connection = threadLocal.get(); //如果获取不到,dataSource取出来,放到ThreadLocal里面 if(connection == null) { try { connection = dataSource.getConnection(); threadLocal.set(connection); } catch (SQLException e) { e.printStackTrace(); } } //如果获取到,直接返回 return connection; } //释放资源 public void closeResource() { Connection connection = threadLocal.get(); if(connection != null) { try { //close() connection.close(); threadLocal.remove(); } catch (SQLException e) { e.printStackTrace(); } } } }
使用封装工具类
public class TestUtils { public static void main(String[] args) { PreparedStatement preparedStatement = null; ResultSet rs = null; try { //获取数据库连接 Connection connection = JdbcUtils.getConnection(); String sql = "select * from dept"; preparedStatement = connection.prepareStatement(sql); rs = preparedStatement.executeQuery(); while(rs.next()) { System.out.println(rs.getString("dname")); } } catch (SQLException e) { e.printStackTrace(); } finally { try { rs.close(); preparedStatement.close(); JdbcUtils.closeResource(); } catch (SQLException e) { e.printStackTrace(); } } } }
5. DBUtils使用
1、Apache-DBUtils是针对jdbc封装的工具类,使用DBUtils简化jdbc开发代码,没有改变jdbc效率
2、导入DBUtils的jar包
3、增加、修改和删除
//删除操作 @Test public void test03() throws Exception { //创建QueryRunner对象 QueryRunner queryRunner = new QueryRunner(); // 编写sql语句 String sql = "delete from dept where did=?"; //调用方法执行sql queryRunner.update(JdbcUtils.getConnection(),sql,200); //释放资源 JdbcUtils.closeResource(); } //修改操作 @Test public void test02() throws Exception { //创建QueryRunner对象 QueryRunner queryRunner = new QueryRunner(); // 编写sql语句 String sql = "update dept set dname=? where did=?"; //调用方法执行sql queryRunner.update(JdbcUtils.getConnection(),sql,"研发测试部",200); //释放资源 JdbcUtils.closeResource(); } //添加操作 @Test public void test01() throws Exception { //创建QueryRunner对象 QueryRunner queryRunner = new QueryRunner(); // 编写sql语句 String sql = "insert into dept values(?,?)"; //调用方法执行sql queryRunner.update(JdbcUtils.getConnection(),sql,200,"测试部"); //释放资源 JdbcUtils.closeResource(); }
4、查询操作
//查询操作-返回一条记录 @Test public void test01() throws Exception { //创建QueryRunner对象 QueryRunner runner = new QueryRunner(); //编写sql String sql = "select * from dept where did=?"; //调用方法执行sql语句 Dept dept = runner.query(JdbcUtils.getConnection(),sql,new BeanHandler<Dept>(Dept.class),1); System.out.println(dept); //释放资源 JdbcUtils.closeResource(); } //查询操作-返回多条记录 @Test public void test02() throws Exception { QueryRunner runner = new QueryRunner(); String sql = "select * from dept"; List<Dept> list = runner.query(JdbcUtils.getConnection(), sql, new BeanListHandler<Dept>(Dept.class)); System.out.println(list); JdbcUtils.closeResource(); }
更多推荐
所有评论(0)