android - Ormlite RawRowMapper 截断 double

标签 android database ormlite

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

观察结果是它截断了 double 值。

示例: 插入的数据 -> 57.1117146374

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

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

使用映射器时来自 Ormlite 的数据 -> 57.1117(截断的数据作为 String[] resultColumns 的一部分

知道如何避免它被截断吗?

编辑:

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

对象字段:

private double lat;

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

最佳答案

Data from Ormlite when using mapper -> 57.1117 (Truncated data coming as part of String[] resultColumns

问题似乎是,以 String 形式获取 double 值会被 Android 的 cursor.getString(...) 截断方法。不知道为什么,但如果在同一列索引上使用 cursor.getDouble(columnIndex); 提取结果,则保留完整精度。

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

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, RawRowMapper, ...) method转换并返回带有 double 字段的自定义对象。

关于android - Ormlite RawRowMapper 截断 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18620709/

相关文章:

android - 更新外部对象 ORMLite - ANDROID

android - 标准 ORMLite 方法中的 CursorWindowAllocationException

android - 如何在 android 中使用 ProGuard 和 OrmLite

android - SupportMapFragment 在 Android 4.1+ 上因 NullPointerException 而崩溃

Android 放大并以 map 中的自定义标记为中心

php - 使用 mysql 存储评论或将它们写入 PHP 中的文件或 XML 文件并以这种方式显示在主页上会更好吗?

mysql - SQL:为什么我们需要交易来订票?

java - 当我为已经实例化的类调用 Class.getInstance 时会发生什么?

android - org.gradle.api.tasks.TaskExecutionException:任务 ':app:compileDebugJavaWithJavac'的执行失败

database - SQL Server 连接字符串 - 点 (".") 或 "(local)"或 "(localdb)"