我正在尝试在我的Db中创建一个方法。我想从具有特定列名称的特定行中的数据库返回一个字符串。 我试过这个,但它不起作用。 有人可以帮帮我吗?
public String getNameAtPosition(String row){
String name = null;
Cursor c = mDb.query(ValuteMetaData.VALUTE_TABLE, null, ValuteMetaData.ID + "=" + row, null, null, null, null);
name = String.valueOf(c.getLong(ValuteMetaData.VALUTE_NAME_KEY));
return name;
}
public Cursor fetchValuteListView(String data){
String[] data_query={data};
return mDb.query(ValuteMetaData.VALUTE_TABLE,null,ValuteMetaData.VALUTE_DATA_KEY+"=?",data_query,null,null,null);
}
static class ValuteMetaData { // i metadati della tabella, accessibili ovunque
static final String VALUTE_TABLE = "Valute";
static final String ID = "_id";
static final String VALUTE_NAME_KEY = "name";
static final String VALUTE_SIGLA_KEY = "sigla";
static final String VALUTE_CAMBIO_KEY = "cambio";
static final String VALUTE_DATA_KEY = " data";
}
private static final String VALUTE_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS " //codice sql di creazione della tabella
+ ValuteMetaData.VALUTE_TABLE + " ("
+ ValuteMetaData.ID+ " integer primary key autoincrement, "
+ ValuteMetaData.VALUTE_NAME_KEY + " text, "
+ ValuteMetaData.VALUTE_SIGLA_KEY + " text, "
+ ValuteMetaData.VALUTE_CAMBIO_KEY + " text, "
+ ValuteMetaData.VALUTE_DATA_KEY + " text);";
答案 0 :(得分:1)
更改您的方法和查询,如下所示:
public String getNameAtPosition(String row){
String name = null;
Cursor c = mDb.query(ValuteMetaData.VALUTE_TABLE, null,
ValuteMetaData.ID + " = ?" , new String[]{row}, null, null, null);
if(c.moveToFirst())
name = c.getString(c.getColumnIndex(ValuteMetaData.VALUTE_NAME_KEY));
return name;
}
答案 1 :(得分:1)
在使用光标之前,您应该将其指向行。在你的情况下,你应该写:
c.moveToFirst();
答案 2 :(得分:0)
变化:
name = String.valueOf(c.getLong(ValuteMetaData.VALUTE_NAME_KEY));
to(注意“getString”和“getColumnIndex”)
if(c.moveToFirst()){
name = String.valueOf(c.getString(c.getColumnIndex(ValuteMetaData.VALUTE_NAME_KEY)));
}