Java Postgres org. postgresql .util.PSQLException - PullRequest
0 голосов
/ 14 марта 2020

Я получаю сообщение об ошибке нулевого указателя при передаче соединения из метода. Я вижу ошибку: org. postgresql .util.PSQLException: Соединение с: 5432 отказано. Убедитесь, что имя хоста и порт указаны правильно и что администратор почты принимает соединения TCP / IP. Это не 100%, потому что в большинстве случаев он обновляет то, что ему нужно, но иногда видит эту ошибку. Есть ли лучший способ справиться с этой ошибкой (возможно, некоторые повторные логи c). Это большое обновление, так как я выполняю следующие итерации:

  • Итератор it1a = разница. ) .entrySet () итератора ().
  • Итератор it3a = diff.entriesDiffering (). EntrySet (). Iterator ();
  • Итератор it4a = diff.entriesInCommon (). EntrySet (). Iterator ();

Ниже приведено большинство кода для итератора it1a. Другие итераторы имеют немного другой SQL, но используют те же методы.

@Test(description = "Compare Data Between Two Sources")
public void dataComp() throws SQLException, JSONException {

int id = 564800;
String query = "SELECT source_1, source_2 FROM id_map WHERE id =?";
Connection conn = createDatabaseConnection();
List<Integer> parameters = ImmutableList.of(id);
ResultSet result = makeDatabaseQuery(conn, query, parameters);
HashMap<String, String> map = new HashMap<>();
while (result.next()) {
  map.put(result.getString("source_1"), result.getString("source_2"));
}
if (map.entrySet().isEmpty()) {
  System.out.println("No mapping found for source: " + id);
  conn.close();
} else {
  conn.close();

  Iterator hmIterator = map.entrySet().iterator();

  while (hmIterator.hasNext()) {
    Map.Entry mapElement = (Map.Entry) hmIterator.next();

    JSONObject test = Comparision.getSourceOneJson(id, mapElement.getKey().toString());
    JSONObject test2 = Comparision.getSourceTwoJson(id, mapElement.getValue().toString());

    String source_1_id = mapElement.getKey().toString();
    String source_2_id = mapElement.getValue().toString();

    JSONObject aDataJson = DataComparision.getSubsetOfData(test, "fooData");
    JSONObject bDataJson = DataComparision.getSubsetOfData(test2, "fooData");
    bDataJson.remove("barData");

    Map<String, Object> sourceOneMap = FlatMapUtil.toMap(aDataJson);
    Map<String, Object> sourceTwoMap = FlatMapUtil.toMap(bDataJson);
    Map<String, Object> leftFlatMap = FlatMapUtil.flattenaDataJson);
    Map<String, Object> rightFlatMap = FlatMapUtil.flatten(bDataJson);

    MapDifference<String, Object> difference = Maps.difference(leftFlatMap, rightFlatMap);

    System.out.println();
    System.out.println("Fields\n--------------------------");
    difference.entriesOnlyOnLeft().forEach((key, value) -> System.out.println(key + ": " + value));
    String SQL =
        "INSERT INTO test_comparison (id, source_1, source_2, "
            + "field, source_1_value, source_1_decimals, source_1_is_null_yes, source_1_is_zero_yes, "
            + "source_1_is_zero_decimal_zero_yes) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
    Object[] sourceOneArray = new Object[9];
    Iterator it1a = difference.entriesOnlyOnLeft().entrySet().iterator();
    while (it1a.hasNext()) {
      Map.Entry pair1a = (Map.Entry) it1a.next();
      hawkeyeOnlyArray[0] = id;
      hawkeyeOnlyArray[1] = source_1_id;
      hawkeyeOnlyArray[2] = source_2_id;
      hawkeyeOnlyArray[3] = pair1a.getKey().toString();
      hawkeyeOnlyArray[4] = pair1a.getValue().toString();
      hawkeyeOnlyArray[5] = DataComparision.countDecimals(pair1a.getValue());
      hawkeyeOnlyArray[6] = DataComparision.checkIfValueNull(pair1a.getValue().toString(), "null");
      hawkeyeOnlyArray[7] = DataComparision.checkIfValueZero(pair1a.getValue().toString(), "0");
      hawkeyeOnlyArray[8] = DataComparision.checkIfValueZero(pair1a.getValue().toString(), "0.0");
      makeDatabaseUpate(SQL, sourceOneArrayArray);
      }
    }
  }

public static Connection createDatabaseConnection() {
  String jdbcClassName = "org.postgresql.Driver";
  String jdbcDatabaseUrl = "jdbc:postgresql://database-url.com/id_mapping";
  String jdbcDatabaseUsername = username;
  String jdbcDatabasePassword = password;

  Connection conn = null;
  try {
      Class.forName(jdbcClassName);
      conn = DriverManager.getConnection(jdbcDatabaseUrl, jdbcDatabaseUsername, jdbcDatabasePassword);
  } catch (ClassNotFoundException | SQLException e) {
      e.printStackTrace();
  }
  return conn;
 }

  public static ResultSet makeDatabaseQuery(Connection conn, String query, List <Integer> 
  parameters) throws SQLException {
    PreparedStatement statement = conn.prepareStatement(query);
    for (int i = 0; i < parameters.size(); i++) {
        statement.setInt (i + 1, parameters.get(i));
    }
    return statement.executeQuery();
}

public void makeDatabaseUpate(String SQL, Object[] myArray) {
    try (

        Connection conn2 = createDatabaseConnection();
         PreparedStatement pstmt = conn2.prepareStatement(SQL)) {

        int noStatment = 0 + 1;
        for (int j=0; j < myArray.length; j++){
            pstmt.setObject (noStatment, myArray[j]);
            noStatment++;
        }
        pstmt.executeUpdate ();

    } catch (SQLException ex) {
        System.out.println(ex.getMessage());
    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...