2012-05-26 71 views
0

我有一個編輯成員的方法,我想將錯誤打印到一個文件中,但如果我嘗試將堆棧跟蹤打印到Error_Report.txt文件中,我會一直得到void無法解除引用的錯誤文件。無論如何,我可以打印出來嗎? 這是我的代碼。void無法解除引用

public void edit() { 
    FileWriter fw = new FileWriter(new File("Error_Report.txt")); 
    Connection con; 
    Statement stmt; 
    ResultSet rs; 

    int id = (int)_id.getSelectedItem(); 
    String name = _name.getText(); 
    String user = _username.getText(); 
    String pass = _password.getText(); 
    String pos = _position.getSelectedItem().toString(); 

    try { 
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    con = DriverManager.getConnection("jdbc:odbc:collegesys", 
             "root", "0blivi0n"); 

    stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
           ResultSet.CONCUR_READ_ONLY); 

    PreparedStatement prep = con.prepareStatement("UPDATE `main` WHERE ID = ?"); 
    prep.setInt(1, id); 
    prep.setString(2, name); 
    prep.setString(3, user); 
    prep.setString(4, pass); 
    prep.setString(5, pos); 

    prep.execute(); 
    } catch(SQLException sqle) { 
    String sql = sqle.printStackTrace().toString(); 
    fw.write("" + sql); 
    } catch(ClassNotFoundException cnfe) { 
    fw.write("" + cnfe); 
    } 
} 
+0

看起來你想通過你的函數發送一個'void'作爲參數,你不能這麼做。 'void'類型意味着沒有類型。 –

+0

發佈方法,以便我們可以看到問題更清楚。否則,@LuiggiMendoza是現貨。 – Makoto

+0

我認爲這是編譯時錯誤?什麼代碼導致它? – SirPentor

回答

4

您的問題是printStackTrace不返回任何東西,所以沒有什麼可轉換爲字符串。像這樣寫。

PrintWriter writer = new PrintWriter(fw); 
sqle.printStackTrace(writer); 
writer.close(); 
4

sqle.printStackTrace()返回一個void並且不能用作參數。更改您的代碼是這樣的:

catch(SQLException sqle) { 
    StringBuilder sb = new StringBuilder(); 
    StackTraceElement[] st = sqle.getStackTrace(); 
    for(StackTraceElement s : st) { 
     sb.append(s); 
     sb.append('\n'); 
    } 
    fw.write(sb.toString()); 
} 
+0

好吧,我實現了這一點,現在我得到了帶有IOException錯誤的垃圾郵件。如何在catch()中實現try catch? –

+1

@NathanKreider你可以儘可能深的嵌套'try'和'catch'語句。 –

相關問題