2013-03-29 56 views
0

我試圖使用sql查詢導出數據從數據庫中的數據,但獲取空指針異常。沒有線索去除它。我在Bold字體的行中得到這個異常。獲取空指針異常將數據從數據庫導出到xml

try { 

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    Document doc = builder.newDocument(); 
    Element results = doc.createElement("Results"); 
    doc.appendChild(results); 

    Class.forName("oracle.jdbc.OracleDriver"); 
    Connection con = DriverManager 
      .getConnection("jdbc:oracle:thin:@localhost:1521:XE", "hr", "hr"); 

    ResultSet rs = con.createStatement().executeQuery("select * from departments"); 

    ResultSetMetaData rsmd = rs.getMetaData(); 
    int colCount = rsmd.getColumnCount(); 

    while (rs.next()) { 
     Element row = doc.createElement("Row"); 
     results.appendChild(row); 
     for (int i = 1; i <= colCount; i++) { 
      String columnName = rsmd.getColumnName(i); 
      Object value = rs.getObject(i); 
      Element node = doc.createElement(columnName); 
      row.appendChild(node); 
      **node.appendChild(doc.createTextNode(value.toString()));** 
     } 
    } 


    DOMSource domSource = new DOMSource(doc); 
    TransformerFactory tf = TransformerFactory.newInstance(); 
    Transformer transformer = tf.newTransformer(); 
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 
    transformer.setOutputProperty(OutputKeys.METHOD, "xml"); 
    transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1"); 
    StringWriter sw = new StringWriter(); 
    StreamResult sr = new StreamResult(sw); 
    transformer.transform(domSource, sr); 

    System.out.println(sw.toString()); 


    con.close(); 
    rs.close(); 

} catch (Exception e) { 
    e.printStackTrace(); 
} 

堆棧跟蹤:

java.lang.NullPointerException 
at org.ProjectXML.ui.DataBaseToXML.main(DataBaseToXML.java:61) 

任何想法?

+2

你能提供的堆棧跟蹤? – CodeChimp

+0

你在哪一行得到錯誤? –

+0

@CodeChimp這裏是堆棧跟蹤:顯示java.lang.NullPointerException \t在org.ProjectXML.ui.DataBaseToXML.main(DataBaseToXML.java:60)在該行 – Ritesh

回答

0

請在代碼下面找到解決這個空指針異常的代碼。你可能知道,修正任何空指針異常可以通過添加一個簡單的IF-Clause來通過異常。

所以這裏的訣竅是將這種簡單的代碼:

if (value != null) 
      node.appendChild(doc.createTextNode(value.toString())); 
      else 
       node.appendChild(doc.createTextNode("")); 
      row.appendChild(node); 

全碼:

public static String ConvertToXML1(ResultSet rs, String view) 
     throws Exception { 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    Document doc = builder.newDocument(); 
    Element results = doc.createElement(view); 
    doc.appendChild(results); 

    ResultSetMetaData rsmd = rs.getMetaData(); 
    int colCount = rsmd.getColumnCount(); 

    while (rs.next()) { 
     Element row = doc.createElement("Row"); 
     results.appendChild(row); 
     for (int i = 1; i <= colCount; i++) { 
      String columnName = rsmd.getColumnName(i); 
      Object value = rs.getObject(i); 
      Element node = doc.createElement(columnName); 
      if (value != null) 
       node.appendChild(doc.createTextNode(value.toString())); 
      else 
       node.appendChild(doc.createTextNode("")); 
      row.appendChild(node); 
     } 
    } 
    DOMSource domSource = new DOMSource(doc); 
    TransformerFactory tf = TransformerFactory.newInstance(); 
    Transformer transformer = tf.newTransformer(); 
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 
    transformer.setOutputProperty(OutputKeys.METHOD, "xml"); 
    transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1"); 
    StringWriter sw = new StringWriter(); 
    StreamResult sr = new StreamResult(sw); 
    transformer.transform(domSource, sr); 

    return sw.toString(); 
} 
相關問題