2013-07-12 34 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

它實際上心不是那麼難: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(); 
    } 
} 

我們簡單地傳遞到StringBuilder異常的printStackTrace方法,閱讀結合串toString,並將其發送作爲電子郵件。

現在你應該可以發送電子郵件,只要有數據庫查詢出現異常,以及你正在做的任何其他事情。

+1

在初始化變量之前沒有e.printStackTrace(trace)會給你錯誤......另外,我不認爲tracewriter實際上讀取任何字符串。你能解釋一下嗎?並且,感謝您的詳細解答。 – user2501165

+0

沒關係把它修好!我這樣做:e.printStackTrace(新的PrintWriter(tracewriter)); String trace = tracewriter.toString(); – user2501165

+0

感謝您的幫助@AndMim – user2501165

1

e.printStackTrace()可以傳遞一個PrintStream或PrintWriter的。這使您可以將堆棧跟蹤輸出到System.out以外的某個位置。

「輸出」它的一個好地方是一個StringWriter。它在內存中並寫入一個字符串。然後,您可以將其添加到您的電子郵件。