You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中SQLite TEXT存储分数显示为1的问题求助

解决SQLite存储分数字符串显示为"1"的问题

嘿,我能帮你搞定这个困扰!你遇到的问题核心原因很明确:你的CHALLENGE_RATING字段类型设置错了,导致SQLite自动把分数字符串转成了整数,最终只保留了开头的"1"。

问题根源

SQLite是弱类型数据库,但如果你把CHALLENGE_RATING字段声明为INTEGER(整数)或REAL(浮点数)类型,当你插入像"1/8"这样的字符串时,SQLite会尝试将其转换为数值——而这种带斜杠的字符串转数值时,只会读取第一个有效数字部分,也就是"1",所以最终存储和显示的都是1。

具体解决步骤

1. 修改表结构,将字段设为TEXT类型

首先检查你的DBHelper中创建表的SQL语句,把CHALLENGE_RATING的类型改成TEXT。比如:

// 示例创建表语句,根据你的实际表名和字段调整
private static final String CREATE_TABLE_CHALLENGES = "CREATE TABLE IF NOT EXISTS challenges (" +
        "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
        "CHALLENGE_NAME TEXT," +
        "CHALLENGE_RATING TEXT," + // 这里必须是TEXT类型
        "OTHER_FIELD INTEGER" +
        ")";

注意:如果你的表已经创建好了,SQLite不支持直接修改现有字段的类型。你可以选择:

  • 卸载重装APP(适合测试阶段)
  • 创建新表,迁移旧数据后删除原表
  • 添加一个新的TEXT类型字段,把旧数据迁移过去后再删除原字段

2. 确保插入数据时传入的是字符串

插入数据时,直接把分数字符串作为字符串值存入,不要做任何类型转换:

ContentValues values = new ContentValues();
values.put("CHALLENGE_NAME", "哥布林营地");
values.put("CHALLENGE_RATING", "1/8"); // 直接存字符串,不要转成数字
db.insert("challenges", null, values);

3. 查询时按字符串类型读取

查询数据的时候,要用getString()方法读取该字段,而不是getInt()或getDouble():

Cursor cursor = db.query("challenges", null, null, null, null, null, null);
if (cursor.moveToFirst()) {
    do {
        String rating = cursor.getString(cursor.getColumnIndex("CHALLENGE_RATING"));
        // 这里就能正确获取到"1/8"、"1/6"等字符串了
        Log.d("ChallengeRating", rating);
    } while (cursor.moveToNext());
}
cursor.close();

额外提示

SQLite的类型灵活性容易让新手踩坑,记住:如果要存储纯文本(包括带特殊符号的字符串),字段类型一定要设为TEXT,这样SQLite才会原样存储字符串内容,不会自动转换类型。

内容的提问来源于stack exchange,提问作者Sonny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:48:58