2014-05-21 2 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

무엇을 표시하려고합니까? catch 블록에서 printStackTrace()를 볼 수 있습니다. 그러면 스택 추적이 콘솔에 표시됩니다. – Susie

답변

1

가지고있는 것은 로그에만 인쇄됩니다. 이 자격 증명을 포함 할 수 있습니다로 페이지를 인쇄하려면, 당신은 페이지에 실제 메시지를 인쇄 할 수 없습니다 자격 증명 오류에

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

을 out.print 사용합니다. 따라서 연결을 여는 부분을 자체 try-catch와 연결해야합니다.이 try-catch는이 내부에 중첩 될 수 있습니다.

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