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

如何在Toast中展示Sqlite触发器抛出的提示信息及语法问题排查

触发器语法错误修复

你的错误核心是字符串拼接时缺少必要空格,拼接后各语法关键字连在一起导致SQL解析失败,原始代码拼接完成后SQL语句会变成CREATE TRIGGER insert_validationBEFORE INSERT on farmer_detBEGIN SELECT...,完全不符合SQLite语法规范。
同时建议补充空值判断,避免用户输入null值绕过校验,修正后的触发器创建代码如下:

String farmer_insert_trigger = "CREATE TRIGGER insert_validation " +
        "BEFORE INSERT ON farmer_det " +
        "BEGIN " +
        "SELECT CASE WHEN new.farmer_name IS '' OR new.farmer_name IS NULL THEN " +
        "RAISE(ABORT, 'Farmer Name is mandatory') " +
        "END; " +
        "END;";

// 触发器只需要创建一次,放到SQLiteOpenHelper的onCreate/onUpgrade方法中执行即可,不要每次点击按钮都调用
public void createTriggers(SQLiteDatabase db) {
    db.execSQL(farmer_insert_trigger);
}
点击事件逻辑修正

你当前的代码存在两个逻辑问题:

  • 每次点击都重复创建触发器,第二次点击就会报触发器已存在的错误
  • 没有执行插入操作,根本不会触发触发器的校验逻辑,且默认的insert()方法不会抛出异常,需要用insertOrThrow()才能拿到触发器返回的错误信息
    修正后的点击事件代码如下:
btn.setOnClickListener(v->{
    String farmerID = farmer_id.getText().toString().trim();
    String farmerName = farmer_name.getText().toString().trim();
    String fatherName = father_name.getText().toString().trim();

    try {
        SQLiteDatabase db = dbHandler.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("farmer_id", farmerID);
        values.put("farmer_name", farmerName);
        values.put("father_name", fatherName);
        // 执行插入操作,此时会触发触发器校验
        db.insertOrThrow("farmer_det", null, values);
        Toast.makeText(MainActivity.this, "数据插入成功", Toast.LENGTH_SHORT).show();
    } catch (SQLiteConstraintException e) {
        // 触发器抛出的错误会在这里被捕获,直接取异常信息展示即可
        Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        Toast.makeText(MainActivity.this, "操作失败:" + e.getMessage(), Toast.LENGTH_SHORT).show();
    }        
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:06:04