数据库连接池

扩展一个方法
1.直接改源码
2.继承,但必须知道接口的具体实现类
3.使用装饰者模式
在这里插入图片描述
面向接口编程
4.动态代理
通过装饰者方法重写链接的colse方法
JDBC的工具类

package util;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBCUtil {

	static String driverClass = null;
	static String url = null;
	static String name = null;
	static String password = null;
	static {
		try {
			Properties properties = new Properties();
//			InputStream is =new FileInputStream("jdbc.properties");
			InputStream resourceAsStream = JDBCUtil.class.getClass().getClassLoader().getResourceAsStream("jdbc.properties");
			properties.load(resourceAsStream);
			driverClass = properties.getProperty("driverClass");
			url = properties.getProperty("url");
			name = properties.getProperty("name");
			password = properties.getProperty("password");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


	
	
	public static Connection getConn(){
		Connection conn = null;
		try {
//			DriverManager.registerDriver(new Driver());
			conn = DriverManager.getConnection(url, name, password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			
		}
		return conn;
	}
	
	private static void closeConn(Connection conn){
		if(conn!=null){
			try {
				conn.close();
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			}finally {
				conn = null;
			}
		}
		
	}
	 private static void closeSt(Statement st){
		 if(st!=null){
				try {
					st.close();
				} catch (Exception e) {
					// TODO: handle exception
					e.printStackTrace();
				}finally {
					st = null;
				}
			}
	 }
	 
	 private static void closeRs(ResultSet rs){
		 if(rs!=null){
				try {
					rs.close();
				} catch (Exception e) {
					// TODO: handle exception
					e.printStackTrace();
				}finally {
					rs = null;
				}
			}
	 }
	 public static void release(Connection conn,Statement st,ResultSet rs){
		 closeRs(rs);
		 closeSt(st);
		 closeConn(conn);
	 }
	 
	 public static void release(Connection conn,Statement st){
		 closeSt(st);
		 closeConn(conn);
	 }
}

数据库连接池

package util;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
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;


/**
 * 1.创建10个链接
 * 2.对外获取链接的方法getConnection
 * 3.归还链接addBack
 * 4.扩容
 * @author Administrator
 *
 */
public class MyDataSource implements DataSource {

	List <Connection> list = new ArrayList<Connection>();
	public MyDataSource() {
		
		for( int i = 0; i<10;i++){
			Connection conn = JDBCUtil.getConn();
			list.add(conn);
		}
	}
	@Override
	public PrintWriter getLogWriter() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}
	@Override
	public int getLoginTimeout() throws SQLException {
		// TODO Auto-generated method stub
		return 0;
	}
	@Override
	public Logger getParentLogger() throws SQLFeatureNotSupportedException {
		// TODO Auto-generated method stub
		return null;
	}
	@Override
	public void setLogWriter(PrintWriter arg0) throws SQLException {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void setLoginTimeout(int arg0) throws SQLException {
		// TODO Auto-generated method stub
		
	}
	@Override
	public boolean isWrapperFor(Class<?> arg0) throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}
	@Override
	public <T> T unwrap(Class<T> arg0) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}
	/**
	 * 链接池对外公布的获取链接的方法
	 */
	@Override
	public Connection getConnection() throws SQLException {
		if(list.size() == 0){
			for( int i = 0; i<5;i++){
				Connection conn = JDBCUtil.getConn();
				list.add(conn);
			}
		}
		Connection conn = list.remove(0);
		Connection connection = new ConnectionWrap(conn, list);
		return connection;
	}
	/**
	 * 使用之后归还链接
	 * @param conn
	 */
	public void addBack(Connection conn ){
		list.add(conn);
	}
	@Override
	public Connection getConnection(String arg0, String arg1) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}
	
	

}

装饰者类

package util;

import java.sql.Array;
import java.sql.Blob;
import java.sql.CallableStatement;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.NClob;
import java.sql.PreparedStatement;
import java.sql.SQLClientInfoException;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.sql.SQLXML;
import java.sql.Savepoint;
import java.sql.Statement;
import java.sql.Struct;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.Executor;

public class ConnectionWrap implements Connection {

	Connection connection = null;
	List<Connection> list ;
	public ConnectionWrap(Connection connection,List<Connection> list) {
		super();
		this.connection = connection;
		this.list = list;
	}

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

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

	@Override
	public void abort(Executor arg0) throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void clearWarnings() throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void close() throws SQLException {
		list.add(connection);
		
	}

