JDBC第三天

来源:互联网 发布:什么是网络出版 编辑:程序博客网 时间:2024/05/21 17:12

代码缺陷:
 1 Class.forName("oracle.jdbc.driver.OracleDriver");
 *数据库的相关信息硬编码在程序中
 *代码冗余,效率低
 *应该整个系统执行一次,系统启动则执行

 2 Connection conn = DriverManager.getConnection(
 "jdbc:oracle:thin:@localhost:1521:orcl", "system", "sinojava");
 *数据库的相关信息硬编码在程序中
 *数据库的相关信息不安全
 *代码冗余,
 尽量减少跨越JVM的IO操作(Connection多个方法公用)

 *3 Statement stm = conn.createStatement();
 int i = stm.executeUpdate(sql);
 ==============================================
 要求必须是一条sql语句对应一个语句执行体对象
 ==============================================
 sql语句要求程序员拼接,应该将sql语句的拼接、数据库和java中类型转换等跟程序员解耦合
 
 4 stmt.close();   conn.close();
 *代码冗余
 *资源不能保证正常释放

 *5 主键的值必须由系统自动生成
  insert into student values(student_seq.nextval,...)

 *6 JDBC中默认是一条sql语句提交一次
 无法保证事务的完整性

   JVM   DB
dao执行之前 student没有主键   没有当前记录  --临时对象
dao执行之后     student有主键   有当前记录  --持久化对象

接口中:
 方法默认是公开抽象方法(public abstract)
 属性默认是公开静态常量(public static final)


工厂模式:
 屏蔽底层产品的实现细节,对外只公开获取产品的公共方法。
 生产单一产品的工厂
 生产不同种类产品的工厂

 静态工厂
  方法是static的
 实例工厂
  方法是普通方法,要产品必须先建工厂
 
原理代码:
 public class AnimalFactory {
 //公开的对外调用的获取产品的方法
 public static Animal getAnimal(String type,String animalName) throws Exception{
  Animal a = null;
  
  if(type.equalsIgnoreCase("dog")){
   a = new Dog(animalName);
  }
  if(type.equalsIgnoreCase("cat")){
   a = new Cat(animalName);
  }
  return a;
 }
 }


单例模式:
 要求:
  注册驱动、获取连接两个步骤,应该只执行一次
  连接对象应该给所有的人共用
 解决:
  单例模式:针对一个类,永远只能获取一个对象
   实现:
    1 new 方式对外屏蔽
    2 提供一个获取唯一对象的公共方法
   代码:
    private Dog() { 
    }

    public static Dog getInstance(){
     if(dog == null){
      dog = new Dog();
     }
     return dog;
    }
   注意:
    单例模式中,connection对象不能关闭
  
   

原创粉丝点击