2014-05-21 89 views
0
import java.io.*; 
import java.util.*; 
import java.sql.*; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class QueryServlet extends HttpServlet { 

    @Override 
    public void doPost(HttpServletRequest req,HttpServletResponse res) throws IOException, ServletException 
    { 
     PrintWriter out=res.getWriter(); 
     res.setContentType("text/html"); 

     Connection conn = null; 

     final String id = UUID.randomUUID().toString(); 

     Map m = req.getParameterMap(); 
     Set s = m.entrySet(); 
     Iterator it = s.iterator(); 

     try { 
      conn = DriverManager.getConnection(
      "jdbc:mysql://localhost:3306/orders", "username", "password"); 

      String sqlStr = "insert into transactions (LogID,KeyName,KeyValue) " 
      + "values (?,?,?)"; 

      while(it.hasNext()){ 

       Map.Entry<String,String[]> entry = (Map.Entry<String,String[]>)it.next(); 

       String key    = entry.getKey(); 
       String[] value   = entry.getValue(); 

       try (PreparedStatement stmt = conn.prepareStatement(sqlStr)) { 
       stmt.setString(1, id); 
       stmt.setString(2, key); 
       stmt.setString(3, value[0].toString()); 

       out.println("<html><head><title>Callback Script</title></head><body>"); 
       out.println("<h3>Inserted into the database:</h3>"); 
       out.println("<p>Parameter: " + key + " and Value = " + value[0].toString() + "</p>");   
       int updateCount = stmt.executeUpdate(); 
       for (Enumeration<String> en = req.getParameterNames(); en.hasMoreElements();) { 
        String paramName = en.nextElement(); 
        String paramValue = req.getParameter(paramName); 
        } 
       } 
      } 
      } catch (SQLException ex) { 
       ex.printStackTrace(); 
      } finally { 
       out.close(); 
      try { 
       if (conn != null) conn.close(); 
      } catch (SQLException ex) { 
       ex.printStackTrace(); 
       } 
     } 
    }   
} 

如果MySQL數據庫出現一些錯誤(如錯誤的憑據),任何SQL語法錯誤都應該被處理並顯示,但它根本不顯示。JavaServlet處理SQL錯誤

對此的任何意見或我編碼錯了嗎?

乾杯

+0

你想顯示什麼,在哪裏?我所看到的只是printStackTrace()在你的catch塊中,它應該在你的控制檯中顯示堆棧跟蹤。 – Susie

回答

1

你有什麼將只打印到日誌。要打印的頁面,使用的out.print

catch (SQLException ex) 
{ 
    ex.printStackTrace(); //print to log 
    out.print("<br/>Error: " + ex.getMessage()); //print to page 
} 

憑據錯誤,你不會想要打印的實際消息頁面,因爲它可能包括憑據。所以你應該隔離開自己的try-catch連接的部分,它可以嵌套在這個連接中。

try 
{ 
    conn = DriverManager.getConnection(
      "jdbc:mysql://localhost:3306/orders", "username", "password"); 
} 
catch(Exception ex_connError) 
{ 
    out.print("<br/>Error making db connection"); 
}