【问题标题】:CursorIndexOutOfBoundsException while querying SQLite in Android code在 Android 代码中查询 SQLite 时出现 CursorIndexOutOfBoundsException
【发布时间】:2013-05-15 14:51:41
【问题描述】:

请注意,我正在尝试从我的 Android 应用程序中的 SQLite DB 表中检索值,在按钮单击事件中并通过 ListView 呈现它。我能够在同一事件中将记录插入表中。虽然它会抛出以下错误:

`05-15 11:54:16.721: W/System.err(1834): android.database.CursorIndexOutOfBoundsException: Index 1 requested, with a size of 1
05-15 11:54:16.721: W/System.err(1834):     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:434)
05-15 11:54:16.721: W/System.err(1834):     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
05-15 11:54:16.721: W/System.err(1834):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
`

以下是我用来在 ListView 中插入、检索和显示表中记录的代码块:

        save.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
              event=spinner.getSelectedItem().toString();
              message=ed1.getText().toString();
              MainActivity.myDataBase.openDatabase("/data/data/org.mithil.appname/databases/tablename", null,MainActivity.myDataBase.OPEN_READWRITE);
              MainActivity.myDataBase.execSQL("INSERT INTO " +
                      MainActivity.tablename +
                        " Values ('"+ finalnumber +"','"+ name +"','"+ message +"','"+ event +"','"+ ldate +"');");
              Cursor cu = MainActivity.myDataBase.rawQuery("SELECT Name FROM " + MainActivity.tablename + " WHERE Date =" + ldate +";" , null);
              cu.moveToFirst();
              Log.d("first rec", cu.toString());
              while(cu!=null)
              {
                  try{
                  lstitem.add(cu.getString(0));
                  cu.moveToNext();
                  }
                  catch(Exception e)
                  {
                      e.printStackTrace();
                  }
              }

所有这一切都发生在单击按钮中。插入在表格中得到反映,但“选择”没有。我认为移动光标有问题。表格包含五个字段,我只想检索这些字段一个即。 'Name' 字段并将名称添加到 ListView。请纠正我哪里出错了。非常感谢。

【问题讨论】:

  • 您好,感谢您的建议。Cursor 类没有 hasNext() 方法。但是有一个名为“isAfterLast()”的方法指向最后一行之后的位置。我会尝试使用它。会让你知道的。
  • 在我删除它之前,该评论在那里停留了一秒钟。正在考虑蟒蛇。 :P
  • 谢谢@Gjordis,您的解决方案有帮助。非常感谢。愿力量与您同在。 :)

标签: android sqlite android-sqlite


【解决方案1】:

你应该像这样从光标中获取值

if(cu.moveToFirst())
{
do
{

}while(cu.moveToNext())
}

【讨论】:

    【解决方案2】:
    while(cu !isAfterLast()){...
    

    那么不应该越界。 它可以不为空,但仍然超出范围。

    【讨论】:

      【解决方案3】:

      试试这个只是获取游标计数并将其设置为 for 循环中的条件并遍历它。

       for(int i=0;i<cr.getCount;i++)
      {
      //do your stuff here;
      cr.moveToNext();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-28
        • 2022-11-29
        • 2011-10-14
        • 1970-01-01
        • 2017-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多