Java Try with resource类变量获取null 受保护的void saveData(){ Map AllStationParams=new HashMap(); 列出站点=getAllStations(); stmt=Database.getUpdateableStatement(); 今天=(SysTime.currentTimeMillis()/DasStamp.TICKS\u/天)* DasStamp.TICKS_/天; String changeTimestamp=DasStamp.asCompactString(今天); String keyName=“COM.MAPPINGTOOLTIP.”+attributeValue; 对于(int row=0;row
其中rsParameters是类级别的,在之前获取。先 迭代,rsParameters值变为null。这是try的问题吗 是否使用资源块?请帮忙 其中rsParameters是类级别的,在之前获取。先 迭代,rsParameters值变为null。这是try的问题吗Java Try with resource类变量获取null 受保护的void saveData(){ Map AllStationParams=new HashMap(); 列出站点=getAllStations(); stmt=Database.getUpdateableStatement(); 今天=(SysTime.currentTimeMillis()/DasStamp.TICKS\u/天)* DasStamp.TICKS_/天; String changeTimestamp=DasStamp.asCompactString(今天); String keyName=“COM.MAPPINGTOOLTIP.”+attributeValue; 对于(int row=0;row,java,exception,exception-handling,try-catch,resultset,Java,Exception,Exception Handling,Try Catch,Resultset,其中rsParameters是类级别的,在之前获取。先 迭代,rsParameters值变为null。这是try的问题吗 是否使用资源块?请帮忙 其中rsParameters是类级别的,在之前获取。先 迭代,rsParameters值变为null。这是try的问题吗 使用资源块?请帮助您的rsParameters参数属于Resultset类型。 在第一次迭代中,在try{}之后,将调用rsParameters:ResultSet的close()方法 这会在内部使resultSet的所有属性都为N
使用资源块?请帮助您的rsParameters参数属于Resultset类型。 在第一次迭代中,在try{}之后,将调用rsParameters:ResultSet的close()方法 这会在内部使resultSet的所有属性都为NUll 这就是在第二次迭代期间获取Null属性的原因
请参阅:只需在此处输入正常的完整代码即可。没有人能从这个半代码示例中猜出哪里出了问题。那么,当您退出空的try块时,您要求它关闭
rs
,即rsParameters
,因此它在第一次迭代时会这样做,并在下一次迭代时给您一个错误。有什么解决方案吗?
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);
}
}
}