Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 现有表和记录的CursorIndexOutOfBoundsException_Java_Android_Sqlite_Sqliteopenhelper - Fatal编程技术网

Java 现有表和记录的CursorIndexOutOfBoundsException

Java 现有表和记录的CursorIndexOutOfBoundsException,java,android,sqlite,sqliteopenhelper,Java,Android,Sqlite,Sqliteopenhelper,我正在使用以下查询查询数据库: final Cursor subject_cursor = db.rawQuery("SELECT * FROM " + DB.Table.SUBJECT + " WHERE uniqueSUB = '" + cs_cursor.getString(1) + "'", null); "SELECT * FROM " + DB.Table.SUBJECT" 当我记录游标计数时,它给我1作为计数,但当我尝试使用subject\u cursor.ge

我正在使用以下查询查询数据库:

    final Cursor subject_cursor = db.rawQuery("SELECT * FROM " + DB.Table.SUBJECT + " WHERE uniqueSUB = '" + cs_cursor.getString(1) + "'", null);
    "SELECT * FROM " + DB.Table.SUBJECT"
当我记录游标计数时,它给我1作为计数,但当我尝试使用subject\u cursor.getString(0)访问数据时,它给我一个错误提示:

    05-30 03:37:10.921: W/System.err(5408): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
我已经手动检查了数据库中的记录,所有必需的数据都已存在。 (如果我只是执行以下查询:

    final Cursor subject_cursor = db.rawQuery("SELECT * FROM " + DB.Table.SUBJECT + " WHERE uniqueSUB = '" + cs_cursor.getString(1) + "'", null);
    "SELECT * FROM " + DB.Table.SUBJECT"
对于同一个表,并给出get游标的计数,它给出了现有的记录数(这是正确的)

请帮助…

将代码更改为

if(subject_cursor.moveToFirst()) 
    subject_cursor.getString(0);
 final Cursor subject_cursor = db.rawQuery("SELECT * FROM " + DB.Table.SUBJECT + " WHERE uniqueSUB = '" + cs_cursor.getString(0) + "'", null);
因为您的表中只有一行,并且您正在尝试使用
cs\u cursor.getString(1)

或者试试这个代码

public void getAllEvents() {



    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_EVENTS;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {




            // Adding contact to list
            MainActivity.Id.add(cursor.getString(0)); //it will store id to my array list "Id"


        } while (cursor.moveToNext());
    }


}
将代码更改为

 final Cursor subject_cursor = db.rawQuery("SELECT * FROM " + DB.Table.SUBJECT + " WHERE uniqueSUB = '" + cs_cursor.getString(0) + "'", null);
因为您的表中只有一行,并且您正在尝试使用
cs\u cursor.getString(1)

或者试试这个代码

public void getAllEvents() {



    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_EVENTS;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {




            // Adding contact to list
            MainActivity.Id.add(cursor.getString(0)); //it will store id to my array list "Id"


        } while (cursor.moveToNext());
    }


}


你绝对应该通读整篇文章。它处理完全相同的问题,你可以在那里找到问题的答案。摘自帖子并添加到@Alexey指出的内容中,
游标是,您需要调用或etc方法将其加载到内存中
moveToFirst
将光标移动到第一行,以便您可以访问它。类似地,
moveToPosition()
将光标移动到绝对位置。如果不使用这些函数,它将抛出您得到的错误。希望这有帮助

你绝对应该通读整篇文章。它处理完全相同的问题,你可以在那里找到问题的答案。摘自帖子并添加到@Alexey指出的内容中,
游标是,您需要调用或etc方法将其加载到内存中
moveToFirst
将光标移动到第一行,以便您可以访问它。类似地,
moveToPosition()
将光标移动到绝对位置。如果不使用这些函数,它将抛出您得到的错误。希望这有帮助

然后,您的查询可能没有得到正确执行。在执行查询之前,
cs\u cursor.getString(1)
的值是多少?@Shobhit Puri2@ShobhitPuri我已经检查并确认了!!!!然后,您的查询可能没有得到正确执行。在执行查询之前,
cs\u cursor.getString(1)
的值是多少?@Shobhit Puri2@ShobhitPuri我已经检查并确认了!!!!第二排是什么??该cs_游标用于另一个具有有效数据的表(我已确认)。。。在上述查询之后,第二个表的计数为1。。。。所以我找到了记录。。。只是我无法使用subject\u cursor.getString(0)获取它。第二行是什么??该cs_游标用于另一个具有有效数据的表(我已确认)。。。在上述查询之后,第二个表的计数为1。。。。所以我找到了记录。。。只是我无法使用subject\u cursor.getString(0)获取它。如果游标是延迟加载的,那么如果我这样做,我怎么会获取columnname:subject\u cursor.getColumnName(0);返回给定的从零开始的列索引处的列名。它不依赖于作为查询结果得到的行。在我使用where子句进行查询,然后使用moveToFirst或moveToPosition获得所需的记录之后,我必须再次使用where子句查询表。。。。不是吗???不是。查询后,如果您只想获取第一个结果行的特定列值的值,则首先通过
cursor.moveToFirst()
将光标移动到第一行,然后获取具有该索引的列中的值。i、 e cursor.getString(columnIndexValue)。这将给出第一行的
columnIndexValue
列索引中的值。这取决于你想要什么。我想要什么我已经在where子句中描述过了。。。所以很明显我想记录下这种情况。。。因此,如果我使用subject\u cursor.moveToFirst()则无法获得所需的记录!!如果游标是延迟加载的,那么如果我这样做,我怎么会得到columnname:subject\u cursor.getColumnName(0);返回给定的从零开始的列索引处的列名。它不依赖于作为查询结果得到的行。在我使用where子句进行查询,然后使用moveToFirst或moveToPosition获得所需的记录之后,我必须再次使用where子句查询表。。。。不是吗???不是。查询后,如果您只想获取第一个结果行的特定列值的值,则首先通过
cursor.moveToFirst()
将光标移动到第一行,然后获取具有该索引的列中的值。i、 e cursor.getString(columnIndexValue)。这将给出第一行的
columnIndexValue
列索引中的值。这取决于你想要什么。我想要什么我已经在where子句中描述过了。。。所以很明显我想记录下这种情况。。。因此,如果我使用subject\u cursor.moveToFirst()则无法获得所需的记录!!好啊你只需要我解释一下光标延迟加载的事情。。。ShobhitPuri帮了我。。。谢谢你的回答。。。。你只需要我解释一下光标延迟加载的事情。。。ShobhitPuri帮了我。。。谢谢你的回答