【问题标题】:Insert multiple Records retrieved from JSON which is parsed using POJO in JDBC插入从 JSON 检索到的多条记录,这些记录使用 JDBC 中的 POJO 解析
【发布时间】:2016-11-26 14:18:52
【问题描述】:

我正在尝试插入从 Rest API 检索到的 JSON 数据,该数据由 Jackson 使用 POJO 解析。 在 preparedStatement = dbConnection.prepareStatement(insertTableSQL);

处插入基于以下代码行的记录时出现空指针异常

请建议我在这里做错了什么?

 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)

【问题讨论】:

  • connnull?您需要初始化连接对象。此外,切勿吞下异常并确保至少记录它们。这将使解决此类问题变得更加容易。
  • 谢谢您的回复,它只是一个代码sn-p,在上面显示的代码之前我已经通过Class.forName(“com.mysql.jdbc.Driver”)初始化了conn; conn = DriverManager.getConnection(DB_URL, USER, PASS);
  • 有没有其他方法可以使用 JDBC 在数据库中插入 JSON 值(使用 Pojo 映射)?
  • 您一定会在日志文件中收到某种错误消息。请分享。
  • 我已经更改了我的代码并附上了错误日志,但我仍然面临同样的空指针异常问题。 @MickMnemonic

标签: java mysql json jdbc


【解决方案1】:

我已经通过将 mysql 连接器 jar 升级到最新版本解决了上述问题。似乎 tracer.aj 掩盖了该过程,因此显示了空指针异常。我从来没有怀疑过我的代码一次 :) 信用:Null Pointer Exception for prepared statement Sql Connection in java

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2021-10-27
    • 2015-08-13
    相关资源
    最近更新 更多