如何在 toast 中显示 Sqlite Triggers Raise 消息

How to show Sqlite Triggers Raise message in toast

在 android studio 中插入验证概念之前,我尝试使用 sqlite 触发器。我正在使用 3 个字段 - farmer_id、farmer_name、father_name,如果 farmer_name 为空,我会尝试显示一条错误消息“Farmer Name is mandatory”。所以我在 android studio

中使用了如下触发编码
String farmer_insert_trigger = "CREATE TRIGGER insert_validation" +
            "BEFORE INSERT on farmer_det" +
            "BEGIN SELECT CASE WHEN new.farmer_name IS '' THEN" +
            "RAISE(ABORT,'Farmer Name is mandatory')" +
            "end;" +
            "end;";
public void createTriggers() {
        SQLiteDatabase db = this.getWritableDatabase();
        db.execSQL(farmer_insert_trigger);
    }

当我点击“提交”按钮将错误消息显示为“Farmer Name is mandatory”时,我得到的错误消息是 "near "SELECT":syntax error (code 1 );, 同时编译 CREATE Triger..."。 下面是我的按钮点击事件。

btn.setOnClickListener(v->{
            String farmerID = farmer_id.getText().toString();
            String farmerName = farmer_name.getText().toString();
            String fatherName = father_name.getText().toString();

            try {
                // Execute insert function
                dbHandler.createTriggers();
            } catch (SQLiteConstraintException e) {
                Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
                // Just in case the above doesn't catch it
                Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
            }        
        });

我在创建触发器时是否遗漏了任何语法。

您可以像这样直接从程序中检查字符串是否为空:

btn.setOnClickListener(v->{
        String farmerID = farmer_id.getText().toString();
        String farmerName = farmer_name.getText().toString();
        String fatherName = father_name.getText().toString();

        if (farmerName.equals("")) {
                Toast.makeText(getApplicationContext(), "Farmer Name is mandatory", Toast.LENGTH_LONG).show();
            } else {
                // Execute insert function
            }        
    });

程序可以编译得更快,因为你不需要检查数据库,代码也更简单。

我认为您缺少空格 required/needed。

尝试:-

String farmer_insert_trigger = "CREATE TRIGGER insert_validation /*SPACE*/" +
            "BEFORE INSERT on farmer_det /*SPACE*/" +
            "BEGIN SELECT CASE WHEN new.farmer_name IS '' THEN /*SPACE*/" +
            "RAISE(ABORT,'Farmer Name is mandatory')" +
            "end;" +
            "end;";
  • 显然不需要评论 /*SPACE*/

要在toast 中显示SQLite toast 消息,我们可以使用REGEX 表达式。我使用下面的一组代码在单引号(在 RAISE 中)中显示所需的消息。

Pattern p = Pattern.compile(".*'([^']*)'.*");
                Matcher m1 = p.matcher(str);
                if (m1.matches()) {
                    // Print the required sub-string
                    System.out.println("Extracted part : "+ m1.group(1));
                    Toast.makeText(MainActivity.this, ""+m1.group(1), Toast.LENGTH_SHORT).show();
                }