SQLite数据库通过不同方法更新两列时仅一列生效问题求助
问题定位与原因整理
1. 首要致命错误:建表代码变量名不匹配
你定义的建表SQL语句存储在变量CreateMainTable中,但实际执行建表的时候调用的是:
db.execSQL(CreatePrimaryTable);
两个变量名完全不一致,如果这不是你贴代码的笔误,而是实际运行的代码,那么你实际创建的表结构和你预期的完全不符,会导致后续读写逻辑异常。如果确认是笔误,继续看下面的其他问题。
2. 更新匹配条件使用不当
你两次更新都用了LIKE关键字匹配SURVEY_ID:
String selection = SURVEY_ID + " LIKE ?";
LIKE是模糊匹配关键字,如果你的SURVEY_ID中包含%、_这类通配符,会出现匹配异常,甚至匹配到错误的行。如果SURVEY_ID是精确匹配的场景,直接替换为=即可:
String selection = SURVEY_ID + " = ?";
3. 多实例读写冲突
如果你在两个不同的Activity中分别创建了新的SQLiteOpenHelper实例,没有使用单例模式管理数据库连接,可能会出现数据库锁、读写不同步的问题,后发起的更新操作会因为无法获取数据库写入权限执行失败。
4. 重复ID匹配异常
你没有给SURVEY_ID加唯一约束,如果你插入了多条相同SURVEY_ID的记录,第一次更新可能修改了第一条匹配到的记录,第二次更新可能匹配到了其他记录,导致你读取第一条记录的时候看不到第二次更新的内容。
排查建议
- 先看两次更新方法的Log输出中
count的值:如果第二次更新的count为0,说明没有匹配到对应的行,优先检查传入的ID是否和数据库中存储的SURVEY_ID完全一致,以及匹配条件是否正确。 - 如果
count为1说明更新已经执行成功,优先检查你读取数据的逻辑是否有问题,是不是读取了错误的行。
内容的提问来源于stack exchange,提问作者NafisDroid
相关产品推荐
相关产品推荐

