2

在我的 android 项目中从数据库中获取数据时出现异常。我试图column index 1从这行代码中获取价值String ques=c.getString(1);

这是我调用数据库类并尝试获取数据库的代码,

try{
c=db.getText(Integer.toString(subid));
    if(c==null)
        return;
    //if(c.getCount()> 0)
    //{
        //int max=c.getCount();
        //int min=0;

        Random rn = new Random();       
        int randomNum =  rn.nextInt(max-1) + rowid;
        c.moveToPosition(randomNum);

        String ques=c.getString(1);
        tv.setText(ques+" ");

        cans=c.getString(2);
        shuffleArray(ans);
        int[] a = new int[4];
        int j=0;
            for (int i = 0; i < ans.length; i++)
            {
              a[j]=ans[i];
              j++;
            }
         ans1=c.getString(a[0]);
         ans2=c.getString(a[1]);
         ans3=c.getString(a[2]);
         ans4=c.getString(a[3]);
         rb1.setText(ans1);
         rb2.setText(ans2);
         rb3.setText(ans3);
         rb4.setText(ans4);
        }

       catch(Exception e)
    {
        Toast.makeText(getApplicationContext(), e.getMessage()+"exception", Toast.LENGTH_LONG).show();
    }

我的数据库内容的快照,

在此处输入图像描述

这是我的数据库类,

public Cursor getText(String subId) throws SQLException //here it'll get all rows of subId=1 or whatever the value of subId
{
    Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {
            KEY_id, KEY_ques, KEY_correctans, KEY_wrongans1,KEY_wrongans2, KEY_wrongans3}, 
            KEY_subjectid + "=" +  " '" + subId + "' " , null,null,null, null,null);
    if (mCursor != null) 
    {
        mCursor.moveToFirst();
    }
    return mCursor;

}

请帮助我,希望我的问题很清楚。

提前致谢。

4

2 回答 2

3

你有一个错误:

Index 1 requested, with a size of 1

它说,光标的大小为 1,并且您知道索引从 0 开始。因此,如果您编写:

String ques = c.getString(1);

您尝试获得第二个元素,而不是第一个。如果要获取第一个元素,则必须编写:

String ques = c.getString(0);
于 2013-10-02T07:49:50.207 回答
0

删除 c.MovetoPosition(randomno);

而是试试这个:

c.moveToFirst();
int rw_cnt=c.getCount();
int rndm = ((Math.random())*10000)%rw_cnt); //generates a random no btwn 1 and rw_cnt
for(int i=0;i<rndm;i++)  //move cursor rand times
c.moveToNext();

这肯定会比 c.moveToPostion(); 慢。但除非你有数千行,否则它不会有太大的不同

于 2013-10-02T09:46:01.407 回答