package com.officelog;import java.sql.*;
import java.io.*;
public class DbADO {   Connection  conn=null;
   Statement  stmt=null;
   ResultSet  rs=null;
    public DbADO() {  }
 public boolean connect()
 {       
       boolean isConnect=false;
  try 
  {
           Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance(); 
           String  url="jdbc:db2:OFFLOG";  
           String  dbuser="wsp";  
           String  dbpassword="1024320fx";             
           conn=  DriverManager.getConnection(url,dbuser,dbpassword);             
           if (conn!=null)
                 isConnect=true;
           
   }
   catch(Exception e)
   {
             System.out.println("connect to database failed");
             e.printStackTrace();
   }
   
   return isConnect;
 }
  public void close()
  {
      try{
         if(rs!=null)
             rs.close();             
          rs=null;
          
          if(stmt!=null)
             stmt.close();
          
          stmt=null;
          
          if(conn!=null)
              conn.close();
          
      }
      catch(Exception e)
      {
         e.printStackTrace();
      }
      finally
      {
            
             conn = null;
      }
      
   }
   public ResultSet select(String sql)
  {
          try{
          
           stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            rs=stmt.executeQuery(sql);           
                       
           }
          catch(Exception e)
          {
            e.printStackTrace();
          }
          return rs;
  }
  
   public int update_insert(String sql)
  {
        int num=0;
        try{
          stmt = conn.createStatement(); 
          stmt.executeUpdate(sql);
                      
        }
        catch(Exception e)
        {
          e.printStackTrace();
        }
        return num;
 }
  
  public int total(String sql)
  {
          int num=0;
          
          try{
           stmt = conn.createStatement();   
           rs=stmt.executeQuery(sql);  
            
            while(rs.next())
            {
              num=rs.getInt(1);
             }
            
           }
          catch(Exception e)
          {
            e.printStackTrace();
          }
          return num;
  }    }

解决方案 »

  1.   

    你那个ConnectionFactory是干什么的?
      

  2.   

    好久没直接用JDBC了,刚写了一个,楼主可以参考一下.package com.saro.joy;
    import java.util.Properties;
    import java.sql.*;/**
     * User: Saro
     * Date: 2005-4-24
     * Time: 17:45:50
     */
    public class DBConnectionManager {  private static ThreadLocal conn_ThreadLocal=new ThreadLocal();
      /* 执行 查询操作 */
      public static ResultSet executeFind(String query) {
        PreparedStatement pstmt=null;
        try {
          Connection conn=getConnection();
          pstmt=conn.prepareStatement(query);
          ResultSet rst=pstmt.executeQuery();
          return rst;
        } catch (SQLException e) {
          throw new DataAccessException("执行查询:[ "+ query + "] 时发生异常",e);
        }finally{
          closeStatement(pstmt);
        }
      }  /* 执行 写数据库操作 */
      public static int execute(String query) {
        PreparedStatement pstmt=null;
        try {
          Connection conn=getConnection();
          pstmt=conn.prepareStatement(query);
          int rows=pstmt.executeUpdate();
          return rows;
        } catch (SQLException e) {
          rollback();
          throw new DataAccessException("执行写数据库操作:[ "+ query + " 时发生异常",e);
        }finally{
          closeStatement(pstmt);
        }
      }  /* 提交事务 */
      public static void commit(){
        Connection conn=(Connection)conn_ThreadLocal.get();
        if(conn!=null) {
          try {
            conn.commit();
          } catch (SQLException e) {
            throw new DataAccessException("提交事务失败",e);
          }
        }
      }  /* 回滚事务 */
      public static void rollback(){
        Connection conn=(Connection)conn_ThreadLocal.get();
        if(conn!=null) {
          try {
            conn.rollback();
          } catch (SQLException e) {
            throw new DataAccessException("回滚事务失败",e);
          }
        }
      }  /* 关闭连接 */
      public static void close(){
        Connection conn=(Connection)conn_ThreadLocal.get();
        if(conn!=null) {
          try {
            conn.close();
          } catch (SQLException e) {
            throw new DataAccessException("无法关闭连接",e);
          }
          conn_ThreadLocal.set(null);
        }
      }  /* 得到 Connection ,如无,创建一个*/
      public static Connection getConnection() {
        Connection conn=(Connection)conn_ThreadLocal.get();
        if(conn==null){
          conn=createConnection();
          try {
            conn.setAutoCommit(false);
          } catch (SQLException e) {
            throw new DataAccessException(e);
          }
          conn_ThreadLocal.set(conn);
        }
        return conn;
      }  /* 创建 Connection*/
      private static Connection  createConnection() {
        try {
          Properties props=getConnectSetting();
          Class.forName((String)props.get("driver"));
          return DriverManager.getConnection(
                  (String)props.get("url"),
                  (String)props.get("user"),
                  (String)props.get("password"));
          //DataSource ds=.....;
          //return ds.getConnection();
        } catch (Exception e) {
          throw new DataAccessException("无法创建数据库连接",e);
        }
      }  /* 辅助方法,关闭Statement*/
      private static void closeStatement(Statement stmt) {
        if(stmt!=null) {
          try {
            stmt.close();
          } catch (SQLException e) {
            System.out.println("Statement:[" + stmt + "] 无法关闭");
          }
        }
      }  private static Properties getConnectSetting() {
        Properties props=new Properties();
        props.put("driver","....");
        props.put("url","...");
        props.put("user","...");
        props.put("password","...");
        return props;
      }
    }
      

  3.   

    try{
      AAADao adao=getAAADao();
      adao.execute("some sql");
      BBBDao bdao=getBBBDao();
      bdao.execute("some sql");
      CCCDao cdao=getCCCDao();
      cdao.execute("some sql");
      DBConnectionManager.commit();
    }catch(DataAccessException e){
      DBConnectionManager.rollback();
    }finally{
      DBConnectionManager.close();
    }
      

  4.   

    错了, 外面的DBConnectionManager.rollback();是不必要的.
    try{
      AAADao adao=getAAADao();
      adao.UpdateAAA();
      BBBDao bdao=getBBBDao();
      bdao.UpdateBBB();
      CCCDao cdao=getCCCDao();
      cdao.UpdateCCC();
      DBConnectionManager.commit();
    }finally{
      DBConnectionManager.close();
    }假设有类AAADao;public class AAADao {
      public void UpdateAAA(){
        DBConnectionManager.execute("some query");
      }
    }
    其它类似.
      

  5.   

    汗,糊涂了,以上做法可能会无法回滚的,还是这样吧:
    把DBConnectionManager.execute()中的rollback();去掉,
    在最上层控制回滚.
    try{
      AAADao adao=getAAADao();
      adao.UpdateAAA();
      BBBDao bdao=getBBBDao();
      bdao.UpdateBBB();
      CCCDao cdao=getCCCDao();
      cdao.UpdateCCC();
      DBConnectionManager.commit();
    }catch(Exception ex){
      DBConnectionManager.rollback();
      throw ex;
    }finally{
      DBConnectionManager.close();
    }