2015-10-22 2 views
2
public int getUserCred(User user){ 
database = opener.getReadableDatabase(); 

String first = user.getFirst(); 
String pass = user.getPassword(); 
String[] cols = {COL_FIRST, COL_PASS}; 

userCursor = database.query(TABLE_USER, cols, null, null, null, null, null); 

if(userCursor != null & userCursor.moveToFirst()) { 
     String firstName = userCursor.getString(userCursor.getColumnIndex(COL_FIRST)); 
     String password = userCursor.getString(userCursor.getColumnIndex(COL_PASS)); 
      if(first.equals(firstName) & pass.equals(password)){ 
       return User.CRED_CORRECT; 
       } 
      } 

    database.close(); 
    userCursor.close(); 
    return User.CRED_INCORRECT; 
} 

Есть мой код, как сейчас, хотя на меня набрасывается illegalStateException, говоря, что он не может получить доступ к строке 0 col -1. Теперь я знаю, что данные хранятся в курсоре, потому что cursor.getString(0) и cursor.getString(1) возвращают данные, но с использованием cursor.getColumnIndex(COL_(FIRST/PASS)) продолжает поднимать исключение.любая идея, почему мой getColumnIndex() возвращает -1 через android?

Может кто-нибудь, пожалуйста, объясните мне, почему он делает это со мной? Первоначально я придерживался всех инструкций схемы SQLITE в интерфейсе, что, по моему мнению, вызывало проблему по какой-то причине, но затем, помещая их в вложенный класс, вызвало одно и то же исключение, поэтому я решил сделать их переменными класса в моем подклассе SQLiteOpenHelper. Тем не менее, это все еще не изменило мою ситуацию getColumnIndex(), которую я получил. Итак, если кто-то может указать мне в правильном направлении, я был бы чрезвычайно благодарен!

+1

Каковы значения 'COL_FIRST' и' COL_PASS'? – dave

+0

@dave COL_FIRST = "FIRSTNAME" COL_PASS = "PASSWORD"; с ведущими пробелами. – 3alto

+1

Не могли бы вы назвать имена столбцов в таблице 'TABLE_USER'? Кажется, что 'COL_FIRST' и' COL_PASS' не соответствуют этим столбцам в таблице. – shhp

ответ

0

COL_FIRST = "FIRSTNAME" COL_PASS = "PASSWORD"; с ведущими пробелами

Проблема заключается в деталях пробелов и реализации.

Необязательные пробелы не имеют значения, когда строки используются как часть строки SQL. Это происходит при использовании, например, в query() - по существу, args просто объединяются вместе, чтобы сформировать строку SQL, и sqlite корректно ее анализирует даже с дополнительными пробелами.

Cursor#getColumnIndex() - метод интерфейса, но предположим, что обычный SQLiteCursor implementation. Он не работает на уровне SQL. Имена столбцов и индексы, как указано в sqlite, помещаются в Map, а затем просматриваются с указанным именем столбца. Это означает, что имя столбца должно соответствовать точно, каково имя столбца для sqlite. В частности:

  • Окружающие пробелы не являются частью имени столбца.

  • Map поиск по ключу чувствителен к регистру, в то время как сам SQL это не так.

Смежные вопросы