Запрос Java SQL, наиболее эффективная проверка соответствия значению столбца?

#java #mysql #sql

#java #mysql #sql

Вопрос:

У меня есть таблица, в которой потенциально может быть от 200 до 300 тысяч строк.

Мне нужно проверить, существует ли первичный ключ в таблице.

Вот что у меня есть до сих пор:

 public boolean checkIfKeyExists(String userkey) {
    try {
        connection = getSQLConnection();
        PreparedStatement ps = connection.prepareStatement("SELECT userkey FROM "   keytable   " WHERE userkey = ?");
        ps.setString(1, userkey);
        ResultSet rs = ps.executeQuery();
        boolean set = false;
        while(rs.next()){
            set = true;
        }
        close(ps,rs);
        return set;
    } catch (SQLException ex) {
        Error.execute(plugin, ex);
    }
    return false;
}
  

Необходимость использования результирующего набора и установки логического значения, которое кажется слишком длинным для простой проверки ключа, вы знаете?
Каков самый простой способ сделать это?

Комментарии:

1. Если это первичный ключ, и вы проверяете равенство, вы должны получить максимум одну строку. Операция не должна быть слишком длительной.

2. @fabian ты фабиан из codecanyon?

Ответ №1:

Я не вижу способа обойти использование результирующего набора, но вы могли бы обойти необходимость установки логического значения, просто выполнив

 return ps.executeQuery().next();
  

а затем закройте свой оператор и resultset в finally блоке.

Комментарии:

1. это возвращает true / false независимо от того, есть результат или нет?

2. @ThatGuy343 Не соответствует документу . И в вашей первоначальной реализации вы также основывались на результате next() установки вашего флага.

3. Определенно более эффективный способ сделать это.

Ответ №2:

Используя ваши переменные, вы можете иметь

 set = rs.next();
  

Alsi в части SQL, которую вы можете иметь SELECT 1 ... , будет работать немного быстрее.

Комментарии:

1. итак, если я добавлю «ВЫБРАТЬ 1 ИЗ таблицы ключей», это то же самое, что «ВЫБРАТЬ пользовательский ключ»?

2. Содержимое результирующего набора, очевидно, будет другим, но количество строк одинаковым.