目前我有一个查看表并返回最新行的查询,读取该行并将字符串设置为所选列索引中的值。
目前我有9列,所以我最终只返回9个方法来返回每个列,只返回一个字符串并将其设置为每个单独的textview。
我是否设置光标以返回行,然后在设置textviews时设置列索引。像
这样的东西 cursor.getString(1)
这是我当前的查询
public String getName() {
// TODO Auto-generated method stub
String[] columns = new String[] { KEY_ROWID, KEY_NAME, KEY_COLUMN2,
KEY_COLUMN3, KEY_COLUMN4, KEY_COLUMN5, KEY_COLUMN6, KEY_COLUMN7, KEY_COLUMN8 };
Cursor c = mDb.query(true, DATABASE_TABLE, columns, null, null, null,
null, "_id DESC", "1");
if (c != null) {
c.moveToFirst();
String name = c.getString(1);
return name;
}
return null;
}
答案 0 :(得分:2)
您可以轻松地将getName()
更改为与字段无关的内容,例如:
public String getField(String fieldName) {
...
String s = cursor.getString(cursor.getColumnIndexOrThrow(fieldName));
}
并使用它:
String s = mDb.getField(mDb.KEY_NAME);
此方法的一个问题是您不能将getString()
用于数字列,因此您最终会为表中支持的每种数据类型使用多种方法。解决这个问题的方法是查看游标的getType()
方法,或者只是从数据库访问方法返回一个完整的数据结构。说你有:
DB Column Field Type
FOO varchar
BAR integer
BAZ varchar
如果你定义一个类,比如MyRowMapper,你可以这样做:
public MyRowMapper getRow(String... queryParameters) {
//query table based on queryParameters
MyRowMapper mapper = null;
if (cursor.moveToFirst()) {
String foo = cursor.getString(cursor.getColumnIndexOrThrow("FOO"));
Integer bar = cursor.getInteger(cursor.getColumnIndexOrThrow("BAR"));
String baz = cursor.getString(cursor.getColumnIndexOrThrow("BAZ"));
mapper = new MyRowMapper(foo, bar, baz);
}
cursor.close(); // NEVER FORGET TO CLOSE YOUR CURSOR!
return mapper;
}
这只是抽象的邮件编码,因此请使用一粒盐合成语。但希望你明白了。