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

Android中SQLite点击删除按钮行未删除且应用崩溃问题排查

问题排查与修复方案

首先,导致应用点击删除按钮后崩溃的核心原因是SQL语法错误,同时代码还存在SQL注入风险,我们来一步步拆解解决:

1. 直接拼接字符串引发的语法错误

你的deleteRow方法里直接把字符串类型的subject拼接到SQL语句中,但SQL语法要求字符串值必须用单引号包裹。比如当subject是"Math"时,生成的SQL语句会是:

delete from your_table where col2=Math

数据库会把Math当成一个列名而非字符串值,这直接触发了语法错误,导致应用强制关闭。

2. 更安全的修复方案(推荐)

永远不要直接拼接动态字符串到SQL语句中,这不仅容易引发语法错误,还会带来SQL注入风险。推荐使用SQLite提供的参数化查询方式:

修改DatabaseHelper.java中的deleteRow方法:

public void deleteRow(String subject) {
    SQLiteDatabase db = this.getWritableDatabase();
    // 使用参数化delete方法,自动处理字符串转义和引号
    db.delete(TABLE_NAME, COL_2 + " = ?", new String[]{subject});
    db.close(); // 记得关闭数据库连接,避免资源泄漏
}

如果你坚持使用execSQL,也可以用占位符实现参数化:

public void deleteRow(String subject) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.execSQL("delete from " + TABLE_NAME + " where " + COL_2 + " = ?", new Object[]{subject});
    db.close();
}

3. 额外的优化建议

  • 空值检查:在调用删除方法前,先确认subject不为空,避免空指针或无效SQL:
    public void onClick(View view) {
        if(view.getId()==R.id.deleteSubject) {
            Bundle extras = getIntent().getExtras();
            if (extras != null) {
                String subject = extras.getString("subject");
                if (subject != null && !subject.isEmpty()) {
                    myDb.deleteRow(subject);
                    // 可以添加删除成功后的反馈,比如提示或返回上一页
                    Toast.makeText(this, "Subject deleted successfully", Toast.LENGTH_SHORT).show();
                    finish();
                }
            }
        }
    }
    
  • 异常捕获:给数据库操作添加try-catch块,避免崩溃并便于调试:
    public void deleteRow(String subject) {
        SQLiteDatabase db = null;
        try {
            db = this.getWritableDatabase();
            db.delete(TABLE_NAME, COL_2 + " = ?", new String[]{subject});
        } catch (SQLException e) {
            e.printStackTrace();
            // 这里可以添加错误提示或日志记录逻辑
        } finally {
            if (db != null) {
                db.close();
            }
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:23:38