2013-03-29 53 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(); 
} 
相关问题