Проверка возвратил ли что-то SQLite select

166
26 сентября 2019, 15:10

как я могу проверить, вернул ли что-то данный запрос? ResultSet rs = stmt.executeQuery( "SELECT * FROM USERS WHERE NICK ='" + nick + "';" ); (Я хочу проверить имеется ли запись с данным никнеймом в таблице)

Answer 1

Можно так

int q=0;
while (rset.next()) {
    q++;
}

или так

int count = -1;
if ( resultSet.last() ) {
   count = resultSet.getRow();
}
Answer 2

Во-первых, используйте параметризованные запросы.

Во-вторых, можно использовать методы isBeforeFirst() или first():

if (!resultSet.isBeforeFirst()) // no rows
if (!resultSet.first()) // no rows

В-третьих, если вам действительно нужно лишь проверить, существует ли данный никнейм в таблице, то не нужно вытягивать всю информацию о нём: select *, - достаточно одного поля: например, select id. Ещё лучше будет использовать запрос, вообще не возвращающий строки из БД, а только булево значение: есть или нет такой пользователь. Используйте для этого exists или count в sql-запросе.

Хотел было я дать ссылки на so-ответы по третьему пункту, но там сплошь склеивание строк для sql-запросов, вытягивание всей таблицы целиком на клиент и тому подобный ужас. И это заплюсованные ответы! Понятно, почему столько багов и тормозов в нынешнем софте... Мда, моя вера в программинг сильно пошатнулась.

Answer 3

Если вы хотите проверить существует ли запись в таблице самым удобным и простым способом будет исльльзовать EXISTS. Примерное решение:

private static final int FIRST_ROW = 1;
...
public boolean isUserExist(String userName){
    String userQuery = "SELECT EXISTS(SELECT * FROM USERS WHERE NICK = " + userName + " LIMIT 1)";
    Cursor cursor = mDatabase.rawQuery(userQuery, null);
    cursor.moveToFirst();
    boolean isRecordExist = cursor.getInt(FIRST_ROW) == 1;
    cursor.close();
    return isRecordExist;
}

EXISTS возвращает 1 если подобный никнейм уже существует и 0 если нет. В коде могут быть ошибки, набрал по памяти в блокноте.

Answer 4

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

public boolean login_is_busy(String login) {
    try {
        stat = connection.createStatement();
        result = stat.executeQuery("SELECT count(login) FROM `users` WHERE 
        login='"+login+"';");
        result.next();
        int count = result.getInt(1);
            if(count == 0) {
                return false;
        // Таких логинов нету,значит мы возвращаем false,что значит не занятый
            }
    }catch(SQLException ex) {
        ex.printStackTrace();
    }
    // Записи с таким логином есть,значит true ибо он занят
    return true;
}

Этот запрос возвращает один столбец с числовым значением(Количество записей с таким логином) Далее,можно сделать такую штуку:

public void method(String login){
 if(login_is_busy(login)){
    // Говорите,что логин занят
 }
 if(!login_is_busy(login)){
   // Говорите,что логин свободный
 }
 //...

Таким образом,вы чуть-чуть убрали возможный говнокод,если бы писали всю логику в одном методе.

READ ALSO
Вызываю из статического блока метод, не инициализирует

Вызываю из статического блока метод, не инициализирует

Из статического блока вызываю метод который инициализирует массив (причем в самом методе это видно - выводит 35)Но когда обращаюсь в коде - оказывается...

161
Удаление переменных [закрыт]

Удаление переменных [закрыт]

Что будет, если объявить в классе переменные, создать массив, добавить в него переменные, а после чего присвоить массиву null? Удалятся ли переменные?...

182
Как сделать полностью прозрачное окно с непрозрачной рамкой?

Как сделать полностью прозрачное окно с непрозрачной рамкой?

Мне нужен полный доступ к прозрачной части, те

154