Не строго связано, но ваш код, вероятно, не выполняет то, что вы ожидаете. Этот вид кода «чтение-изменение-запись» не работает, если имеется несколько одновременных вызовов.
Если вы представляете два вызова, выполняемых через код, становится ясно, что иногда, в зависимости от порядка выполнения, ОБА вызовы могут достигать оператора вставки.
Кроме того, выбор из таблицы без использования предложения WHERE обычно бесполезен. В этом случае вы выбираете «*», а затем перебираете все результаты, чтобы увидеть, «ID» == Id. База данных намного лучше, чем Java. Вы должны добавить предложение where. (Обратите внимание, что это все еще не решит вышеуказанную проблему)
Также вообще плохая идея «выбирать *» из любой таблицы. Просто выберите нужные вам столбцы. Это «быстро провалится», если схема изменится, а нужные вам столбцы больше не будут доступны, и позволит оптимизатору базы данных сделать «правильные вещи» при обращении к диску.
Наконец, если вы хотите назначить только числовой идентификатор, то обычно для них используется «автонумерация», а не программа, которая их выбирает. В разных базах данных они называются по-разному, поэтому вы также можете знать их как IDENTITY или использовать последовательность.