zoukankan      html  css  js  c++  java
  • JAVA中操作数据库方式与设计模式的应用 2

    在实际项目中,并不需要你来从头开始来设计数据库连接池机制,现在成熟的开源项目,如C3P0,dbcp,Proxool等提供了良好的实现。一般推荐使用Apache dbcp,基本使用实例:Java代码 复制代码
    1. DataSource ds = null;   
    2.    try{   
    3.       Context initCtx = new InitialContext();   
    4.       Context envCtx = (Context) initCtx.lookup("java:comp/env");   
    5.       ds = (DataSource)envCtx.lookup("jdbc/myoracle");   
    6.         if(ds!=null){   
    7.                  out.println("Connection is OK!");   
    8.                  Connection cn=ds.getConnection();   
    9.                 if(cn!=null){   
    10.                          out.println("cn is Ok!");   
    11.                  Statement stmt = cn.createStatement();   
    12.                   ResultSet rst = stmt.executeQuery("select * from BOOK");   
    13.                  out.println("rst is Ok!" + rst.next());   
    14.                 while(rst.next()){   
    15.                          out.println("BOOK_CODE:" + rst.getString(1));   
    16.                    }   
    17.                          cn.close();   
    18.                  }else{   
    19.                          out.println("rst Fail!");   
    20.                  }   
    21.          }   
    22.         else   
    23.                  out.println("Fail!");   
    24.             }catch(Exception ne){ out.println(ne);   
    25.           }   
    DataSource ds = null; try{ Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); ds = (DataSource)envCtx.lookup("jdbc/myoracle"); if(ds!=null){ out.println("Connection is OK!"); Connection cn=ds.getConnection(); if(cn!=null){ out.println("cn is Ok!"); Statement stmt = cn.createStatement(); ResultSet rst = stmt.executeQuery("select * from BOOK"); out.println("rst is Ok!" + rst.next()); while(rst.next()){ out.println("BOOK_CODE:" + rst.getString(1)); } cn.close(); }else{ out.println("rst Fail!"); } } else out.println("Fail!"); }catch(Exception ne){ out.println(ne); }



    3.2 Statement Pool
    普通预编译代码:

    Java代码 复制代码
    1.    
    2. String strSQL=”select name from items where id=?”;   
    3. PreparedStatement ps=conn.prepareStatement(strSQL);   
    4. ps.setString(1, “2”);   
    5. ResultSet rs=ps.executeQuery();   
    String strSQL=”select name from items where id=?”; PreparedStatement ps=conn.prepareStatement(strSQL); ps.setString(1, “2”); ResultSet rs=ps.executeQuery();



    但是PreparedStatement 是与特定的Connection关联的,一旦Connection关闭,则相关的PreparedStatement 也会关闭。
    为了创建PreparedStatement 缓冲池,可以在invoke方法中通过sql语句判断池中还有没有可用实例。

    4. 持久层设计与O/R mapping 技术
    1) Hernate:适合对新产品的开发,进行封闭化的设计
    Hibernate 2003年被Jboss接管,通过把java pojo对象映射到数据库的table中,采用了xml/javareflection技术等。3.0提供了对存储过程和手写sql的支持,本身提供了hql语言。
    开发所需要的文件:
    hibernate配置文件: hibernate.cfg.xml 或 hibernate.properties
    hibernate 映射文件: a.hbm.xml
    pojo类源文件: a.java  

    导出表与表之间的关系:
    a. 从java对象到hbm文件:xdoclet
    b. 从hbm文件到java对象:hibernate extension
    c. 从数据库到hbm文件:middlegen
    d. 从hbm文件到数据库:SchemaExport

    2) Iatis :适合对遗留系统的改造和对既有数据库的复用,有很强的灵活性
    3) Apache OJB:优势在于对标准的全面支持
    4)EJB:适合集群服务器,其性能也不象某些人所诟病的那么差劲
    5) JDO (java data object)
    设 置一个Properties对象,从而获取一个JDO的PersistenceManagerFactory(相当于JDBC连接池中的 DataSource),进而获得一个PersistenceManager对象(相当于JDBC中的Connection对象),之后,你可以用这个 PersistenceManager对象来增加、更新、删除、查询对象。
    JDOQL是JDO的查询语言;它有点象SQL,但却是依照Java的语法的。
    5. 基于开源框架的Struts+Spring+Hibernate实现方案
    示 例:这是一个3层架构的web 程序,通过一个Action 来调用业务代理,再通过它来回调 DAO类。下面的流程图表示了MyUsers是如何工作的。数字表明了流程的先后顺序,从web层(UserAction)到中间层 (UserManager),再到数据层(UserDAO),然后返回。
    Spring是AOP, UserManager和UserDAO都是接口.
    1)       web层(UserAction) :调用中间层的接口方法,将UserManager作为属性注入。
                 采用流行的Struts框架,虽然有很多人不屑一顾,但是这项技术在业界用的比较普遍,能满足基本的功能,可以减少培训学习成本。
    2)       中间层(UserManager):将UserDAO作为属性注入,其实现主要是调用数据层接口的一些方法;它处于事务控制中。
                采用Spring框架实现,IOC与AOP是它的代名词,功能齐全,非常棒的一个架构。
    3)       数据层(UserDAO):实现类继承HibernateDaoSupport类,在该类中可以调用getHibernateTemplate()的一些方法执行具体的数据操作。
                采用Hibernate做O/R mapping,从种种迹象可以看出,Hibernate就是EJB3.0的beta版。

  • 相关阅读:
    JavaSE 基础 第51节 定义自己的异常
    JavaSE 基础 第50节 Java中的异常链
    JavaSE 基础 第49节 手动抛出异常
    JavaSE 基础 第48节 Java中的异常声明
    JavaSE 基础 第47节 获取异常信息
    JavaSE 基础 第46节 异常的分类
    JavaSE 基础 第45节Java异常快速入门
    JavaSE 基础 第44节 引用外部类的对象
    JavaSE 基础 第43节 静态内部类
    通用爬虫
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400806.html
Copyright © 2011-2022 走看看