zoukankan      html  css  js  c++  java
  • 包装类

    实现了javax.sql.DataSource的才是标准的数据库连接池,按照字面意思,一般称之为数据源。
    对于一个已知类的某个方法进行功能上的改变有以下三种方式:
    1、定义子类,扩展父类的某个功能。(此处行不通)


    2、利用包装设计模式改写原有的类的功能
    a、编写一个类实现与被改写类(com.mysql.jdbc.Connection)相同的接口
    b、定义一个引用,记住被改写类的实例
    c、定义构造方法,传入被改写类的实例
    d、对于要改写的方法,改写即可
    e、对于不需要改写的方法,调用原有的对象的对应方法

    针对已经实现的类进行改写它的方法。


    *****包装设计模式
    *****默认适配器设计模式

    上一篇介绍动态代理模式

     1 package cn.itcast.jdbc.pool;
     2 
     3 import java.io.InputStream;
     4 import java.sql.Connection;
     5 import java.sql.DriverManager;
     6 import java.util.LinkedList;
     7 import java.util.Properties;
     8 
     9 import cn.itcast.util.JdbcUtil;
    10 //数据库连接池的原理
    11 public class SimpleConnectionPool {
    12     private static String driverClassName;
    13     private static String url;
    14     private static String user;
    15     private static String password;
    16     private static LinkedList<Connection> pool = new LinkedList<Connection>();//存储连接的池
    17     static{
    18         try {
    19             InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties");
    20             Properties props = new Properties();
    21             props.load(in);
    22             driverClassName = props.getProperty("driverClassName");
    23             url = props.getProperty("url");
    24             user = props.getProperty("user");
    25             password = props.getProperty("password");
    26             Class.forName(driverClassName);
    27             
    28             //初始化10个连接到池中
    29             for(int i=0;i<10;i++){
    30                 Connection conn = DriverManager.getConnection(url, user, password);
    31                 pool.add(conn);
    32             }
    33 //            System.out.println("初始化的连接有:");
    34 //            for(Connection c:pool)
    35 //                System.out.println(c);
    36         } catch (Exception e) {
    37             e.printStackTrace();
    38         }
    39     }
    40     public synchronized static Connection getConnection(){
    41         if(pool.size()>0){
    42             Connection conn = pool.remove();//从池中拿到连接,并从池中删除掉
    43             
    44 //            System.out.println("取出的是:"+conn);
    45 //            System.out.println("池中还有:");
    46 //            for(Connection c:pool)
    47 //                System.out.println(c);
    48             return conn;
    49         }else{
    50             System.out.println("对不起!服务器真忙");
    51             return null;
    52         }
    53     }
    54     public static void release(Connection conn){//把连接放回池中
    55         pool.add(conn);
    56 //        System.out.println("回来的是:" +conn);
    57 //        System.out.println("回来后池中的连接:");
    58 //        for(Connection c:pool)
    59 //            System.out.println(c);
    60     }
    61 }
  • 相关阅读:
    简单三层代码生成器原理剖析
    深入浅出三层架构
    SQL Server数据的批量导入
    BULK INSERT如何将大量数据高效地导入SQL Server
    用扩展方法优化多条件查询
    SQL Server 数据库访问通用类(更新)
    SQL中自增量字段Int型 identity(1,1)与Guid作为主键的性能比较
    MD5加盐实现登录
    Pi币
    SQL Server 分割字符串转列
  • 原文地址:https://www.cnblogs.com/friends-wf/p/3747516.html
Copyright © 2011-2022 走看看