为什么sqlite游标在androidreturns中有不同的值?
Why the sqlite cursor in android returns different values?
我有一个简单的查询,您可以在其中看到一行:
SELECT substr(..., 10, 6) as X
如果我使用 cursor.getInt(...)
我得到 1048(“错误”值)
如果我使用 cursor.getString(...)
,我会得到 "002030"
(这是正确的)。
那么,是什么让 sqlite 将“002030”解析为 1048?
我每次都必须把它作为字符串获取并自己解析吗?
谢谢。
函数 substr()
returns 一个字符串,所以你应该用 cursor.getString()
检索值,其中 returns 是正确的结果。
如果您希望结果为整数,则必须在 sql 代码中将其转换为显式:
SELECT cast(substr(..., 10, 6) as integer) as X
或隐含地:
SELECT substr(..., 10, 6) + 0 as X
结果将是没有前导 0
的整数 2030
。
至于你得到的奇怪的 1048
,Java 将以 0
开头的数字文字视为 octal 数字,因此:
int x = 002030;
将1048
赋值给x
,这是八进制数2030
.
的十进制表示
我有一个简单的查询,您可以在其中看到一行:
SELECT substr(..., 10, 6) as X
如果我使用 cursor.getInt(...)
我得到 1048(“错误”值)
如果我使用 cursor.getString(...)
,我会得到 "002030"
(这是正确的)。
那么,是什么让 sqlite 将“002030”解析为 1048?
我每次都必须把它作为字符串获取并自己解析吗?
谢谢。
函数 substr()
returns 一个字符串,所以你应该用 cursor.getString()
检索值,其中 returns 是正确的结果。
如果您希望结果为整数,则必须在 sql 代码中将其转换为显式:
SELECT cast(substr(..., 10, 6) as integer) as X
或隐含地:
SELECT substr(..., 10, 6) + 0 as X
结果将是没有前导 0
的整数 2030
。
至于你得到的奇怪的 1048
,Java 将以 0
开头的数字文字视为 octal 数字,因此:
int x = 002030;
将1048
赋值给x
,这是八进制数2030
.