为什么Android中的sqlite光标返回不同的值?

问题描述

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

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

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

如果我使用cursor.getString(...),我会得到"002030"(正确)。

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

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

谢谢。

解决方法

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

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

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

或隐式:

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

结果将是整数2030,前导0不存在。

对于您得到的奇怪的1048,Java将以0开头的数字文字视为octal数字,因此:

int x = 002030;

1048分配给x,这是八进制数2030的十进制表示形式。