Код: Выделить всё
Exception in thread "main" java.sql.SQLException: Operation not allowed after ResultSet closed
Код: Выделить всё
ResultSetCallable callable = executeUpdate(REGISTER_NEW_ACCOUNT,
new VarcharColumn("name", name),
new VarcharColumn("uuid", uuid.toString()),
new VarcharColumn("rank", PlayerRank.NONE.name()),
new VarcharColumn("packageRank", PlayerRank.NONE.name())
);
Future future = SQL_EXECUTOR.submit(callable);
try (ResultSet resultSet = future.get()) {
if (resultSet.next()) {
return resultSet.getInt(1);
}
}
catch (ExecutionException | InterruptedException | SQLException e) {
throw new RuntimeException(e);
}
return -1;
Код: Выделить всё
public ResultSetCallable executeUpdate(String query, Column... columns) {
try (
Connection connection = getConnection();
PreparedStatement statement = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS)
) {
for (int i = 0; i < columns.length; i++) {
columns[i].setValue(statement, i + 1);
}
statement.executeUpdate();
try (ResultSet resultSet = statement.getGeneratedKeys()) {
return () -> resultSet;
}
}
catch (SQLException e) {
throw new RuntimeException(e);
}
}
SQL_EXECUTOR — это статический финальный вариант ExecutorService SQL_EXECUTOR = Executors.newCachedThreadPool(); >. Я использую HikariCP для пула соединений. Итак, кто-нибудь знает, почему я получаю это исключение, что не так с моим кодом или что мне следует знать.
Я пробовал использовать синхронизированный и изменчивый вариант, но ничего.
Подробнее здесь: https://stackoverflow.com/questions/786 ... vicesubmit