2016-07-22 54 views
1

我試圖插入JSON數據,它是從Jackson使用POJO解析的Rest API檢索的。 我在基於下面的代碼行插入記錄時收到空指針異常preparedStatement = dbConnection.prepareStatement(insertTableSQL);插入多個從JSON中檢索到的記錄使用JDBC中的POJO進行解析

請提出我在做什麼錯在這裏?

Connection dbConnection = null; 
    PreparedStatement preparedStatement = null; 

    String insertTableSQL = "INSERT INTO Test_Batch" 
      + "((Account_ID, BestPractice_Source, Check_ID, Importance,Category,Last_BestPractices_Checked_Date,Last_BestPractices_Updated_Date))                   VALUES" + "(?,?,?,?,?,?,?)"; 

    try { 
     dbConnection = getDBConnection(); 
     preparedStatement = dbConnection.prepareStatement(insertTableSQL); 

     dbConnection.setAutoCommit(false); 
     ObjectMapper mapper=new ObjectMapper(); 
     JsonNode root =mapper.readTree(new RestClient().Json()); 
      ArrayNode BestPracticeChecks=(ArrayNode)root.path("BestPracticeChecks"); 
       Iterator<JsonNode> iterator =BestPracticeChecks.elements(); 
       BestPracticeChecks bestPracticeChecksid =null;  
     while (iterator.hasNext()) {         
         bestPracticeChecksid = mapper.readValue(iterator.next().traverse(), BestPracticeChecks.class);      
          preparedStatement.setInt(1, Account_ID); 
          preparedStatement.setString(2, "xyz"); 
          preparedStatement.setInt(3, bestPracticeChecksid.getCheckId()); 
          preparedStatement.setString(4, bestPracticeChecksid.getImportance()); 
          preparedStatement.setString(5, bestPracticeChecksid.getCategory()); 
          preparedStatement.setTimestamp(6, getCurrentTimeStamp()); 
          preparedStatement.setString(7, readDateofResults()); 
          preparedStatement.addBatch(); 

     } 

     preparedStatement.executeBatch(); 

     dbConnection.commit(); 

錯誤日誌如下:

Exception in thread "main" java.lang.NullPointerException 
    at com.mysql.jdbc.PreparedStatement.asSql(PreparedStatement.java:586) 
    at com.mysql.jdbc.PreparedStatement.asSql(PreparedStatement.java:524) 
    at com.mysql.jdbc.PreparedStatement.toString(PreparedStatement.java:3551) 
    at java.lang.String.valueOf(Unknown Source) 
    at java.lang.StringBuffer.append(Unknown Source) 
    at com.mysql.jdbc.trace.Tracer.printParameters(Tracer.aj:240) 
    at com.mysql.jdbc.trace.Tracer.printEntering(Tracer.aj:167) 
    at com.mysql.jdbc.trace.Tracer.entry(Tracer.aj:126) 
    at com.mysql.jdbc.trace.Tracer.ajc$before$com_mysql_jdbc_trace_Tracer$1$f51c62b8(Tracer.aj:45) 
    at com.mysql.jdbc.Connection.registerStatement(Connection.java) 
    at com.mysql.jdbc.Statement.<init>(Statement.java:197) 
    at com.mysql.jdbc.PreparedStatement.<init>(PreparedStatement.java:442) 
    at com.mysql.jdbc.ServerPreparedStatement.asSql(ServerPreparedStatement.java:347) 
    at com.mysql.jdbc.PreparedStatement.asSql(PreparedStatement.java:524) 
    at com.mysql.jdbc.ServerPreparedStatement.toString(ServerPreparedStatement.java:2327) 
    at java.lang.String.valueOf(Unknown Source) 
    at java.lang.StringBuffer.append(Unknown Source) 
    at com.mysql.jdbc.trace.Tracer.printParameters(Tracer.aj:240) 
    at com.mysql.jdbc.trace.Tracer.printEntering(Tracer.aj:167) 
    at com.mysql.jdbc.trace.Tracer.entry(Tracer.aj:126) 
    at com.mysql.jdbc.trace.Tracer.ajc$before$com_mysql_jdbc_trace_Tracer$1$f51c62b8(Tracer.aj:45) 
    at com.mysql.jdbc.Connection.registerStatement(Connection.java) 
    at com.mysql.jdbc.Statement.<init>(Statement.java:197) 
    at com.mysql.jdbc.PreparedStatement.<init>(PreparedStatement.java:423) 
    at com.mysql.jdbc.ServerPreparedStatement.<init>(ServerPreparedStatement.java:280) 
    at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4363) 
    at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4301) 
    at com.tutorialspoint.JDBCBatchUpdateExample.batchInsertRecordsIntoTable(JDBCBatchUpdateExample.java:49) 
    at com.tutorialspoint.JDBCBatchUpdateExample.main(JDBCBatchUpdateExample.java:29) 
+0

'conn' is'null'?您需要初始化連接對象。另外,請不要吞下異常,並確保至少記錄它們。這將使解決問題更容易。 –

+0

Thankyou的回覆,它只是一個代碼片段,在上面顯示的代碼之前,我已經初始化了conn,通過 Class.forName(「com.mysql.jdbc.Driver」); conn = DriverManager.getConnection(DB_URL,USER,PASS); –

+0

是否有任何其他方式可以使用JDBC在數據庫中插入JSON值(使用Pojo進行映射)? –

回答