MySQL проверяет, есть ли что-то уже в столбце

#java #mysql

#java #mysql

Вопрос:

Я новичок в MySQL и на самом деле не знаю, как проверить, существует ли в столбце «Код друга» то же значение, и если это так, то следует посмотреть, есть ли в той же строке в столбце «просмотрено» значение «0». Мне уже удалось проверить, существует ли код в строке. Я просто не знаю, как искать второе условие.

Вот изображение, как выглядит таблица:

введите описание изображения здесь

И вот что мне уже удалось сделать:

     public static boolean checkRow(String query) {

        boolean ret = false;
        try (Connection con = DriverManager.getConnection(url, user, password)) {

            Statement stmt = con.createStatement();
            stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(query);

            if (rs.next() amp;amp; !rs.getString("watched").equals(0)) {
                ret = false;
            } else {
                ret = true;
            }
            rs.close();
            stmt.close();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        return ret;
}
  

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

1. Вероятно, вам следует также включить query то, что вы используете.

2. !rs.getString("watched").equals(0) не сработает. Вы получаете строку и сравниваете ее с целым числом. Предполагая, что столбец никогда не равен нулю и всегда содержит целые числа, попробуйте rs.getInt("watched") != 0 вместо этого.

3. Что такое query значение параметра? Почему вы не выполняете SELECT COUNT(*) AS cnt FROM tablename WHERE friendCode = @friendCode AND watched = 0 ? Этот запрос вернет одну строку с одним столбцом, cnt значение которого’ может быть 0 (ни одна строка не соответствовала условиям) или выше (количество совпадающих строк). Или даже более оптимально SELECT EXISTS (SELECT 1 FROM tablename WHERE friendCode = @friendCode AND watched = 0) AS cnt , который возвращает 1 или 0 (совпадающая строка существует или нет).

Ответ №1:

  1. Я думаю, что вы не написали никакого запроса select в этой программе. Если вы вызываете из основного метода, просто проверьте и попробуйте следующие шаги.

  2. В рассматриваемом столбце данной таблицы есть данные целочисленного типа.

  3. Ваше сравнение со строковым типом.

  4. Попробуйте мой код, он работает, если у вас есть какие-либо опасения, вернитесь к этому комментарию.

     public static boolean checkRow(String query) {
         boolean ret = false;
         try (Connection con = DriverManager.getConnection(url, user, password)) {
    
             Statement stmt = con.createStatement();
             stmt = con.createStatement();
             ResultSet rs = stmt.executeQuery(query);
    
             if (rs.next() amp;amp; rs.getString("watched")!=0) {
                 ret = false;
             } else {
                 ret = true;
             }
             rs.close();
             stmt.close();
         } catch (SQLException e) {
             System.out.println(e.getMessage());
         }
         return ret;
    }