В настоящее время я пытаюсь создать уникальный game_id для каждой запускаемой игры.Я пытаюсь сохранить текущий идентификатор в MySQL-таблице game_id
с одной строкой id
.Я вручную вставил INERT INTO game_id VALUES (0)
.Теперь простым решением было бы получить текущий id
, установить для него текущий идентификатор игры и обновить id
в mysql-таблице.Это будет выглядеть примерно так:
Statement st = c.createStatement();
ResultSet res = st.executeQuery("SELECT `id` FROM `game_id` WHERE 1;");
if (!res.next()) {
st.close();
return -1;
}
int id = res.getInt("id");
st.executeUpdate("UPDATE `game_id` SET `id`=`id`+1 WHERE 1;");
st.close();
return id;
Теперь проблема может заключаться в том, что когда другой сервер server2
получает id
до того, как server1
обновит id
в базе данных, они оба заканчиваютс точно таким же идентификатором.
Так что мой вопрос, если существует способ ОБНОВИТЬ идентификатор в том же запросе, я выбираю его.
Что-то похожее на следующий простой способ обработки идентификаторов в Java:
static int IDS = 0;
int id = IDS++;
А если нет, то есть ли другой простой способ сохранить глобальный идентификатор, к которому может получить доступ каждый экземпляр сервера?
//EDIT
UUID был бы идеальным вариантом, если бы пользователям не приходилось запоминать игру, в которую они только что играли.Я хочу привести этот идентификатор к Base36 позже, чтобы я мог показать им текущий gameId вроде 00yq
, что означало бы, что идентификатор был 1250
.Игрок не сможет запомнить полный UUID, но строка из 4 символов проще.