【问题标题】:Try with resource class variable gets null尝试使用资源类变量获取 null
【发布时间】:2017-10-29 09:26:36
【问题描述】:
        protected void saveData() {
        Map<String, String> allStationsParams = new HashMap<>();
        List<String> stations = getAllStations();
        stmt = Database.getUpdateableStatement();
        today = (SysTime.currentTimeMillis() / DasStamp.TICKS_PER_DAY) * 
        DasStamp.TICKS_PER_DAY;
        String changeTimestamp = DasStamp.asCompactString(today);
        String keyName = "COM.MAPPINGTOOLTIP." + attributeValue;
        for (int row = 0; row < this.getTableModel().getRowCount(); row++) {
            String station = (String)this.getTableModel().getValueAt(row, 0);
            putInStationParams(this, station, allStationsParams, row);
        }
        for (String station : stations) {
            boolean sendToDB = false;
            try (ResultSet rs = this.rsParameters) {
                rs.beforeFirst();
                while (rs.next()) {
                    if (rs.getString("station").equals(station)) {
                        sendToDB = true;
                        break;
                    }
                }
                if (sendToDB) {
                    if (!rs.getString("value_text").equals(allStationsParams.get(station)) || !allStationsParams.containsKey(station)) {
                        sendToDB = true;
                    } else {
                        sendToDB = false;
                    }
                } else if (allStationsParams.containsKey(station)) {
                    sendToDB = true;
                }

                if (sendToDB) {
                    String  sql = "REPLACE INTO dss_parameter (key_name, station, valid_from, value_text"
                            + ", change_timestamp) VALUES ('"
                            + keyName + "','" + station + "','" + DasStamp.asDateOnlyString(today) + "','"
                            + Helper.nz(allStationsParams.get(station)) + "','"
                            + changeTimestamp + "') ;";
                    if (null != stmt) {
                        stmt.execute(sql);
                        if (!isResultSetEmpty(rs) && !rs.isAfterLast()) {
                            AdminLogger.log("dss_parameter", Action.UPDATE,
                                    "key_name='" + keyName + "' and station='" + station + "' and valid_from='" + DasStamp.asDateOnlyString(today) + "'",
                                    "value_text='" + rs.getString("value_text") + "'",
                                    "value_text='" + Helper.nz(allStationsParams.get(station)) + "', change_timestamp='" + changeTimestamp + "'");
                        } else {
                            AdminLogger.log("dss_parameter", Action.INSERT,
                                    "key_name='" + keyName + "' and station='" + station + "' and valid_from='" + DasStamp.asDateOnlyString(today) + "'",
                                    "", "value_text='" + Helper.nz(allStationsParams.get(station)) + "', change_timestamp='" + changeTimestamp + "'");
                        }
                    }
                }
            } catch (SQLException e) {
                AppFrame.msgBox("Error on insert: " + e.getMessage());
                Helper.printMessage(true, false, "Parameter save failed!!", e);
            }
        }
    }

其中 rsParameters 是类级别并且是之前获取的。先后 迭代,rsParameters 值正在变为 null。这是 try 的问题吗 有资源块?请帮忙

其中 rsParameters 是类级别并且是之前获取的。先后 迭代,rsParameters 值正在变为 null。这是 try 的问题吗 有资源块?请帮忙

【问题讨论】:

  • 把你正常的完整代码放在这里。没有人能从这个半代码示例中猜出出了什么问题。
  • 好吧,当您退出空的 try 块时,您要求它关闭 rs,即 rsParameters,所以它在第一次迭代时执行此操作,并在下一次迭代时给您一个错误。跨度>
  • 有什么解决办法吗?

标签: java exception exception-handling try-catch resultset


【解决方案1】:

您的 rsParameters 参数属于结果集类型。 在第一次迭代中,在 try{} 块完成后,rsParameters:ResultSet 的 close() 方法被调用。

这在内部使 resultSet 的所有属性为 NUll。

这就是在第二次迭代中获取 Null 属性的原因。

查看:http://grepcode.com/file/repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.27/com/mysql/jdbc/ResultSetImpl.java#ResultSetImpl.realClose%28boolean%29

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2017-01-03
    • 2020-03-19
    • 2021-07-30
    • 1970-01-01
    相关资源
    最近更新 更多