	@Override
	public void commit() throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public Array createArrayOf(String arg0, Object[] arg1) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

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

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

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

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

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

	@Override
	public Statement createStatement(int arg0, int arg1) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Statement createStatement(int arg0, int arg1, int arg2) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Struct createStruct(String arg0, Object[] arg1) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean getAutoCommit() throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}

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

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

	@Override
	public String getClientInfo(String arg0) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

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

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

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

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

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

	@Override
	public Map<String, Class<?>> getTypeMap() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

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

	@Override
	public boolean isClosed() throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean isReadOnly() throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean isValid(int arg0) throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String nativeSQL(String arg0) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public CallableStatement prepareCall(String arg0) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public CallableStatement prepareCall(String arg0, int arg1, int arg2) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public CallableStatement prepareCall(String arg0, int arg1, int arg2, int arg3) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement prepareStatement(String arg0) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement prepareStatement(String arg0, int arg1) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement prepareStatement(String arg0, int[] arg1) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement prepareStatement(String arg0, String[] arg1) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement prepareStatement(String arg0, int arg1, int arg2) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement prepareStatement(String arg0, int arg1, int arg2, int arg3) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void releaseSavepoint(Savepoint arg0) throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void rollback() throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void rollback(Savepoint arg0) throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setAutoCommit(boolean arg0) throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setCatalog(String arg0) throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setClientInfo(Properties arg0) throws SQLClientInfoException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setClientInfo(String arg0, String arg1) throws SQLClientInfoException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setHoldability(int arg0) throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setNetworkTimeout(Executor arg0, int arg1) throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setReadOnly(boolean arg0) throws SQLException {
		// TODO Auto-generated method stub
		
	}

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

	@Override
	public Savepoint setSavepoint(String arg0) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void setSchema(String arg0) throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setTransactionIsolation(int arg0) throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setTypeMap(Map<String, Class<?>> arg0) throws SQLException {
		// TODO Auto-generated method stub
		
	}

}

开源的数据库连接池
DBCP
通过设置的方法

