2013-07-12 13 views
2

데이터베이스에서 데이터를 읽고 일부 계산을 수행하는 프로그램이 있습니다. 나는 try와 catch 문을 가지고 e.printstackfree()를 사용하여 오류를 인쇄했다. 그러나 오류를 사용자에게 출력하는 대신 오류를 전자 메일로 보낼 수있는 방법이 있습니까?Java JDBC Email PrintStackFree

같은 : 이제

try{ 
    Statement stmt = connection.createStatement(); 
    ............ 
}catch(SQLException e){ 
    System.err.print("\nDriver Error: " +"'" + e.getMessage()+"'"); 
    e.printStackFree(); 
    //email e.printStackFree() using javax mail API 

} 

, 내가 뭘 생각하고 것은 그 내가 오류를 이메일로 javax의 메일 API를 사용하면 무엇. 다시 말하지만, 어떻게해야할까요? 이것은 내가 지금까지 무엇을 가지고

:

try{ 
     Statement stmt = connection.createStatement(); 
    ............ 
}catch(SQLException e){ 
final Message message; 

Properties props = System.getProperties(); 
props.put("mail.smtp.host", "smtp.gmail.com"); 
Session session = Session.getInstance(props, null); 
message = new MimeMessage(session); 
message.setFrom(new InternetAddress("[email protected]")); //from 

message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]")); 

message.setSubject("Testing Error"); 

message.setContent("'"+e+"'", "text/html"); 

Transport.send(message); 
System.out.println("Sent Email!!!"); 

} 

감사합니다 ...

답변

2

그것은 실제로 어려운 것이 밤은 : 우리는 단순히 예외의 printStackTrace 방법에 StringBuilder을 통과 D

try{ 
    Statement stmt = connection.createStatement(); 
    ....................... 
} catch (Exception e) { 
    String host = "smtp.google.com"; 
    String sender= "[email protected]"; 
    String recipiant = "[email protected]"; 

    StringWriter tracewriter = new StringWriter(); 
    e.printStackTrace(tracewriter); 
    String trace = tracewriter.toString(); 

    Properties props= System.getProperties(); 
    props.setPropertie("mail.smtp.host", host); 

    Session session = Session.getDefaultInstance(props); 

    try{ 
     MineMessage message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(sender)); 
     message.addRecipiant(Message.RecipiantType.TO, new InternetAddress(recipiant)); 
     message.setSubject("Testing Error"); 
     message.setText(trace); 

     Transport.send(message); 
     System.out.println("An administrator has been notified"); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 

, toString와 결합 된 문자열을 읽고 이메일을 만드세요.

이제 데이터베이스 쿼리에서 오는 예외가있을 때마다 전자 메일을 보낼 수 있어야하고 그 밖에도 시도 할 때마다 전자 메일을 보낼 수 있어야합니다.

+1

변수를 초기화하기 전에 e.printStackTrace (trace)를 사용하지 않으셔도 오류가 발생합니다 ... 또한 트레이스 작성자가 실제로 문자열을 읽지 않는다고 생각합니다. 설명해 주시겠습니까? 상세한 답변을 해주셔서 감사드립니다. – user2501165

+0

신경 쓰지 마라! 나는 이렇게했다 : e.printStackTrace (new PrintWriter (tracewriter)); String trace = tracewriter.toString(); – user2501165

+0

도와 주셔서 감사합니다. @AndMim – user2501165

1

e.printStackTrace()는의 PrintStream 또는 PrintWriter를 전달할 수 있습니다. 이렇게하면 스택 추적을 System.out이 아닌 다른 곳으로 출력 할 수 있습니다.

"출력"하는 좋은 장소는 StringWriter입니다. 그것은 메모리에 있고 String에 씁니다. 그런 다음 이메일 메시지에 추가 할 수 있습니다.