Java, JDBC. SELECT с переменной и цикл

271
17 августа 2017, 21:01

Использую Java, JDBC, PreparedStatement. Необходимо селектнуть из базы данных 1 запись. Но только когда она появится, момент появления записи в базе данных от 1сек до 30. То есть мне нужен цикл. Понимаю как это алгоритмически выглядит. Но в силу слабого знания синтаксиса Java, JDBC не могу организовать данный цикл. Вижу это так, организовываю подключение, пишу селект, если запрос вернул ноль, то продолжаю селектить, до момента пока не вернется значение, после значение асертом проверить уже смогу конечно. Решать цикл либо через true / false либо 1 - 0. Просьба к знатокам помочь в решении.

import java.sql.*;
class Test1 {
    public static void main (String[] args) {
        try {
            String url = "jdbc:msql://10.10.10.10:1114";
            Connection conn = DriverManager.getConnection(url,"","");
            Statement stmt = conn.createStatement();
            ResultSet rs;
            rs = stmt.executeQuery("SELECT ID FROM TABLE");
            while ( rs.next() ) {
                String numID = rs.getString("ID");
                System.out.println(numID);
            }
            conn.close();
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
    }
}
Answer 1

как посоветовал @Mikhail Vaysman, вам нужно проверять на наличие результата, и как только они появляются - выполнить ваш код. Это можно делать разными способами, например, получить count таблицы и проверять, что оно не 0. Но я бы порекомендовал вам другой способ:

так как вы работаете с недавно возвращенным ResultSet, курсор которого указывает перед первой строкой, проще всего проверить на наличие данных, просто вызвая isBeforeFirst(). Это позволяет избежать необходимости вернуться назад, если данные должны быть прочитаны.

из документации:

Returns: true if the cursor is before the first row; false if the cursor is at any other position or the result set contains no rows

Как поясняется в документации, оно возвращает false, если курсор не находится перед первой записью или если в ResultSet нет строк. Таким образом верен код

if (!rs.isBeforeFirst() ) {    
    System.out.println("Нет данных"); 
} 
READ ALSO
Системе не удается найти указанный путь

Системе не удается найти указанный путь

ЗдравствуйтеПрохожу интересные туториалы и с одним примером непонятка

296
виснет на CloseSession

виснет на CloseSession

В проекте используется EDSDK и edskd4jПоявляется проблема с камерой, если все работает хорошо, то при фотографировании выводит в консоль следующее...

247
Как вытащить строку из onResponse?

Как вытащить строку из onResponse?

Как сделать так, чтобы serverAnswer передавался вне onResponse?

267