Android API< 10替换getType方法

时间:2014-10-07 12:35:18

标签: android sqlite select dynamic gettype

我正在努力为我正在构建的API提供SQLite数据库的select方法“完全”动态。此时的最后一个问题是我无法判断从查询返回的项的类型。 我已尝试过其他主题中提出的一些建议,但似乎没有一件事适合我。

现在使用它的方式,它说:一切都是字符串。我知道这适用于int和Strings,但我不确定其他格式和幕后它不是它应该的方式。 此代码目前仅适用于一条记录,但这不是问题。

public HashMap<String, String> select(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);
    columns = cursor.getColumnNames(); //Used when columns[] are null - SELECT * FROM ...
    HashMap<String, String> resultTable = new HashMap<String, String>();
    if (cursor.getCount() > 0) {
        cursor.moveToFirst();

        for (int i = 0; i < cursor.getColumnCount(); i++) {
            resultTable.put(columns[i], cursor.getString(i));
        }
    }

    cursor.close();
    db.close();
    return resultTable;
}

我在android api版本10中工作,所以getType不可用

2 个答案:

答案 0 :(得分:0)

首先在..

的帮助下检查该列数据的数据类型
cursor.getType(columnIndex)

使用...

检查返回的值
cursor.FIELD_TYPE_FLOAT  // or cursor.FIELD_XXXXXXX

然后分别使用getXXXX()方法..

答案 1 :(得分:0)

试试这个

sstatic int getType(Cursor cursor,int i)抛出异常     {         SQLiteCursor sqLiteCursor =(SQLiteCursor)游标;         CursorWindow cursorWindow = sqLiteCursor.getWindow();         int pos = cursor.getPosition(); int type = -1;         if(cursorWindow.isNull(pos,i))         {             type = FIELD_TYPE_NULL;         } else if(cursorWindow.isLong(pos,i))         {             type = FIELD_TYPE_INTEGER; }         else if(cursorWindow.isFloat(pos,i))         {             type = FIELD_TYPE_FLOAT;         }         else if(cursorWindow.isString(pos,i))         {             type = FIELD_TYPE_STRING;         }         else if(cursorWindow.isBlob(pos,i))         {             type = FIELD_TYPE_BLOB;         }         返回类型;     }