Я пытаюсь переписать +/- 250 отдельных операторов вставки в 1 пакетную инструкцию, но она ничего не делает.без ошибок, без ответов
Следовали этому руководству: https://www.mkyong.com/jdbc/jdbc-preparedstatement-example-batch-update/
После этого много-много стековых потоков, но я не вижу проблемы
Моя локальная база данных:
<Resource name="jdbc/wtnfV2local" url="jdbc:postgresql://localhost:5432/wtnfV2local"
driverClassName="org.postgresql.Driver" auth="Container" type="javax.sql.DataSource"
username="postgres" password="geheim" />
Мой не работающий код:
@Override
public void insertArrayUserV2Voidv2(ArrayList<UserV2> users) {
String insertTableSQL = "INSERT INTO RANK (account, rank, date) VALUES (?,?, to_timestamp(?, 'YYYY-MM-DD\"T\"HH24:MI:SS.ff3\"Z\"'))";
try (Connection conn = baseDao.getConnection();
PreparedStatement preparedStmt = conn.prepareStatement(insertTableSQL);) {
for (UserV2 u : users) {
preparedStmt.setString(1, u.getAccount());
preparedStmt.setString(2, u.getRank());
preparedStmt.setString(3, u.getJoined());
preparedStmt.addBatch();
System.out.println(preparedStmt);
}
System.out.println(conn.getClientInfo());
preparedStmt.executeBatch();
} catch (SQLException e) {
if (e.getErrorCode() == 0) {
} else
throw new WebApplicationException(e.getMessage(), Response.Status.CONFLICT);
}
}
и мой предыдущий рабочий код:
@Override
public void insertArrayUserV2Void(ArrayList<UserV2> users) {
String insertTableSQL = "INSERT INTO RANK (account, rank, date) VALUES (?,?, to_timestamp(?, 'YYYY-MM-DD\"T\"HH24:MI:SS.ff3\"Z\"'))";
for (UserV2 u : users) {
try (Connection conn = baseDao.getConnection();
PreparedStatement preparedStmt = conn.prepareStatement(insertTableSQL);) {
preparedStmt.setString(1, u.getAccount());
preparedStmt.setString(2, u.getRank());
preparedStmt.setString(3, u.getJoined());
preparedStmt.execute();
} catch (SQLException e) {
if (e.getErrorCode() == 0) {
} else
throw new WebApplicationException(e.getMessage(), Response.Status.CONFLICT);
}
}
}
Ожидаемый результат будет +/- 250 операторов вставки в 1 вызове, он попытается вставить все строки, даже если PK выдает ошибку на 1 из них.