我正在嘗試在 android studio 中插入驗證概念之前使用 sqlite 觸發器。我正在使用 3 個欄位 - farmer_id、farmer_name、father_name,如果 farmer_name 為空,我會嘗試將錯誤訊息顯示為“Farmer Name is required”。所以我在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);
}
當我點擊“提交”按鈕將錯誤訊息顯示為“農民姓名是強制性的”時,我收到的錯誤訊息為“接近“選擇”:語法錯誤(代碼 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();
}
});
我在創建觸發器時錯過了任何語法嗎?
uj5u.com熱心網友回復:
我相信您缺少需要/需要的空間。
嘗試 :-
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*/不需要注釋。
uj5u.com熱心網友回復:
您可以像這樣直接從程式中檢查字串是否為空:
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
}
});
程式可以更快地編譯,因為您不需要檢查資料庫并且代碼更簡單。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/363303.html
