Ormlite RawRowMapper截断为double

时间:2013-09-04 17:56:23

标签: android database ormlite

我正在使用RawRowMapper从ormlite加载相关列。 RawRowMapper将所有数据作为String返回。

观察是它截断了双值。

实施例: 已插入数据 - > 57.1117146374

用于存储数据的数据类型 - >双

直接查询时Ormlite的数据: - > 57.1117146374(这是正确的,实质上意味着ormlite实际上正确地存储了数据)

使用mapper时来自Ormlite的数据 - > 57.1117(截断数据作为String [] resultColumns

的一部分

任何想法如何避免它被截断?

编辑:

@DatabaseField(columnName = "LAT")
private Double lat;

对象字段:

private double lat;

这里的关键是resultcolumns []中的字符串,我得到的已被截断。

1 个答案:

答案 0 :(得分:4)

  

使用mapper时来自Ormlite的数据 - > 57.1117(截断数据作为String [] resultColumns

的一部分

问题似乎是将doubleString作为cursor.getString(...)被Android的cursor.getDouble(columnIndex);方法截断。不确定为什么但如果在同一列索引上使用GenericRawResults<Object[]> results = dao.queryRaw(dao.queryBuilder().selectColumns("lat") .prepareStatementString(), new DataType[] { DataType.DOUBLE }); CloseableIterator<Object[]> iterator = results.closeableIterator(); try { assertTrue(iterator.hasNext()); Object[] objs = iterator.next(); assertEquals(foo.doubleField, objs[0]); } finally { iterator.close(); } 提取结果,则会保留完整的精度。

我认为这里的解决方案是以不同方式映射行。如果您使用dao.queryRaw(String, DataType[], ...) method,则似乎会正确提取双字段。这是我的测试课的样本。

double

您还可以使用自定义行映射器和dao.queryRaw(String, RawRowMapper, ...) method转换并返回带有{{1}}字段的自定义对象。