第一次写事务,不会啊,哪位帮忙把下面的代码改成事务?着急,想学习一下。谢谢啦!
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);
}
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);
}
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);
}
conn.setAutoCommit(false);//here
然后在每个catch 语句里面加上conn.rollback();最后面加上conn.commit();
----------------------------------------------------------
conn.commit();在
conn.rollback();之后???还没有commit时,出现异常可以进行回滚。但commit后出现异常时不就不能进行回滚了吗?(因为commit之后没有conn.rollback();)个人认为这样写是有问题的。不知道我的理解对不对,请interpb(曾曾胡,深怕情多累美人!!!)帮忙解释解释。
Connection conn = null;
conn=core.getConnection();
int iParamNo = 0 ;
try{
conn.setAutoCommit(false);//here
....
conn.commit();
}
catch(Exception e)
{
conn.rollback();
}里就好了
也就是yown(yong)说的那样。