как я могу проверить, вернул ли что-то данный запрос? ResultSet rs = stmt.executeQuery( "SELECT * FROM USERS WHERE NICK ='" + nick + "';" ); (Я хочу проверить имеется ли запись с данным никнеймом в таблице)
Можно так
int q=0;
while (rset.next()) {
q++;
}
или так
int count = -1;
if ( resultSet.last() ) {
count = resultSet.getRow();
}
Во-первых, используйте параметризованные запросы.
Во-вторых, можно использовать методы isBeforeFirst() или first():
if (!resultSet.isBeforeFirst()) // no rows
if (!resultSet.first()) // no rows
В-третьих, если вам действительно нужно лишь проверить, существует ли данный никнейм в таблице, то не нужно вытягивать всю информацию о нём: select *, - достаточно одного поля: например, select id. Ещё лучше будет использовать запрос, вообще не возвращающий строки из БД, а только булево значение: есть или нет такой пользователь. Используйте для этого exists или count в sql-запросе.
Хотел было я дать ссылки на so-ответы по третьему пункту, но там сплошь склеивание строк для sql-запросов, вытягивание всей таблицы целиком на клиент и тому подобный ужас. И это заплюсованные ответы! Понятно, почему столько багов и тормозов в нынешнем софте... Мда, моя вера в программинг сильно пошатнулась.
Если вы хотите проверить существует ли запись в таблице самым удобным и простым способом будет исльльзовать 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 если нет. В коде могут быть ошибки, набрал по памяти в блокноте.
Наверно,вы делаете регистрацию и делаете проверку на занятость логина. Я проверял условие имеется ли такой логин в таблице следующим образом.Он не избыточный,как по мне.
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)){
// Говорите,что логин свободный
}
//...
Таким образом,вы чуть-чуть убрали возможный говнокод,если бы писали всю логику в одном методе.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости