【问题标题】:How do you get the type from a cursor?如何从游标中获取类型?
【发布时间】:2011-09-03 00:06:15
【问题描述】:

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

【问题讨论】:

  • 您确定导入正确吗?

标签: java android sqlite cursor


【解决方案1】:

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

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

SELECT sql FROM sqlite_master

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

您可以在游标首次访问表时对sqlite_master 表执行一次性查询,然后从sql 列解析CREATE 语句并将“类型”存储在int[] 中。

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

正如我所说,有点小技巧,但它会起作用。

【讨论】:

  • 啊,哈!你是对的。我的目标是 v1.5。在查看 Javadocs 时,我没有按适当的 API 级别进行过滤(duh)。是的,我必须按照您的建议扩展游标类或提出不同的解决方案。我最终尝试做的是使用 odata4j 库动态创建 odata 帖子。另一种解决方案是只编写每个表的解决方案。感谢您的帮助!
  • @SBerg413:很高兴能帮上忙。祝你好运。
【解决方案2】:

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

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

此语句返回字段的值及其类型,它们可能/可能不会因记录而异。

【讨论】:

  • 目的是获取预期值,以便创建一个 oData xml 结构以发布到服务器。因此,不幸的是,您的解决方案是有问题的。之前的两个答案都是更好的解决方案。
  • 在我使用 Android 平台上的 SQLite 数据库(aSQLiteManager)时,我学会了不依赖期望的艰难方法 ;-)
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2012-03-13
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
相关资源
最近更新 更多