SQLite错误:CursorIndexOutOfBound异常

时间:2014-03-01 07:19:55

标签: android sqlite cursor indexoutofboundsexception

StackTrace While running the following code in android

代码: 它显示了CursorIndexOutOfBoundException。 我正在运行以下代码,我正在尝试将数据保存在数据库中,并在从数据库中获取columnindex后将其提取出来进行比较。

SQLiteDatabase db= openOrCreateDatabase("tryitdb", MODE_PRIVATE, null);
        String sql= "create table if not exists tabletry(score int)";
        db.execSQL(sql);
        db.close();
        tv1= (TextView) findViewById(R.id.textView1);
        et1= (EditText) findViewById(R.id.editText1);
        b1 = (Button) findViewById(R.id.button1);
        b1.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                getsc();
            }
        });
    };
    public void getsc() {
        SQLiteDatabase db= openOrCreateDatabase("tryitdb", MODE_PRIVATE, null);
        String sql= "select * from tabletry";
        Cursor c1= db.rawQuery(sql, null);
        if(c1!=null && c1.getCount()>0){
            int i1= c1.getColumnIndex("score");
            String score= c1.getString(i1);
            int old= Integer.valueOf(score);
            int str= Integer.valueOf(et1.getText().toString());
            if(old>=str){
                tv1.setText(old);
            }
            else{
                tv1.setText(str);
            }
        }
        else{
            init();
        }

    }
    public void init() {
        String s=et1.getText().toString();
        SQLiteDatabase db= openOrCreateDatabase("tryitdb", MODE_PRIVATE, null);
        String string= "insert into tabletry values(?)";
        Object[] oa= new Object[1];
        oa[0] = s;
        db.execSQL(string,oa);
        db.close();
        tv1.setText(s);
    }

它显示我在线上的错误             String score = c1.getString(i1); 请建议修复。感谢

2 个答案:

答案 0 :(得分:3)

您应该将光标移动到第一个记录,然后尝试检索值。

 if(c1!=null && c1.getCount()>0){
       ***c1.moveToFirst();***
        int i1= c1.getColumnIndex("score");
        String score= c1.getString(i1);

答案 1 :(得分:1)

在尝试从游标访问列值之前,您必须将其移动到指向有效行。使用其中一种moveTo...()方法。

例如,更改

Cursor c1= db.rawQuery(sql, null);
if(c1!=null && c1.getCount()>0){
    int i1= c1.getColumnIndex("score");
    String score= c1.getString(i1);

Cursor c1= db.rawQuery(sql, null);
if(c1.moveToFirst()){
    int i1= c1.getColumnIndex("score");
    String score= c1.getString(i1);

rawQuery()不会返回null,因此检查它不是必需的,如果光标未指向有效,moveToFirst()将返回false移动后排,以便您也可以删除getCount()支票。