【JavaWeb】数据库连接池和JDBC封装工具DBUtils

目录

一、Druid开源连接池的使用

1.Druid的使用

2.使用配置方式完成连接池的使用

二、C3P0开源连接池的使用

1.C3P0的连接池的概述

2.C3P0的连接池的使用

2.1手动设置参数的方式

2.2采用配置文件的方式:

三、DBUtils的概述

1.什么是DBUtils

2.为什么要学习DBUtils

3.DBUtils的API

3.1QueryRunner对象:核心运行类

3.2DbUtils

4.DBUtils的添加操作

5.DBUtils的修改操作

6.DBUtils的删除操作

7.DBUtils的使用之查询的操作

7.1查询一条记录

7.2查询多条记录:

8.DBUtils的使用之ResultSetHandler的实现类

1.ArrayHandler和ArrayListHandler

2.BeanHandler和BeanListHandler

3.MapHandler和MapListHandler

4.ColumnListHandler、ScalarHandler


一、Druid开源连接池的使用

Druid阿里旗下开源连接池产品,使用非常简单,可以与Spring框架进行快速整合。

1.Druid的使用

@Test
	/**
	 * Druid的使用:
	 * * 手动设置参数的方式
	 */
	public void demo1(){
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try{
			// 使用连接池:
			DruidDataSource dataSource = new DruidDataSource();
			// 手动设置数据库连接的参数:
			dataSource.setDriverClassName("com.mysql.jdbc.Driver");
			dataSource.setUrl("jdbc:mysql:///web_test4");
			dataSource.setUsername("root");
			dataSource.setPassword("abc");
			// 获得连接:
//			conn = JDBCUtils.getConnection();
			conn = dataSource.getConnection();
			// 编写SQL:
			String sql = "select * from account";
			// 预编译SQL:
			pstmt = conn.prepareStatement(sql);
			// 设置参数:
			// 执行SQL:
			rs = pstmt.executeQuery();
			while(rs.next()){
				System.out.println(rs.getInt("id")+" "+rs.getString("name")+" "+rs.getDouble("money"));
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtils.release(rs, pstmt, conn);
		}
	}

2.使用配置方式完成连接池的使用

@Test
	/**
	 * Druid的使用:
	 * * 配置方式设置参数
	 * Druid配置方式可以使用属性文件配置的。
	 * * 文件名称没有规定但是属性文件中的key要一定的。
	 */
	public void demo2(){
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try{
			// 使用连接池:
			// 从属性文件中获取:
			Properties properties = new Properties();
			properties.load(new FileInputStream("src/druid.properties"));
			DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
			// 获得连接:
//			conn = JDBCUtils.getConnection();
			conn = dataSource.getConnection();
			// 编写SQL:
			String sql = "select * from account";
			// 预编译SQL:
			pstmt = conn.prepareStatement(sql);
			// 设置参数:
			// 执行SQL:
			rs = pstmt.executeQuery();
			while(rs.next()){
				System.out.println(rs.getInt("id")+" "+rs.getString("name")+" "+rs.getDouble("money"));
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtils.release(rs, pstmt, conn);
		}
	}

二、C3P0开源连接池的使用

1.C3P0的连接池的概述

2.C3P0的连接池的使用

2.1手动设置参数的方式

@Test
	/**
	 * 手动设置参数的方式:
	 */
	public void demo1(){
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try{
			// 获得连接:从连接池中获取:
			// 创建连接池:
			ComboPooledDataSource dataSource = new ComboPooledDataSource();
			// 设置连接参数:
			dataSource.setDriverClass("com.mysql.jdbc.Driver");
			dataSource.setJdbcUrl("jdbc:mysql:///web_test4");
			dataSource.setUser("root");
			dataSource.setPassword("abc");
			// 从连接池中获得连接:
			conn = dataSource.getConnection();
			// 编写SQL:
			String sql = "select * from account";
			// 预编译SQL:
			pstmt = conn.prepareStatement(sql);
			// 执行SQL:
			rs = pstmt.executeQuery();
			while(rs.next()){
				System.out.println(rs.getInt("id")+" "+rs.getString("name")+" "+rs.getDouble("money"));
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtils.release(rs, pstmt, conn);
		}
	}

2.2采用配置文件的方式:

2.2.1配置连接池:

 

2.2.2使用连接池

@Test
	/**
	 * 采用配置文件的方式:
	 */
	public void demo2(){
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try{
			// 获得连接:从连接池中获取:
			// 创建连接池://创建连接池默认去类路径下查找c3p0-config.xml
			ComboPooledDataSource dataSource = new ComboPooledDataSource();
			// 从连接池中获得连接:
			conn = dataSource.getConnection();
			// 编写SQL:
			String sql = "select * from account";
			// 预编译SQL:
			pstmt = conn.prepareStatement(sql);
			// 执行SQL:
			rs = pstmt.executeQuery();
			while(rs.next()){
				System.out.println(rs.getInt("id")+" "+rs.getString("name")+" "+rs.getDouble("money"));
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtils.release(rs, pstmt, conn);
		}
	}

三、DBUtils的概述

1.什么是DBUtils

2.为什么要学习DBUtils

因为JDBC手写比较麻烦,而且有非常多的代码是类似的。比如获得连接,预编译SQL,释放资源等..那么可以将这些代码抽取出来放到工具类中。将类似的代码进行抽取。大大简化JDBC的编程。

 

3.DBUtils的API

3.1QueryRunner对象:核心运行类

构造方法:

 

 方法:

 

 在一般情况下如果执行CRUD的操作:

构造:
QueryRunner(DataSource ds);
方法:
int update(String sql,Object… args);
T query(String sql,ResultSetHandler rsh,Object… args);

如果有事务管理的话使用另一套完成CRUD的操作:

构造:
QueryRunner();
方法:
int update(Connection conn,String sql,Object… args);
T query(Connection conn,String sql,ResultSetHandler rsh,Object… args);

方法:

 

3.2DbUtils

 

 

4.DBUtils的添加操作

@Test
	/**
	 * 添加操作
	 */
	public void demo1() throws SQLException{
		// 创建核心类:QueryRunner:
		QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
		queryRunner.update("insert into account values (null,?,?)", "ddd",10000);
	}

5.DBUtils的修改操作

@Test
	/**
	 * 修改操作
	 */
	public void demo2() throws SQLException{
		// 创建核心类:
		QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
		queryRunner.update("update account set name=?,money=? where id =?", "eee",20000,4);
	}

6.DBUtils的删除操作

@Test
	/**
	 * 删除操作
	 */
	public void demo3() throws SQLException{
		// 创建核心类:
		QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
		queryRunner.update("delete from account where id = ?", 3);
	}

7.DBUtils的使用之查询的操作

7.1查询一条记录

创建一个对象:Account

 

查询代码实现:

 

7.2查询多条记录:

 

8.DBUtils的使用之ResultSetHandler的实现类

1.ArrayHandler和ArrayListHandler

ArrayHandler:

一条记录封装到一个数组当中。这个数组应该是Object[]。

ArrayListHandler:

将多条记录封装到一个装有Object[]的List集合中。

 

2.BeanHandler和BeanListHandler

BeanHandler:

 

BeanListHandler:

将多条记录封装到一个装有JavaBean的List集合中。

 

3.MapHandler和MapListHandler

MapHandler:

将一条记录封装到一个Map集合中,Map的key是列名,Map的value就是表中列的记录值。

MapListHandler:

将多条记录封装到一个装有Map的List集合中。

 

4.ColumnListHandler、ScalarHandler

ColumnListHandler:

将数据中的某列封装到List集合中。

ScalarHandler:

将单个值封装。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值