【问题标题】:Android- Getting a single value from a database table using cursorAndroid-使用游标从数据库表中获取单个值
【发布时间】:2017-03-10 22:43:05
【问题描述】:

我正在使用游标从数据库中检索数据。我知道如何检索整个列以在列表视图等上使用,但我正在努力寻找一种检索单个值的方法。

假设我有一个包含两列(“_id”和“Name”)的表,并且该表中有十条记录(行)。例如,我将如何获得第三行中的名称?考虑到我定义了一个读取该表的游标:

public Cursor getMyNameInfo() {

    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();


    String sqlTables = "MyNames";
    qb.setTables(sqlTables);
    Cursor c = qb.query(db, null, null, null,
            null, null, null);  

    c.moveToFirst();
    return c;
    }

【问题讨论】:

    标签: android android-cursor


    【解决方案1】:

    使用c.moveToPosition(2) 代替c.moveToFirst()Cursor 索引从零开始,因此“2”是第三条记录)。

    记得先检查Cursor 是否有有效数据。

    编辑:

    按照我上面的说明将光标移动到第三条记录后,使用以下命令获取“名称”列的值。

    String theName = c.getString(getColumnIndex("Name"));
    

    【讨论】:

    • 那会返回那一行?
    • A Cursor 在任何给定时间仅指向单行,因此使用 moveTo... 方法。
    • @tyb:另外,请参阅我的编辑以访问单个列值。
    • 这就是我想要的。谢谢!
    【解决方案2】:
    Cursor cursor = dbHelper.getdata();
    
            System.out.println("colo" + cursor.getColumnCount() + ""
                    + cursor.getCount());
    
            cursor.moveToFirst();
    
            if (cursor != null) {
    
                while (cursor.isAfterLast() == false) {
    
                    String chktitle = title.trim().toString();
                    String str = cursor.getString(cursor.getColumnIndex("title"));
    
                    System.out.println("title :: "
                            + cursor.getString(cursor.getColumnIndex("title")));
                    System.out.println("date :: "
                            + cursor.getString(cursor.getColumnIndex("date")));
                    System.out.println("desc :: "
                            + cursor.getString(cursor.getColumnIndex("desc")));
    
                    if (chktitle.equals(str) == true) {
                        tvAddfavorite.setText("Remove Favorite");
                        break;
                    }
                    cursor.moveToNext();
                }
            }
            cursor.close();
    

    【讨论】:

      【解决方案3】:

      添加WHERE 子句:

      qb.appendWhere("_id = 2");
      

      【讨论】:

      • @tyb 在您对SQLiteQueryBuilder qb进行查询之前。
      【解决方案4】:

      感谢上面的答案,我创建了以下方法来提供另一列但在同一行中的项目的值。

      public String getValueFromColumn(int position, String tableName, String columnToGetValueFrom) {
      
          SQLiteDatabase db = getReadableDatabase();
          SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
      
          qb.setTables(tableName);
          Cursor c = qb.query(db, null, null, null,
                  null, null, null);
      
          c.moveToPosition(position);
          String neededValue = c.getString(c.getColumnIndex(columnToGetValueFrom));
          return neededValue;
      }
      

      希望对大家有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-25
        • 2021-09-24
        • 2013-05-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多