数据库基础 day-05连接池,改进工具类,DbUtils及其增删改查,ResultSetHandler的实现类

以下内容参考自b站黑马程序
部分技术已过时ಥ_ಥ经典白学系列

连接池

  • 定义:连接池是创建和管理一个连 接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。
    装有连接的容器,使用连接的话,可以从连接池中进行获取,使用完成之后将连接归还给连接池
  • 作用:连接对象创建和销毁是需要耗费时间的,在服务器初始化的时候就初始化一些连接。把这些连接放入到内存中,使用的时候可以从内存中获取,使用完成之后将连接放入连接池中。从内存中获职和归还的效率要远远高于创建和销毁的效率。
    在这里插入图片描述
  • 自定义连接池
  • 编写一个类实现DataSource接口
  • 重写getConnection方法
  • 初始化多个连接在内存中
  • 编写归还连接的方法

实现DataSource的接口
在这里插入图片描述
在这里插入图片描述
代码实现

package project2;

import java.io.PrintWriter;
/*
 * 自定义的连接池
 */
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import javax.sql.DataSource;

public class MyDataSource implements DataSource {
	//将一些连接存入内存中,可以定义一个集合,用于存储连接对象。
	private List<Connection> connList = new ArrayList<Connection>();
	//在初始化的时候,提供一些连接,构造方法	
	public  MyDataSource(){
		//初始化连接
		for(int i = 1;i<=3;i++) {
			//向集合中存入连接
			try {
				connList.add(getConnection());
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}		
	//从连接池中获取连接的方法。
	@Override
	public Connection getConnection() throws SQLException {
		// 不能拿到同一个连接,即使用的连接就移除
		Connection conn = connList.remove(0);
		return conn;
	}
	//编写归还连接的方法
	public void addBack(Connection connection) {
		connList.add(connection);
	}
	
	
	@Override
	public Logger getParentLogger() throws SQLFeatureNotSupportedException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public <T> T unwrap(Class<T> iface) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean isWrapperFor(Class<?> iface) throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}


	@Override
	public Connection getConnection(String username, String password) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PrintWriter getLogWriter() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void setLogWriter(PrintWriter out) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLoginTimeout(int seconds) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public int getLoginTimeout() throws SQLException {
		// TODO Auto-generated method stub
		return 0;
	}

}

测试连接

package project2;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DataSourceTest {
	MyDataSource dataSource = null;
	public void demo1() {
		// 测试自定义连接池
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;

		try {
			// 获取连接,从连接池中获取连接
			//conn = JdbcUtils.getConnection();
			 dataSource = new MyDataSource();
			conn = dataSource.getConnection();
			// 编写sql
			String sqlString = "select * from account";
			// 预编译sql
			pstmt = conn.prepareStatement(sqlString);
			rs = pstmt.executeQuery();
			while (rs.next()) {
				System.out.println(rs.getInt("id" + " " + rs.getString("name") + " " + rs.getDouble("money")));

			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			//JdbcUtils.release(rs, pstmt, conn);
			//归还连接
			dataSource.addBack(conn);
		}
	}

}

开源连接池的使用

  • Druid
  • 定义:Druid阿里旗下开源连接池产品,使用非常简单,可以与Spring框架进行快速整合。
  • 相关jar包:在这里插入图片描述
  • 手动设置的方式:在这里插入图片描述
  • 使用配置的方式
    在这里插入图片描述在这里插入图片描述

改进工具类

在这里插入图片描述

DbUtils

  • 定义:Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。对JDBC的简单封装,而且没有影响性能
  • 作用:JDBC手写比较麻烦,而且有比较多的代码是类似的,比如获取连接,预编译SQL,释放资源等,那么可以将这些代码抽取出来放到工具类中,将类似的代码进行抽取。
  • DBUtils的 API的概述
  • QueryRunner对象:核心运行类
  • 构造方法:无参构造和有参构造在这里插入图片描述
    在这里插入图片描述
  • 方法:
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 执行批处理
    在这里插入图片描述
  • Class DbUtils
  • 方法:事务相关操作
    在这里插入图片描述在这里插入图片描述

DBUtils增删改操作

  • 添加
    >
  • 修改
    在这里插入图片描述
  • 删除
    在这里插入图片描述
  • 查找
  • 查询一条对象:创建一个对象Account,用于存储从数据库中查到的数据。
    在这里插入图片描述

在这里插入图片描述

  • 查询多条记录
    在这里插入图片描述

ResultSetHandler的实现类

  • ArrayHandler和ArrayListHandler
  • ArrayHandler:将一条记录封装到一个数组当中,这个数组应该是Object[]。
  • ArrayListHandler:将多条记录封装到一个装有Object[]的List集合中。
    在这里插入图片描述
    在这里插入图片描述
  • BeanHandler和BeanListHandler
  • BeanHandler:将一条记录封装到一个JavaBean(Java对象)中
  • BeanHandler:将多条记录封装到一个JavaBean的List集合中
    在这里插入图片描述
    在这里插入图片描述
  • MapHandler和MapListHandler
  • MapHandler:将一条记录封装到一个Map中,Map的key是列名,values就是表中列的记录值
  • MapListHandler:将多条记录封装到一个装有Map的List集合中
    在这里插入图片描述在这里插入图片描述
  • ColumnListHandler、ScalarHandler. KeyedHandler
  • ColumnListHandler:将数据中的某列封装到list集合中
    在这里插入图片描述
  • ScalarHandler:将单个值封装
    mysql中count是long类型,能不能用Integer来接受在这里插入图片描述
  • KeyedHandler(了解):将一条记录封装到一个Map集合中。将多条记录封装到一个装有Map集合的Map集合中。而且外面的Map的key是可以指定的。
    在这里插入图片描述在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值