有没有办法在Android中识别游标中列的数据类型.游标对象有许多方法来获取列名,列值.
我想找出该列的SQLite数据类型(TEXT,INTEGER)等...
我正在编写一个通用函数来解析游标并执行操作.我只会得到一个sql字符串作为函数的参数.
根据SQLite文档(http://www.sqlite.org/datatype3.html),SQLite中的列没有数据类型 - 这些列中的值可以.
除了INTEGER PRIMARY KEY列之外,SQLite版本3数据库中的任何列都可用于存储任何存储类的值.
如果您使用的是API级别11或更高级别,则游标支持getType()(请参阅http://developer.android.com/reference/android/database/AbstractWindowedCursor.html#getType(int)).
如果您使用的是较早的API级别,并且您知道给定游标中的所有结果都来自同一个表,那么您可以执行类似(未经测试)的操作:
// Assumes "cursor" is a variable that contains the cursor you're
// interested in.
String tableName = "..."; // The name of the table
SQLiteDatabase db = cursor.getDatabase();
String[] names = cursor.getColumnNames();
for (name : names) {
Cursor typeCursor =
db.rawQuery("select typeof (" + name + ") from " + tableName;
typeCursor.moveToFirst();
Log.v("test", "Type of " + name + " is " + typeCursor.getString(0);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果传入的游标是(例如)连接两个或多个表的db.rawQuery()调用的结果,那么(我预期)会失败.
答案还是NiK,很好.但是如果你的db是空的,他的代码会崩溃.我建议使用:
String Query = "PRAGMA table_info(my_table_name)";
Cursor my_cursor = db.rawQuery(Query, null);
my_cursor.moveToFirst();
Column_name = my_cursor.getString(my_cursor.getColumnIndex("name"));
Column_type = my_cursor.getString(my_cursor.getColumnIndex("type"));
Run Code Online (Sandbox Code Playgroud)
小智 5
我还没有测试过,但是尝试使用cursor.getType(i)
像这样:
public static List resultSetToArrayListAndroid(Cursor cursor) throws SQLException {
int columns = cursor.getColumnCount();
ArrayList list = new ArrayList();
while (cursor.moveToNext()) {
HashMap row = new HashMap(columns);
for (int i = 1; i <= columns; ++i) {
switch (cursor.getType(i)) {
case Cursor.FIELD_TYPE_FLOAT:
row.put(cursor.getColumnName(i), cursor.getFloat(i));
break;
case Cursor.FIELD_TYPE_INTEGER:
row.put(cursor.getColumnName(i), cursor.getInt(i));
break;
case Cursor.FIELD_TYPE_STRING:
row.put(cursor.getColumnName(i), cursor.getString(i));
break;
}
}
list.add(row);
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14462 次 |
| 最近记录: |