Я получаю сообщение об ошибке нулевого указателя при передаче соединения из метода. Я вижу ошибку: 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());
}
}
}