【问题标题】:Android SQLite - Cursor & ContentValuesAndroid SQLite - 光标和内容值
【发布时间】:2011-12-17 11:02:30
【问题描述】:

有没有办法从 SQLite 获取 ContentValues 对象?

非常有用,我们可以在 DB 中插入 ContentValues,从那里获取 CV 应该更有用。

【问题讨论】:

    标签: android sqlite android-cursor


    【解决方案1】:

    你可以使用DatabaseUtils类的方法cursorRowToContentValues(Cursor cursor, ContentValues values)

    例子

    Cursor c = db.query(tableName, 
                tableColumn, 
                where, 
                whereArgs,
                groupBy,
                having,
                orderBy);
    
    ArrayList<ContentValues> retVal = new ArrayList<ContentValues>();
    ContentValues map;  
    if(c.moveToFirst()) {       
       do {
            map = new ContentValues();
            DatabaseUtils.cursorRowToContentValues(c, map);                 
            retVal.add(map);
        } while(c.moveToNext());
    }
    
    c.close();  
    

    【讨论】:

      【解决方案2】:

      我编写了我自己版本的 DatabaseUtils.cursorRowToContentValues 方法,David-mu 提到了该方法以避免 a bug with parsing booleans。它要求Cursor根据SQL数据库中的类型解析整数和浮点数,而不是在调用ContentValues中的方法时解析它们。

      public static ContentValues cursorRowToContentValues(Cursor cursor) {
          ContentValues values = new ContentValues();
          String[] columns = cursor.getColumnNames();
          int length = columns.length;
          for (int i = 0; i < length; i++) {
              switch (cursor.getType(i)) {
                  case Cursor.FIELD_TYPE_NULL:
                      values.putNull(columns[i]);
                      break;
                  case Cursor.FIELD_TYPE_INTEGER:
                      values.put(columns[i], cursor.getLong(i));
                      break;
                  case Cursor.FIELD_TYPE_FLOAT:
                      values.put(columns[i], cursor.getDouble(i));
                      break;
                  case Cursor.FIELD_TYPE_STRING:
                      values.put(columns[i], cursor.getString(i));
                      break;
                  case Cursor.FIELD_TYPE_BLOB:
                      values.put(columns[i], cursor.getBlob(i));
                      break;
              }
          }
          return values;
      }
      

      【讨论】:

        【解决方案3】:

        你可以去thenewboston 111-124 有一个 SQLite(和使用 ContentValues)的 tut:D

        反正他教的关于 ContentValues 的那个在117th

        祝你好运:D

        PS : 但他也使用光标:)

        【讨论】:

          【解决方案4】:

          没有。你必须用光标和旧的好查询来做到这一点。如果查询可以返回一个 CV 对象数组,我会很高兴。

          【讨论】:

            【解决方案5】:

            不,您必须使用Cursor

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-09-13
              • 2020-03-14
              • 1970-01-01
              • 1970-01-01
              • 2017-09-08
              相关资源
              最近更新 更多