你如何从光标中获取类型?

时间:2011-05-26 22:31:00

标签: java android sqlite cursor

javadocs表明android.database.Cursor有一个getType(int)方法。但是,当我尝试调用此方法时,Eclipse会给出一个错误,指出不存在任何方法。是什么给了什么?

2 个答案:

答案 0 :(得分:6)

您定位的是哪个Android版本? getType()方法仅适用于v3.0及更高版本。

编辑:假设您的目标是Android的v3.0之前的版本,那么发现表中每列的类型可能是“hack”,即查询sqlite_master表以查找创建数据。

SELECT sql FROM sqlite_master

这非常讨厌但是如果你真的需要找到类型,那么你可以扩展SQLiteCursor并添加你自己的getType(int columnIndex)方法。

当光标首次访问表时,您可以对sqlite_master表执行一次性查询,然后解析CREATE列中的sql语句并将'types'存储在int[]

getType(int columnIndex)中,您只需根据int[]返回columnindex的值。

正如我所说,有点黑客但它会起作用。

答案 1 :(得分:3)

因为您可以在(几乎)每个SQLite字段中存储任何类型的数据。在sqlite_master中查找数据类型并使用pragma命令不是一种安全的方法。您可以使用如下查询获取字段类型:

select Field1, typeof(Field1), Field2, typeof(Field2) from MyTable

此语句返回字段的值及其类型,这些字段可能/可能不会从记录更改为记录。