知道为什么我的getColumnIndex()通过android返回-1?

时间:2015-10-22 01:39:32

标签: java android sqlite cursor

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))会不断引发异常。

有人可以向我解释为什么要对我这样做吗?最初我在一个接口中保存了所有SQLITE模式语句,这是我认为由于某种原因引起问题的原因,但是然后将它们放在一个嵌套类中引发了同样的异常,所以我决定在我的SQLiteOpenHelper子类中创建它们的类变量。但是,这仍然没有改变我的getColumnIndex()情况。 所以,如果有人能指出我正确的方向,我将非常感激!

1 个答案:

答案 0 :(得分:1)

  

COL_FIRST =" FIRSTNAME" COL_PASS =" PASSWORD&#34 ;;领先的空白

问题是空白和实现细节。

当字符串用作SQL字符串的一部分时,额外的空格并不重要。当使用例如在query()中 - 本质上args只是连接在一起形成一个SQL字符串,即使有额外的空格,sqlite也能正确解析它。

Cursor#getColumnIndex()是一种界面方法,但我们假设通常为SQLiteCursor implementation。它不适用于SQL级别。 sqlite报告的列名和索引放在Map中,然后使用给定的列名查找。这意味着列名必须与完全匹配列名称与sqlite的匹配。具体做法是:

  • 周围的空格不是列名的一部分。

  • Map按键查找区分大小写,而SQL本身则不区分。