标准连接池实现

步骤:1.实现dataSource接口

2.声明一个集合类用于管理多个连接

3.必须要拥有一种能能力,回收连接

/**
 * 标准的连接
 */
public class DBPool implements DataSource {
	//声明一个池管理对象
	private LinkedList<Connection> pool = new LinkedList<Connection>();
	//在初始化这个DataSourc的子类时在构造方法设置多个连接
	public DBPool(){
		try{
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql:///db?characterEncoding=UTf8";
			for(int i=0;i<3;i++){
				final Connection con = DriverManager.getConnection(url,"root","123");
				Object proxyedConn =
						Proxy.newProxyInstance(DBPool.class.getClassLoader(),
								new Class[]{Connection.class},
								new InvocationHandler() {
									public Object invoke(Object proxyedConnection, Method method, Object[] args)
											throws Throwable {
										if(method.getName().equals("close")){
											synchronized (pool) {
												pool.addLast((Connection) proxyedConnection);
												pool.notify();
											}
											return  null;
										}
										//目标方法的返回值
										Object returnValue=method.invoke(con, args);
										return returnValue;
									}
								});
				pool.add((Connection) proxyedConn);
			}
		}catch(Exception e){
			throw new RuntimeException(e.getMessage(),e);
		}
	}
	public Connection getConnection() throws SQLException {
		synchronized (pool) {
			if(pool.size()==0){
				try {
					pool.wait();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				return getConnection();
			}
			Connection con = pool.removeFirst();
			System.err.println("siize:"+pool.size());
			return con;
		}
	}
	

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

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

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

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

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

	public boolean isWrapperFor(Class<?> iface) throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}
	public Connection getConnection(String username, String password)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}
	
}

用包装模式实现数据库连接池

我这里只写部分代码,对close()方法增强

public class MyDataSource implements DataSource {
	private LinkedList<Connection> pool = new LinkedList<Connection>();
	public MyDataSource() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql:///db?characterEncoding=UTf8";
			for (int i = 0; i < 3; i++) {
				//创建原生的连接,// com.mysql.jdbc.JDBC4Connection@8888
				Connection con = DriverManager.getConnection(url, "root",
						"123");
				//声明包装类
				MyConn conn = new MyConn(con);
				pool.add(conn);//将包装类添加到池中去
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	//此方法来自于datasource,用于返回一个连接
	public Connection getConnection() throws SQLException {
		synchronized (pool) {
			if (pool.size() == 0) {
				try {
					pool.wait();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				return getConnection();
			}
			Connection con = pool.removeFirst();
			System.err.println("siize:" + pool.size());
			return con;
		}
	}

	// 以下包装connection
	class MyConn implements Connection {
		// 声明被包装类的成员
		private Connection conn;

		// 通过构造接收MySql的connection的对象JDBC4Connection@8888
		public MyConn(Connection con) {
			this.conn = con;
		}
		//关闭连接
		public void close() throws SQLException {
			synchronized (pool) {
				//有人调用了关闭方法,不能关
				System.err.println("有人还连接了。。。。"+this);
				pool.add(this);
				pool.notify();
			}
		}

下午根据刀哥的指点,暂时把c3p0放到了一边,自己开始思考怎样去做小项目练手,光学理论也不行,只有在实战中才能更好地理解它们

 工作室系统开发流程

  1. 首页开发

2.登录可以进入自己的相关页面,自己有相册,日志的管理,如果是管理员则可以对系统进行管理,分别是管理员界面,与用户界面

管理员界面

用户界面

如果非内部成员点击没有的菜单,则没有相应的功能

接下来是数据库的设计

创建用户表,博客(日志)表,菜单表,项目表,考勤记录表,系统通知表, 菜单用户关联表

ps: 由于下午上选修课,再加上 班上的事情,数据库建表,表字段,表关系的设计,等事情只能明天继续.感觉一天好忙哦~~~~

 

原文地址:https://www.cnblogs.com/ylfeiu/p/3624074.html