Java SQLite项目单次执行新增操作却出现两条重复数据问题求助
Java SQLite单次插入生成两条重复数据问题解决
问题根源
你的代码中addNotes方法连续调用了两次db.insert()操作,是导致重复插入的唯一原因,和SQLite版本无关:
- 第一行
db.insert(TableName,null,contentValues)没有做任何判断直接执行了插入 - 后续if判断的条件中再次调用了
db.insert(),相当于又执行了一次插入操作,再用第二次的插入结果判断是否成功
两次插入使用的是完全相同的ContentValues对象,因此会生成两条除自增id外完全一致的数据。
修复方案
仅需调整addNotes方法,调用一次insert后用变量存储返回结果再做判断即可,修复后代码如下:
void addNotes(String title, String Description){ SQLiteDatabase db = this.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(ColumnTitle,title); contentValues.put(ColumnDescription,Description); // 仅执行一次插入操作,用变量存储返回的行id long insertRowId = db.insert(TableName,null,contentValues); if (insertRowId == -1){ Toast.makeText(context, "Failed", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, " Data added Successfully " , Toast.LENGTH_SHORT).show(); } // 操作完成后关闭数据库实例,避免内存泄漏 db.close(); }
其他优化建议
- 所有数据库操作完成后都需要及时关闭对应的
SQLiteDatabase、Cursor实例,避免出现内存泄漏问题 - 如果业务层面需要避免同内容重复插入,可以在建表时给对应字段添加
UNIQUE约束,插入时使用insertWithOnConflict方法指定冲突处理规则
内容的提问来源于stack exchange,提问作者Dharmik
相关产品推荐
相关产品推荐

