我有一个名为"数据库"的SQLiteDatabase。在其中有一个名为" Pics"的表。在表中有三列如下,DrawableName TEXT,DrawableReference INTEGER,PictureRating REAL。我想用我期望在DrawableReference列中的整数查询我的数据库。我想这样做,以便我可以从同一行获得相应的DrawableName和PictureRating。我的查询出了什么问题?
public class EditItemActivity extends Activity {
EditText textField=null;
RatingBar ratingBar=null;
SQLiteDatabase db=null;
Cursor dbCursor=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent=getIntent();
Integer imageId=intent.getIntExtra("imageId",-1);
if(imageId==-1){
return;
}
String id=imageId.toString(); //not used right now
setContentView(R.layout.edit_item_layout);
db=this.openOrCreateDatabase("Database",this.MODE_PRIVATE,null);
String selection="DrawableReference = ?";
String[] whereClause={id.toString()};
dbCursor=db.query("Pics",null,selection,whereClause,null,null,null);//get the row where the correct DrawableReference integer is found
textField=(EditText)findViewById(R.id.title);
ratingBar=(RatingBar)findViewById(R.id.image_rating_bar);
if(dbCursor.moveToFirst()){
textField.setText(dbCursor.getString(0)); //this never happens
}
}
}
答案 0 :(得分:3)
尝试这种方式:
Cursor dbCursor = db.rawQuery("SELECT DrawableName,PictureRating FROM Pics Where DrawableReference='"+ id.toString()+"'", null);
if(dbCursor.moveToFirst()) {
textField.setText(dbCursor.getString(0));
}
或
Cursor cursor = db.query("Pics", new String[] { "DrawableName",
"PictureRating" }, "DrawableReference =?",
new String[] {id}, null, null, null, null);
if (cursor.moveToFirst())
textField.setText(cursor.getString(0));
}
答案 1 :(得分:0)
查询看起来不错。您是否确认存在指定DrawableReference的行?
在root设备或模拟器上,您可以执行以下操作:
adb shell
su
cd /data/data/com.your.package/databases
sqlite3 your_db_name.db
然后进行常规SQL查询。
您还应避免在Cursor.getFoo()
调用中使用常量列索引。据我所知,当前实现以与投影中指定的顺序相同的顺序返回列。或者在投影为空时按CREATE TABLE语句中的列定义顺序排列,但API无法保证这一点。您应该使用cursor.getString(cursor.getColumnIndexOrThrow("column_name"))
代替。