Я бы выбрал 2-й подход.
Первый вызовет исключение, которое, как известно, очень дорого ...
Во 2-м подходе будет использоваться SELECT count(*) FROM mytable WHERE key = userinput
который будет очень быстрым и оператор INSERT
, для которого вы можете использовать один и тот же объект подключения к БД (при условии OO;)).
Использование подготовленных операторов предварительно оптимизирует запросы, и я думаю, что второй подход станет намного лучше и более гибким, чем первый.
РЕДАКТИРОВАТЬ: в зависимости от вашей СУБД вы также можете использоватьif not exists
предложение
РЕДАКТИРОВАТЬ 2: Я думаю, что Java выдаст SQLExcpetion
независимо от того, что пошло не так, то есть, используя 1-й подход, вы не сможете различать дублирующуюся запись или недоступную базу данных безнеобходимость разбора сообщения об ошибке - что снова является точкой для использования SELECT + INSERT (или if not exists
)