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

Java 知道为什么我的getColumnIndex()通过android返回-1吗?,java,android,sqlite,cursor,Java,Android,Sqlite,Cursor,我的代码就是现在的样子,尽管不断有人向我抛出一个illegalStateException,说它无法访问第0列第1列。现在我知道数据实际上保存在游标中,因为cursor.getString(0)和cursor.getString(1)正在返回数据,但使用cursor.getColumnIndex(COL_(FIRST/PASS))不断引发异常 谁能给我解释一下它为什么这样对我?最初,我将所有SQLITE模式语句保存在一个接口中,我认为这是出于某种原因导致问题的原因,但随后将它们放入嵌套类会引发相

我的代码就是现在的样子,尽管不断有人向我抛出一个
illegalStateException
,说它无法访问第0列第1列。现在我知道数据实际上保存在游标中,因为
cursor.getString(0)
cursor.getString(1)
正在返回数据,但使用
cursor.getColumnIndex(COL_(FIRST/PASS))
不断引发异常

谁能给我解释一下它为什么这样对我?最初,我将所有SQLITE模式语句保存在一个接口中,我认为这是出于某种原因导致问题的原因,但随后将它们放入嵌套类会引发相同的异常,因此我决定将它们设置为SQLiteOpenHelper子类中的类变量。然而,这仍然没有改变我的
getColumnIndex()
状况。 因此,如果有人能给我指出正确的方向,我将非常感激

COL_FIRST=“FIRSTNAME”COL_PASS=“PASSWORD”;带前导空格

问题在于空白和实现细节

当字符串用作SQL字符串的一部分时,额外的空白并不重要。例如,在
query()
中使用时会发生这种情况-实际上,参数只是连接在一起形成一个SQL字符串,而sqlite即使使用额外的空格也能正确解析它

Cursor#getColumnIndex()
是一种接口方法,但让我们假设通常的方法。它在SQL级别上不起作用。sqlite报告的列名和索引放在
映射中
,然后用给定的列名进行查找。这意味着列名必须与sqlite的列名完全匹配。具体而言:

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

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


COL\u FIRST和COL\u PASS的值是多少?@dave COL\u FIRST=“FIRSTNAME”COL\u PASS=“PASSWORD”;带前导空格。您能列出表
表\u USER
中的列名吗?似乎
COL\u FIRST
COL\u PASS
与表中的列不匹配。\u ID、COL\u FIRST和COL\u PASSNo列
COL\u PASS
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;
}