如何在 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();
}
在 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();
}