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
相关产品推荐
相关产品推荐

