【问题标题】:SQlite database not storing double value as stringSQlite 数据库不将双精度值存储为字符串
【发布时间】:2012-12-27 01:22:10
【问题描述】:

我正在使用以下代码

     public boolean addArea(AreaClass area , ArrayList<AreaMarkClass> areaArray)
     {      
         area.id =  getNextAreaId();
        Log.d("longitude", area.longitude);
        Log.d("latitude", area.latitude);

        ContentValues initialValues = new ContentValues();
        initialValues.put("_id", area.id);
        initialValues.put("name", area.name);
        initialValues.put("longitude", area.longitude);
        initialValues.put("latitude", area.latitude);
        initialValues.put("zoomLevel", area.zoomLevel);
        initialValues.put("creationDate",area.creationDate);

        try
        {
            mDb.insertOrThrow("TTArea", null, initialValues);
}

area.longitude是一个字符串,它的值是通过String.value得到的(A Double Value) 现在通常是这样的22.323434523464563456

但是当我尝试检索这个值时

public AreaClass getAreaClassWithAreaId(Integer id)
{
    String queryString = "SELECT * FROM TTArea WHERE _id = ?";
    Cursor resultSet =  mDb.rawQuery(queryString, new String[]{id.toString()}); 
    AreaClass area = new AreaClass();
    while(resultSet.moveToNext())
    {
         area = new AreaClass(
                        resultSet.getInt(resultSet.getColumnIndex("_id")),
                        resultSet.getString(resultSet.getColumnIndex("name")),
                        resultSet.getString(resultSet.getColumnIndex("longitude")),
                        resultSet.getString(resultSet.getColumnIndex("latitude")),
                        resultSet.getString(resultSet.getColumnIndex("zoomLevel")),
                        resultSet.getString(resultSet.getColumnIndex("creationDate"))
                        );
    }

    resultSet.close();
    return area;
}

它以某种方式将其四舍五入为22.3234。在我的应用程序中,我需要精确的存储内容。这是什么行为,我该如何解决?

【问题讨论】:

  • 你的表架构是什么? (虽然 SQLite 在某些情况下使用“类型关联”,但数据类型很重要。)
  • 如何获取架构?以及如何解决这个问题?
  • “架构”只是您的CREATE TABLE 声明,请发布这些。
  • CREATE TABLE TTArea (_id INTEGER PRIMARY KEY、经度字符串、纬度字符串等
  • 是的,我不知道为什么它没有显示,但我认为当我从 STRING 更改为 TEXT 时它已解决

标签: java android eclipse sqlite


【解决方案1】:

我在使用 SQLite 时使用这些方法:

public static Double stringToDouble (String x)
{
    if (x !=null)
        return Double.parseDouble(x);

    return null;
}

public static String doubleToString (Double y)
{
    if (y != null)
        return String.valueOf(y);

    return null;
}

当添加到数据库时,将双精度值转换为字符串,反之亦然,请告诉我这个解决方案是否有效

编辑:解决方案在 cmets 中: “我看到您使用 STRING 字段创建了表格。您可以尝试使用 TEXT 类型,对我有用。”

【讨论】:

  • 我看到您使用 STRING 字段创建了表。您可以尝试使用 TEXT 类型,对我有用。
猜你喜欢
  • 2017-10-26
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多