Mega Code Archive

 
Categories / Java / Servlets
 

Database transaction

import java.sql.CallableStatement; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; public class DbServletTrans extends HttpServlet {   DataSource pool;   public void init() throws ServletException {     Context env = null;     try {       env = (Context) new InitialContext().lookup("java:comp/env");       pool = (DataSource) env.lookup("jdbc/oracle-8i-athletes");       if (pool == null)         throw new ServletException(             "'oracle-8i-athletes' is an unknown DataSource");     } catch (NamingException ne) {       throw new ServletException(ne);     }   }   public void doGet(HttpServletRequest request, HttpServletResponse response)       throws ServletException, java.io.IOException {     Connection conn = null;     Statement stmt = null;     response.setContentType("text/html");     java.io.PrintWriter out = response.getWriter();     out         .println("<html><head><title>Using transactions</title></head><body>");     out.println("<h2>These SQL statements are part of a transaction</h2>");     out.println("CallableStatement.executeUpdate()");     out.println("<br><br>");     out.println("Statement.executeUpdate()");     out.println("<br><br>");     try {       conn = pool.getConnection();       out.println("AutoCommit before setAutoCommit(): "           + conn.getAutoCommit() + "<br><br>");       out.println("Transaction isolation level: ");       switch (conn.getTransactionIsolation()) {       case 0:         out.println("TRANSACTION_NONE<br><br>");         break;       case 1:         out.println("TRANSACTION_READ_UNCOMMITTED<br><br>");         break;       case 2:         out.println("TRANSACTION_READ_COMMITTED<br><br>");         break;       case 4:         out.println("TRANSACTION_REPEATABLE_READ<br><br>");         break;       case 8:         out.println("TRANSACTION_SERIALIZABLE<br><br>");         break;       default:         out.println("UNKNOWN<br><br>");       }       conn.setAutoCommit(false);       CallableStatement cs = null;       //Create an instance of the CallableStatement       cs = conn.prepareCall("{call addEvent (?,?,?)}");       cs.setString(1, "Salisbury Beach 5-Miler");       cs.setString(2, "Salisbury MA");       cs.setString(3, "14-Aug-2003");       //Call the inherited PreparedStatement.executeUpdate() method       cs.executeUpdate();       String sql = "update raceevent set racedate='13-Aug-2003' "           + "where name='Salisbury Beach 5-Miler'";       int res = 0;       stmt = conn.createStatement();       res = stmt.executeUpdate(sql);       //commit the two SQL statements       conn.commit();     } catch (Exception e) {       try {         //rollback the transaction in case of a problem         conn.rollback();       } catch (SQLException sqle) {       }       throw new ServletException(e.getMessage());     } finally {       try {         if (stmt != null)           stmt.close();         if (conn != null)           conn.close();//this returns the Connection to the                  // Connection pool       } catch (SQLException sqle) {       }     }     out.println("</table></body></html>");     out.close();   } //doGet }