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

Java SQLite项目单次执行新增操作却出现两条重复数据问题求助

Java SQLite单次插入生成两条重复数据问题解决

问题根源

你的代码中addNotes方法连续调用了两次db.insert()操作,是导致重复插入的唯一原因,和SQLite版本无关:

  1. 第一行db.insert(TableName,null,contentValues)没有做任何判断直接执行了插入
  2. 后续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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:36:02