//构建数据源对象
		BasicDataSource basicDataSource = new BasicDataSource();
		basicDataSource.setDriverClassName("com.mysql.jdbc.Dreiver");
		basicDataSource.setUrl("jdbc:mysql://localhost/test");
		basicDataSource.setUsername("root");
		basicDataSource.setPassword("root");
		Connection conn =null;
		PreparedStatement ps =null;
		ResultSet rs = null;
		String sql = "select * from user where name = ? and password = ?";
		
		try {
//			得到链接
			conn = basicDataSource.getConnection();
			ps = conn.prepareStatement(sql);
			ps.setString(1, name);
			ps.setString(2, password);
			rs = ps.executeQuery();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally{
			JDBCUtil.release(conn, ps, rs);
		}

通过配置的方法

		Connection conn =null;
		PreparedStatement ps =null;
		ResultSet rs = null;
		String sql = "";
		try {
			InputStream is = new FileInputStream("src//dbcpconfig.properties");
			Properties properties = new Properties();
			properties.load(is);
			DataSource dataSource = BasicDataSourceFactory.createDataSource(properties);
			conn = dataSource.getConnection();
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally{
			JDBCUtil.release(conn, ps, rs);
		}
	}

C3P0
通过设置

				Connection conn =null;
				PreparedStatement ps =null;
				ResultSet rs = null;
				String sql = "select * from user where name = ? and password = ?";
				try {
					//构建数据源对象
					ComboPooledDataSource basicDataSource = new ComboPooledDataSource();
					basicDataSource.setDriverClass("com.mysql.jdbc.Dreiver");
					basicDataSource.setJdbcUrl("jdbc:mysql://localhost/test");
					basicDataSource.setUser("root");
					basicDataSource.setPassword("root");
//					得到链接
					conn = basicDataSource.getConnection();
					ps = conn.prepareStatement(sql);
					ps.setString(1, "name");
					ps.setString(2, "password");
					rs = ps.executeQuery();
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} finally{
					JDBCUtil.release(conn, ps, rs);
				}

通过配置

		Connection conn =null;
		PreparedStatement ps =null;
		ResultSet rs = null;
		String sql = "";
		try {
//			会自动读取c3p0-config.xml
			ComboPooledDataSource dataSource = new ComboPooledDataSource();
			conn = dataSource.getConnection();
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally{
			JDBCUtil.release(conn, ps, rs);
		}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<c3p0>
	<default-config>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost/test</property>
		<property name="user">root</property>
		<property name="password">root</property>
		<property name="initialPoolSize">10</property>
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">100</property>
		<property name="minPoolSize">10</property>
		<property name="maxStatements">200</property>
	</default-config>
</c3p0>

使用c3p0的JDBC工具类

static ComboPooledDataSource dataSource = null;
	static {
		dataSource = new ComboPooledDataSource();
	}
	public static Connection getConn() throws SQLException{
		return dataSource.getConnection();
	}
	private static void closeConn(Connection conn){
		if(conn!=null){
			try {
				conn.close();
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			}finally {
				conn = null;
			}
		}
		
	}
	 private static void closeSt(Statement st){
		 if(st!=null){
				try {
					st.close();
				} catch (Exception e) {
					// TODO: handle exception
					e.printStackTrace();
				}finally {
					st = null;
				}
			}
	 }
	 
	 private static void closeRs(ResultSet rs){
		 if(rs!=null){
				try {
					rs.close();
				} catch (Exception e) {
					// TODO: handle exception
					e.printStackTrace();
				}finally {
					rs = null;
				}
			}
	 }
	 public static void release(Connection conn,Statement st,ResultSet rs){
		 closeRs(rs);
		 closeSt(st);
		 closeConn(conn);
	 }
	 
	 public static void release(Connection conn,Statement st){
		 closeSt(st);
		 closeConn(conn);
	 }

DBUTILS的使用(增删改查)

		QueryRunner queryRunner = new QueryRunner(new ComboPooledDataSource());
//		增加
		queryRunner.update("insert into user(usernam,password) values(?,?)","lisi","lisi");
//		修改
		queryRunner.update("update user set username = ? where id = ?", "wangwu",3);
//		删除
		queryRunner.update("delete from user where id =?", 10);
//		通过new接口匿名实现类查询
		User user = queryRunner.query("select * from user where id = ?", new ResultSetHandler<User>(){

			@Override
			public User handle(ResultSet rs) throws SQLException {
				User user = new User();
				while(rs.next()){
					user.setName(rs.getString("userName");
					user.setPassord(rs.getString("password");
				}
				
				return user;
			}},10);
//		单个查询
		User user = queryRunner.query("select * from user where id = ?", new BeanHandler<User>(User.class),2);
//		多个查询
		List<User> list = queryRunner.query("select * from user where id = ?", new BeanListHandler<User>(User.class),2);
		for(User user : list){
			user.toString();
		}

数组
ArrayHandler
ArrayListHandler
对象
BeanHandler
BeanListHandler
map对象
MapListHandler

内容: 这个合成医疗保健数据集的创建是为了作为数据科学、机器学习和数据分析爱好者的宝贵资源。 灵感: 医疗保健数据通常很敏感,并受隐私法规的约束,因此难以访问以进行学习和实验。为了解决这一差距,我利用 Python 的 Faker 库生成了一个数据集,该数据集反映了医疗保健记录中常见的结构和属性。通过提供这些合成数据,我希望促进医疗保健分析领域的创新、学习和知识共享。 表格信息: 每列都提供有关患者、其入院情况和提供的医疗保健服务的特定信息,使此数据集适用于医疗保健领域的各种数据分析和建模任务。以下是数据集中每一列的简要说明 - 名字:此列表示与医疗保健记录关联的患者的姓名。 年龄:患者入院时的年龄,以年表示。 性:指示患者的性别,“男性”或“女性”。 血型:患者的血型,可以是常见的血型之一(例如,“A+”、“O-”等)。 医疗状况:此列指定了与患者相关的主要医疗状况或诊断,例如“糖尿病”、“高血压”、“哮喘”等。 入学日期:患者入住医疗机构的日期。 医生:在患者入院期间负责护理的医生的姓名。 医院:标识患者收治的医疗机构或医院。 保险提供商:此列指示患者的保险提供商,可以是多个选项之一,包括“Aetna”、“Blue Cross”、“Cigna”、“UnitedHealthcare”和“Medicare”。 账单金额:患者在入院期间为他们的医疗保健服务开具的账单金额。这表示为浮点数。 房间号:患者入院期间入住的房间号。 入场类型:指定入院类型,可以是“紧急”、“选择性”或“紧急”,以反映入院的情况。 出院日期:患者从医疗机构出院的日期,基于入院日期和实际范围内的随机天数。 药物:确定患者在入院期间开具或服用的药物。例子包括“阿司匹林”、“布洛芬”、“青霉素”、“扑热息痛”和“立普妥”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值