当我执行代码时,在sqlite中出现错误Occured = CursorIndexOutOfBoundsException

时间:2017-12-14 05:23:53

标签: java android android-sqlite android-cursor android-database

这是我的SqlLite查询代码,我在这里定义了一个从类别中获取颜色类别并将其作为String返回给方法的方法

public String getCategoryColor(String task) {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res =  db.rawQuery( "select color from categories where title='"+task+"'", null );
    return res.getString(0);
}

代码

String color=db.getCategoryColor("Android developer");
Toast.makeText(list.this, color.toString(), Toast.LENGTH_SHORT).show();
if(color.equals("0xFF64FF0B"))
{
    taskt.setBackgroundColor(0xFF64FF0B);
}
else if(color.equals("0xFFFF0B4C"))
{
    taskt.setBackgroundColor(0xFFFF0B4C);
}
else if(color.equals("0xFF0B89FF"))
{
    taskt.setBackgroundColor(0xFF0B89FF);
}

5 个答案:

答案 0 :(得分:3)

public abstract boolean moveToFirst()将光标移动到第一行。如果光标为空,则此方法将返回false。

返回移动是否成功。

  if(cursor != null && cursor.moveToFirst()) {
    String id = cursor.getString(0);
    Log.v(id, id + "Color" );
    return color;
}

答案 1 :(得分:0)

光标没有结果。此外,您应该使用moveToNext()

public String getCategoryColor(String task) {

SQLiteDatabase db = this.getReadableDatabase();
Cursor res =  db.rawQuery( "select color from categories where title='"+task+"'", null );

String ret = null;
if(c.moveToNext()) {
    ret = c.getString(0);     
}
return ret;
}

答案 2 :(得分:0)

以下是完美的解决方案:

1.首先检查它是否为零,并且大小如下:

public String getCategoryColor(String task) {

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res =  db.rawQuery( "select color from categories where title='"+task+"'", null );
    if (res !=null && res.getCount > 0)
      {
         res.moveToFirst();
         return  res.getString(0);
       }
     else
      {
        return "";
      }    
}
  1. 经过以下检查:
  2. String color = db.getCategoryColor(" Android开发人员");

    if(color.equals(""))
    {
       // do your operation here if "" is occured.
    }
    else if(color.equals("0xFF64FF0B"))
    {
        taskt.setBackgroundColor(0xFF64FF0B);
    }
    else  if(color.equals("0xFFFF0B4C"))
    {
        taskt.setBackgroundColor(0xFFFF0B4C);
    }
    else if(color.equals("0xFF0B89FF"))
    {
        taskt.setBackgroundColor(0xFF0B89FF);
    }
    

    希望它能为你提供帮助。

答案 3 :(得分:0)

你没有打过电话

1 years, 4 months, 15 days

在获取字符串之前,这就是为什么你得到currsorindexoutofbound异常

答案 4 :(得分:0)

CursorIndexOutOfBoundsException

/**
 * An exception indicating that a cursor is out of bounds.
 */
public class CursorIndexOutOfBoundsException extends IndexOutOfBoundsException {

您应 RECTIFY getCategoryColor 方法。

public String getCategoryColor(String task) 
{

    SQLiteDatabase db = this.getReadableDatabase();
    String get_COLOR = "";
    String last_query = "SELECT color FROM categories WHERE title='"+ task+"'";

    Cursor c = db.rawQuery(last_query, null);
    if (c != null && c.moveToFirst()) 
    {

        get_COLOR = c.getString(0);
    }
    c.close();
    db.close();
    return get_COLOR;

}