2017-05-29 7 views
-5
 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になりました。これはリソースブロックで を試してみると問題ですか?助けてくださいリソースクラスの変数getsでnullが得られる

ここで、rsParametersはクラスレベルであり、前にフェッチされます。最初の の反復の後、rsParametersの値がnullになりました。これはリソースブロックで を試してみると問題ですか?助けてください

+1

ここに通常の完全なコードを入力してください。この半分のコードサンプルから何がうまくいかないのか誰も推測できません。 – nbokmans

+0

空のtryブロックを終了すると 'rsParameters'である' rs'を閉じるように要求します。最初の繰り返しでそれを行い、次のエラーを返します。 – eckes

+0

これには解決策はありますか? –

答えて

0

あなたのrsParametersパラメータはタイプResultsetです。 try {}ブロックが完了した後の最初の反復で、rsParametersのclose()メソッド:ResultSetが呼び出されます。

これは、resultSet NUllのすべてのプロパティを内部的に作成します。

これが2回目の繰り返しで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

関連する問題