0
点赞
收藏
分享

微信扫一扫

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

静守幸福 2022-04-04 阅读 56
mysql

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

连接池

实现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);
		}
	}

}

开源连接池的使用

改进工具类

在这里插入图片描述

DbUtils

  • Class DbUtils

DBUtils增删改操作

在这里插入图片描述

ResultSetHandler的实现类

  • ArrayListHandler:将多条记录封装到一个装有Object[]的List集合中。
    在这里插入图片描述
    在这里插入图片描述
  • BeanHandler和BeanListHandler
  • MapHandler和MapListHandler
  • ColumnListHandler、ScalarHandler. KeyedHandler
举报

相关推荐

0 条评论