Почему вы не используете средство 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);
}
Просьба подробно рассказать о контексте. Для чего вам это нужно? Почему вы уменьшаете уникальность, ограничивая размер? Таким образом, мы можем дать более подходящий ответ/предложение. – BalusC
UUID - это определенный стандарт, содержащий фиксированный набор информации, содержащийся внутри. Вы не можете получить его в 15 символов, так как информация не будет соответствовать 15 символам. – skaffman
Почему длина должна быть 15? Будет ли уникальность достаточна или у вас есть какое-то другое ограничение? – monorailkitty