代码: 它显示了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); 请建议修复。感谢
答案 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()
支票。