第一次写事务,不会啊,哪位帮忙把下面的代码改成事务?着急,想学习一下。谢谢啦!
Connection conn = null;
conn=core.getConnection();
int iParamNo = 0 ;
try{
iParamNo = 1 ;
String sqlBidHeader = "" ;
sqlBidHeader =  "INSERT INTO POM.POM_BID_HEADERS   (    "       
+ " BID_NUMBER     , " 
+ " AUCTION_HEADER_ID  , " 
+ " OPERATOR_ID   "                  
+ "  )  "                                    
+ "  VALUES (  "                             
+ " POM.POM_BID_HEADERS_S.nextVal , "
+ " ? , "
+ " ?  "           
+ " ) ";                                     
OraclePreparedStatement stmtBidHeader = (OraclePreparedStatement) conn.prepareStatement( sqlBidHeader );
stmtBidHeader.setInt    ( iParamNo ++ ,  1  ) ;
stmtBidHeader.setInt    ( iParamNo ++ ,  2  ) ;
stmtBidHeader.executeUpdate();
}   
catch (Exception e){
    out.println ( e.getMessage() ) ;
}
try{
iParamNo = 1 ;
String sqBidItem = " INSERT INTO POM.POM_BID_ITEM_PRICES  (                     "
    + " AUCTION_HEADER_ID  , "
    + " AUCTION_LINE_NUMBER , "
    + " BID_NUMBER "                                       
+ " ) "
+ " VALUES (  "
+ " ?   , "
    + " ?   , "
    + " ?    "
+ " ) " ;

OraclePreparedStatement stmtBidItem = (OraclePreparedStatement) conn.prepareStatement( sqBidItem );
stmtBidItem.setInt     ( iParamNo ++ , 11 )   ;
stmtBidItem.setInt     ( iParamNo ++ , 22 )   ;
stmtBidItem.setInt     ( iParamNo ++ , 33 )   ;
stmtBidItem.executeUpdate();
}catch (Exception e){
    out.println ( e.getMessage() ) ;
}try{
iParamNo = 1 ;
String sqlUpdaeAuctionHeader = " Update  POM.POM_AUCTION_HEADERS SET NUMBER_OF_BIDS = NUMBER_OF_BIDS + 1 WHERE AUCTION_HEADER_ID = 5 " ;
OraclePreparedStatement stmtUpdaeAuctionHeader = (OraclePreparedStatement) conn.prepareStatement( sqlUpdaeAuctionHeader );
stmtUpdaeAuctionHeader.executeQuery();
stmtUpdaeAuctionHeader.close();
}
catch (Exception e){
     out.println ( e.getMessage()  ) ;
    }finally{
        if (conn!=null) 
         CoreServices.releaseConnection(conn);
}

解决方案 »

  1.   

    Connection conn = null;
    conn=core.getConnection();
    int iParamNo = 0 ;
    try{
             conn.setAutoCommit(false);//here
    iParamNo = 1 ;
    String sqlBidHeader = "" ;
    sqlBidHeader =  "INSERT INTO POM.POM_BID_HEADERS   (    "       
    + " BID_NUMBER     , " 
    + " AUCTION_HEADER_ID  , " 
    + " OPERATOR_ID   "                  
    + "  )  "                                    
    + "  VALUES (  "                             
    + " POM.POM_BID_HEADERS_S.nextVal , "
    + " ? , "
    + " ?  "           
    + " ) ";                                     
    OraclePreparedStatement stmtBidHeader = (OraclePreparedStatement) conn.prepareStatement( sqlBidHeader );
    stmtBidHeader.setInt    ( iParamNo ++ ,  1  ) ;
    stmtBidHeader.setInt    ( iParamNo ++ ,  2  ) ;
    stmtBidHeader.executeUpdate();
             conn.commit();//here
    }   
    catch (Exception e){
        out.println ( e.getMessage() ) ;
    }
    try{
    iParamNo = 1 ;
    String sqBidItem = " INSERT INTO POM.POM_BID_ITEM_PRICES  (                     "
        + " AUCTION_HEADER_ID  , "
        + " AUCTION_LINE_NUMBER , "
        + " BID_NUMBER "                                       
    + " ) "
    + " VALUES (  "
    + " ?   , "
        + " ?   , "
        + " ?    "
    + " ) " ;

    OraclePreparedStatement stmtBidItem = (OraclePreparedStatement) conn.prepareStatement( sqBidItem );
    stmtBidItem.setInt     ( iParamNo ++ , 11 )   ;
    stmtBidItem.setInt     ( iParamNo ++ , 22 )   ;
    stmtBidItem.setInt     ( iParamNo ++ , 33 )   ;
    stmtBidItem.executeUpdate();
    }catch (Exception e){
        out.println ( e.getMessage() ) ;
    }try{
    iParamNo = 1 ;
    String sqlUpdaeAuctionHeader = " Update  POM.POM_AUCTION_HEADERS SET NUMBER_OF_BIDS = NUMBER_OF_BIDS + 1 WHERE AUCTION_HEADER_ID = 5 " ;
    OraclePreparedStatement stmtUpdaeAuctionHeader = (OraclePreparedStatement) conn.prepareStatement( sqlUpdaeAuctionHeader );
    stmtUpdaeAuctionHeader.executeQuery();
    stmtUpdaeAuctionHeader.close();
    }
    catch (Exception e){
         out.println ( e.getMessage()  ) ;
        }finally{
            if (conn!=null) 
             CoreServices.releaseConnection(conn);
    }
      

  2.   

    我是想把这三个sql语句作为一个事务啊。上面那个不是用三个语句作为事务的。把三个sql语句编成一组作为事务该怎么写啊?
      

  3.   

    conn=core.getConnection();
    conn.setAutoCommit(false);//here
    然后在每个catch 语句里面加上conn.rollback();最后面加上conn.commit();
      

  4.   

    to :interpb(曾曾胡,深怕情多累美人!!!)
    ----------------------------------------------------------
    conn.commit();在
    conn.rollback();之后???还没有commit时,出现异常可以进行回滚。但commit后出现异常时不就不能进行回滚了吗?(因为commit之后没有conn.rollback();)个人认为这样写是有问题的。不知道我的理解对不对,请interpb(曾曾胡,深怕情多累美人!!!)帮忙解释解释。
      

  5.   

    你把这三段放到一个
    Connection conn = null;
    conn=core.getConnection();
    int iParamNo = 0 ;
    try{
    conn.setAutoCommit(false);//here
    ....
    conn.commit();
    }
    catch(Exception e)
    {
    conn.rollback();
    }里就好了
      

  6.   

    你的代码写的有问题如果三个sql是一个事务有一个sql的执行出现异常就应该不再执行下面的sql所以 你的每个catch里面还要加上throw e ;
      

  7.   

    干嘛写3个try catch啊,都写在一个里面不就完了。
    也就是yown(yong)说的那样。