显示特定行的值

时间:2017-12-01 13:25:06

标签: android sqlite android-sqlite

我想在android中显示特定行的值来检查是否有特定的更新。我可以成功吗?但由于返回类型为cursor ,我不知道如何获取。所以请帮助我。

public Cursor getData(int id) {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res = db.rawQuery("select * from calls where id=" + id + "", null);
    return res;
}

4 个答案:

答案 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,如编码,产生相同的结果。
  • 假设id列是rowid的别名,那么rowid将存储为long,并且应该正确地提取为long。
  • yourDatabaseHelperClass.id将不正确,而是将其替换为扩展SQLiteOpenHelper的类(包含getData方法的类),它还假定变量 id < / strong>具有 public 访问权限。

可能有用或感兴趣的链接: -