DAO模式啊
可以参考Hibernate

解决方案 »

  1.   

    我们不能考虑EJB,那样会更改很设计上的思路。也不能用DAO。
    只能用强大的JDBC。我想知道:
    1。里面应有什么样的方法;
    2。要有多少错误处理要做在里面;
    3。还有查询结果最好以什么形式返回给其他设计人员;
      

  2.   

    package com.db;import java.sql.*;import java.util.ArrayList;public class OracleConnection {
      private static String url="jdbc:oracle:thin:@10.10.10.10:1521:orasid";
      private String user="user";
      private String pw="pw";
      private static Connection con;
      private static Statement stmt;
      private static int conCount=0;  public OracleConnection() throws SQLException {
        if(con==null){
          this.con = createConnection();
        }
        if(stmt==null){
          this.stmt = createStatement();
        }
      }
      private Connection createConnection() throws SQLException {
        try{
          conCount++;
          DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
          System.out.println("连接"+String.valueOf(conCount)+":"+url+"数据库成功!");
          return DriverManager.getConnection(url, user, pw);
        }
        catch(SQLException sqle){
          System.out.println("连接"+url+"数据库失败!");
          throw sqle;
        }
      }
      private Statement createStatement(){
        Statement stmt = null;
        try{
          stmt = con.createStatement();
        }
        catch(SQLException e){
          System.out.println(e.toString());
        }
        finally{
          return stmt;
        }
      }  public ResultSet executeQuery(String sql) throws SQLException{
          return stmt.executeQuery(sql);
      }
      public int executeUpdate(String sql) throws SQLException{
        return stmt.executeUpdate(sql);
      }  public int executeUpdate(ArrayList sqlList) throws SQLException{
        int row=0;
        try{
          con.setAutoCommit(false);
          for(int i=0; i<sqlList.size(); i++){
            if(sqlList.get(i)!=null&&(!sqlList.get(i).equals(""))){
              row +=stmt.executeUpdate(sqlList.get(i).toString());
            }
          }
          con.commit();
        }
        catch(SQLException sqle)
        {
          con.rollback();
          throw sqle;
        }
        finally
        {
          con.setAutoCommit(true);
        }
        return row;
      }  public void close(){
         try{
           if(stmt!=null){
             stmt.close();
           }
         }
         catch(SQLException sqle){
           sqle.printStackTrace();
         }
         finally{
           try{
             if(con!=null){
               con.close();
             }
             System.out.println("成功关闭"+url+"数据库连接");
           }
           catch(SQLException sqle){
             sqle.printStackTrace();
           }
         }
       }
    }
      

  3.   

    一个好的JDBC公用工具类应提供以下功能:
    1、提供连接池功能,即采用PoolConnection获取连接,提高获取连接的速度
    2、屏蔽不同的数据库JDBC的差异,可通过配置参数自动用对应的驱动类初始化数据库连接,对于特殊的驱动程序还可以提供附加的性能优化方法,比如oracle支持的statement缓存功能。不同的数据库产生数据库异常时,相同的错误返回的错误代码不一样,可提供一些方法屏蔽这样的差异。
    3、提供一些通用的方法,比如关闭statement,resultset,connection等对象时,有时会产生异常,通常这些异常都不处理,可提供自动捕捉异常的方法,称为silent close
    4、程序员写JDBC代码时,常常忘了最后把connection关掉,导致资源泄漏,公用工具类可提供相应的自动关闭功能。对于createstatement, executeQuery,executeUpdate等没有必要封装,因为如果要封装的话类似的方法就太多了,不如让使用者直接用Connection的接口。
      

  4.   

    关于前面位仁兄,我有以下几个问题:
    1、提供连接池功能。怎样提供的?
    2、屏蔽不同的数据库JDBC的差异,我现在占不考虑!这得要对好多数据库?
    3、对于错误处理是做在连接的类里面,还是直接抛出呢?
    4、怎么做自动捕捉啊。关闭statement,resultset,connection等对象时,是做一个方法还是做多个方法。
    5、对于createstatement, executeQuery,executeUpdate如果不做封装的话,那其他的程序员不是一样很费劲的来调用,我想是不是可以封装几个常用的。比如executeQuery,executeUpdate ,还有要一个执行事务的。对于createstatement我想可以做的这个类的内部,而减少其他人的代码量!
    6、对于返回查询结果,我想做在一个ArrayList里面,而不是返回一个RecordSet,而每一条记录,用不着hashmap保存。放在这个ArrayList里面。
      

  5.   

    写个单列类,要么JDBC POOL~
      

  6.   

    什么叫单列类?和JDBC POOL有什么关系。