我想在android中显示特定行的值来检查是否有特定的更新。我可以成功吗?但由于返回类型为cursor
,我不知道如何获取。所以请帮助我。
public Cursor getData(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select * from calls where id=" + id + "", null);
return res;
}
答案 0 :(得分:2)
试试这个......
ArrayList<HashMap<String, String>> dataList = new ArrayList<>();
调用您的方法将数据作为hashmap的arraylist
dataList.addAll(loginDataBaseAdapter.getData(id));
或
dataList = loginDataBaseAdapter.getData(id);
db_class中的
public ArrayList<HashMap<String, String>> getData(String id) {
ArrayList<HashMap<String, String>> returnArray = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select * from calls where id=" + id + "", null);
if (res != null && res.getCount() > 0) {
if (res.moveToLast()) {
do {
HashMap<String, String> getdatamap = new HashMap<String, String>();
getdatamap.put("KEY_ONE", res.getString(1));
getdatamap.put("KEY_TWO, res.getString(2));
returnArray.add(getdatamap);
}while (res.moveToPrevious());
}
}
res.close();
return returnArray;
}
现在,您可以使用arraylist中的值来制作视图
答案 1 :(得分:1)
您可以按照以下代码:
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select * from calls where id=" + id + "", null);
if (res != null) {
res.moveToFirst();
}
String firstColumnValue = res.getString(0);
String secondColumnValue = res.getString(1);
检索值后,关闭数据库:
db.close();
如果要按名称获取列值,请使用以下代码:
String value = res.getColumnIndex("column_name");
答案 2 :(得分:0)
获取行值作为字符串。然后返回字符串值。
public String getData(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select * from calls where id=" + id + "", null);
if (res.getCount() > 0) {
res.moveToFirst();
String s = res.getString(res.getColumnIndex("id"));
return s;
}
答案 3 :(得分:0)
从游标检索数据时需要考虑两个因素;哪一行(光标内的位置)然后是列和它的类型。
要定位Cursor,请使用Cursor的move
方法之一。这些是: -
move
,它将光标移动到与当前位置相关的位置。moveToFirst
moveToLast
moveToNext
moveToPosition
和moveToPrevious
如果移动可以执行,则返回true,否则为false。
游标可以为空且没有行,因此movetoFirst
将返回false。
更常见的用法之一是: -
while (cursor.moveToNext) {
.... cursor action(s) here.
}
光标最初将定位在第一行之前,即它的位置为-1,可以使用moveToPosition(-1)
进行设置。
Cursor的getPosition
方法将检索当前位置,注意第一行是位置0。
根据偏移(哪一列)访问列的行,并使用Cursor的get????
(其中????表示类型)方法从行/列中检索数据(还有其他获取....方法,例如getPosition
,如上所述)。检索数据的方法是: -
getBlob
(检索字节数组)。getDouble
getFloat
getInt
getLong
getShort
getString
所有采用单个参数,一个整数,即光标中列的偏移量(,不一定是表中的偏移量)。
您可以在任何类型的数据上使用任何数据,但blob除外。尝试在BLOB上使用除getBlob
之外的任何内容将导致异常。
然而,结果可能会有所不同,例如如果您使用get
,例如假设偏移0的列包含 * rumplestilskin ,则: -
cursor.getString(0)
将返回 rumplestiltskin cursor.getDouble(0)
将返回0作为双倍。cursor.getInt(0)
将以浮动形式返回0。简而言之,你应该使用适当的get方法,否则结果可能会令人困惑。
硬编码列列偏移通常会导致问题,因此通常最好将列名与Cursor的getColumnIndex
方法结合使用。这将String(列名)作为参数并返回列的偏移量。
可能有用的代码(即检索数据)可能是: -
Cursor csr = db.getData(myid);
while (csr.moveToNext) {
long id_of_the_row = csr.getLong(csr.getColumnIndex(yourDatabaseHelperClass.id));
}
注意到: -
if (moveToFirst(myid)) { .... }
可以被认为更正确,但假设只有一行存在bot moveToFirst和moveToNext,如编码,产生相同的结果。getData
方法的类),它还假定变量 id
< / strong>具有 public
访问权限。 How flexible/restricive are SQLite column types?
Are there any methods that assist with resolving common SQLite issues?