工作填坑总结(1)

记录一下工作学习过程中的一些经验总结,为了避免以后遗忘,先写一部分,等积累到一定的内容的时候,再做一个整理总结,这周的内容主要有以下几点:

  • 泛型数组无法创建
  • sql语句的书写顺序与解析顺序
  • where与having的区别
  • E-R关系图
  • ResultSet的滚动结果集
  • 连接池的Close的装饰着模式的方法增强

  • 泛型数组无法创建
    以前一直知道Java中的数组是不能使用泛型的,一直也没有深究过原因,今天写一下这个原因。假如数组可以使用泛型,那么由于java泛型的类型擦除和数组的协变,下面的代码将会编译通过:

List<String>[] stringLists=new List<String>[1];
List<Integer> intList = Arrays.asList(40);
Object[] objects = stringLists;
objects[0]=intList;
String s=stringLists[0].get(0);

由于泛型的类型擦除,List< Integer>,List< String >与List在运行期并没有区别,所以List< String >放入List< Integer >并不会产生ArrayStoreException异常。但是String s=stringLists[0].get(0);将会抛出ClassCastException异常。如果允许创建泛型数组,就绕过了泛型的编译时的类型检查,将List< Integer >放入List [ ],并在实际存的是Integer的对象转为String时抛出异常。所以Java中为了避免这个问题,就直接会在编译时就 报错。

  • sql语句的书写顺序与解析顺序
    书写顺序: s…f…w…g…h…o
    解析顺序: from…on…outer…where…group by….having…select …distinct…order by
  • where与having的区别
    1) where是分组前筛选, having是分组后筛选
    2) where后不可以跟聚合函数, having可以跟聚合函数
    3) 如果出现使用where进行筛选和使用having进行筛选结果的一样的, 使用 where 效率会更高一些。

  • E-R关系图
    描述数据库各种对象之间的关系的一种数据模型。
    在ER图中有如下四个成分:
    矩形框:表示实体,在框中记入实体名。
    菱形框:表示联系,在框中记入联系名。
    椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。
    连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。)

  • ResultSet的滚动结果集
    ResultSet滚动结果集可以使结果集中的结果进行滚动,可以想象 ResultSet有一个指针,默认指向表第一行的上面,每次使用next(),指针向下一行移动,默认这个指针是不能来回滚动的,但是用滚动的结果集就可以让这个指针来回滚动,从而取得纪录next()、previous(),回到第一行first(),同时还支持要去的ResultSet中的第几行absolute(int n),以及移动到相对当前行的第几行relative(int n)。具体使用方法,可以查看API,需要注意的一点是,滚动类型的设置。

  • 连接池的Close的装饰着模式的方法增强
    使用连接池时,每次归还连接池都使用的是close方法,但是很明显,如果每次归还连接都是关闭资源的话,那么连接池的连接总是在不断的被取出,新的连接总是不断的被连接池创建,创建连接池的就相当于没有作用,所以每次归还连接是不会关闭资源的,那么我们每次调用的close方法又是怎么一回事呢?最近查资料,发现原来我们使用的close方法是经过方法增强的。通过工作之余查找资料,自己写了一个简单版的,通过装饰者模式方法增强方式增强close方法的连接池的实现,这里贴上主要部分代码:
    首先是装饰者:

public class MyDataSource implements DataSource{
    // 创建一个List集合用于存放多个连接对象.
    private List<Connection> list = new ArrayList<Connection>();
    // 在程序开始的时候,初始化几个连接,将连接存放到list中.
    public MyDataSource() {
        // 初始化3个连接:
        for(int i=1;i<=3;i++){
            Connection conn = JDBCUtils.getConnection();
            list.add(conn);
        }
    }
    // 获得连接的方法:
    public Connection getConnection() throws SQLException {
        if(list.size() <= 0){
            for(int i=1;i<=3;i++){
            Connection conn = JDBCUtils.getConnection();
            list.add(conn);
            }   
        }
        Connection conn = list.remove(0);
        MyConnection myConn = new MyConnection(conn, list);
        return myConn;
    }
}
 然后是被装饰者:
public class MyConnection implements Connection{

    private Connection conn;
    private List<Connection> list;

    public MyConnection(Connection conn,List<Connection> list) {
        this.conn = conn;
        this.list = list;
    }


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


    @Override
    public boolean isWrapperFor(Class<?> arg0) throws SQLException {
        return conn.isWrapperFor(arg0);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值