【问题标题】:Storing float numbers as strings in android database将浮点数作为字符串存储在android数据库中
【发布时间】:2010-04-27 07:25:09
【问题描述】:

所以我有一个应用程序,我将任意字符串放入数据库中,然后像这样提取它们:

Cursor DBresult = myDatabase.query(false, Constant.DATABASE_NOTES_TABLE_NAME, 
            new String[] {"myStuff"}, where, null, null, null, null, null);
DBresult.getString(0);

这在所有情况下都可以正常工作,除非字符串看起来像浮点数,例如“221.123123123”。将其保存到数据库后,我可以将数据库提取到我的计算机并使用 DB-viewer 查看它,保存的数字是正确的。但是,当使用 cursor.getString() 时,会返回字符串“221.123”。我一生都无法理解如何防止这种情况发生。我想我可以在每个字符串上做一个 cursor.getDouble() 来看看这是否会产生更好的结果,但这感觉太丑陋和低效了。有什么建议吗?

干杯,

编辑:我刚刚做了一个小测试程序。该程序打印“结果:123.123”,当我希望它打印“结果:123.123123123”时

SQLiteDatabase database = openOrCreateDatabase("databas", Context.MODE_PRIVATE, null);
database.execSQL("create table if not exists tabell (nyckel string primary key);");

ContentValues value = new ContentValues();
value.put("nyckel", "123.123123123");
database.insert("tabell", null, value);

Cursor result = database.query("tabell", new String[]{"nyckel"}, null, null, null, null, null);
result.moveToFirst();
Log.d("TAG","result: " + result.getString(0));

【问题讨论】:

  • getDouble 真的能给你想要的结果吗?数据库中的列是什么类型的?
  • 是的,getDouble 返回正确的结果。列是字符串。

标签: android sqlite


【解决方案1】:

好吧,我解决了我自己的问题。问题源于我在创建表时使用“字符串”,而不是“文本”(这似乎是 varchar 的 sqlite 等价物)。这是因为 sqlite 接受任何类型,但可以在http://www.sqlite.org/datatype3.html "2.1 Determination Of Column Affinity" 下阅读:

"#否则,亲和度为 NUMERIC。"

所以无法识别的类型是数字......所以我的“字符串”类型是数字。呸!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2011-09-05
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多