android - 识别 SQLite Android Cursor 中列的数据类型

标签 android sqlite

有什么方法可以在 Android 中识别游标中列的数据类型。游标对象有多种获取列名、列值的方法。

我想找出列(TEXT、INTEGER)等的 SQLite 数据类型...

我正在编写一个通用函数来解析游标并执行操作。我只会得到一个 sql 字符串作为函数的参数。

最佳答案

根据 SQLite 文档 (http://www.sqlite.org/datatype3.html),SQLite 中的列没有数据类型——这些列中的值有。

Any column in an SQLite version 3 database, except an INTEGER PRIMARY KEY column, may be used to store a value of any storage class.

如果您使用的是 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);
}

但是如果传入的游标是(例如)连接两个或多个表的 db.rawQuery() 调用的结果,那将(我预计)失败。

关于android - 识别 SQLite Android Cursor 中列的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6293063/

相关文章:

android - 在android中触摸和拖动图像

ios 应用程序使用 icu 编译 sqlite fts,但是当我输入像 "z"这样的字母时,它无法得到完美的答案

sqlite - Xamarin SQLite 查询

具有日期范围的 Android SQLite 过滤器数据

使用 SQLITE3 数据计算标准差的 Python 代码

java - 从中间滚动

android - StaggeredGridLayoutManager calculateCachedStart() IndexOutOfBoundsException 异常

android - 客户端证书不适用于 Android - 如何调试?

android - 检查 BrowseFragment Android TV 中的标题项焦点

django - 如何删除 Django 1.9 中的 DB (sqlite3) 以从头开始?