Почему бы вам не воспользоваться средством Oracle sequence
? Вы не можете сделать что-то лучше / безопаснее, используя Java.
Редактировать: Таким образом, ваша главная задача - производительность базы данных. Вы не хотели подключаться «снова», чтобы получить сгенерированный идентификатор из базы данных. Эта проблема не нужна, если вы просто используете пул соединений и просто повторно используете то же соединение, чтобы немедленно получить сгенерированный ключ. Большинство драйверов JDBC могут вернуть вам сгенерированный ключ на Statement#getGeneratedKeys()
. Более новые драйверы JDBC Oracle поддерживают его.
Вот базовый пример:
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet generatedKeys = null;
try {
connection = database.getConnection();
preparedStatement = connection.prepareStatement("INSERT INTO user (name, age) VALUES (?, ?)";
preparedStatement.setString(user.getName());
preparedStatement.setInteger(user.getAge());
int affectedRows = preparedStatement.executeUpdate();
if (affectedRows == 0) {
throw new DAOException("Creating user failed, no rows affected.");
}
generatedKeys = preparedStatement.getGeneratedKeys();
if (generatedKeys.next()) {
user.setId(generatedKeys.getLong(1)); // Here's the magic.
} else {
throw new DAOException("Creating user failed, no generated key obtained.");
}
} catch (SQLException e) {
throw new DAOException(e);
} finally {
close(connection, preparedStatement, generatedKeys);
}