首页 > 解决方案 > 为什么android中的sqlite光标返回不同的值?

问题描述

我有简单的查询,您可以在其中看到一行:

SELECT substr(..., 10, 6) as X

如果我使用cursor.getInt(...),我会得到 1048(“错误”值)

如果我使用cursor.getString(...)我得到"002030"(这是正确的)。

那么,是什么让 sqlite 将“002030”解析为 1048?

我是否必须每次都将其作为字符串获取并自己解析?

谢谢你。

标签: javaandroidsqliteandroid-sqliteandroid-cursor

解决方案


该函数substr()返回一个字符串,因此您应该使用 检索该值cursor.getString(),这将返回正确的结果。

如果要将结果作为整数,则必须在 sql 代码中将其转换为显式:

SELECT cast(substr(..., 10, 6) as integer) as X 

或隐含地:

SELECT substr(..., 10, 6) + 0 as X

结果将是2030没有前导0s 的整数。

至于你得到的奇怪,Java 认为以八进制1048数开头的数字文字,所以:0

int x = 002030;

分配1048xwhich 是八进制数的十进制表示2030


推荐阅读