我正在努力为我正在构建的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不可用
答案 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; } 返回类型; }