Как показать, что триггеры Sqlite вызывают сообщение в тосте

#android #sqlite #triggers

Вопрос:

Я пытаюсь использовать триггер sqlite перед вставкой концепции для проверки в Android studio. Я использую 3 поля — идентификатор фермы, имя фермы, имя отца, и если имя фермы пустое, я пытаюсь отобразить сообщение об ошибке «Имя фермера обязательно». Поэтому я использовал кодирование триггера, как показано ниже, в 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);, при заполнении СОЗДАТЬ триггер…». Ниже мое событие нажатия кнопки.

 btn.setOnClickListener(v-gt;{  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();  }   });  

Я пропустил какой-либо синтаксис при создании триггера.

Ответ №1:

Я считаю, что вам не хватает мест там, где они необходимы / необходимы.

Попробуй :-

 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*/ не нужны.

Комментарии:

1. Да, это работает fine…is есть любой способ получить сообщение о повышении в одиночку — имя фермера обязательно. Поскольку я вызываю полные триггеры, я получаю полный код триггеров в своем тосте.

2. @Venkatesh просто сохрани сообщение как константу и используй его в прерывании и тосте.

3. Спасибо @MikeT, вы хотите сказать, что «Строка err_ins = » Имя фермера обязательно»;» и передаете это «»ПОДНЯТЬ(ПРЕРВАТЬ,err_ins)» » … что-то вроде этого мне нужно использовать…пожалуйста, поправьте меня, если я ошибаюсь…

4. @Venkatesh Больше похоже public static final String ERR_INS = "Farmer Name is mandatory"; на то, чтобы закодировать его в подходящем классе, и вы можете получить к нему доступ в любом месте. Аналогично тому, как вы можете использовать Toast.LENGTH_LONG , т. е. Toast класс будет иметь что-то вроде public static final int LENGTH_SHORT = 1;

Ответ №2:

Чтобы отобразить всплывающее сообщение SQLite в тосте, мы можем использовать выражение регулярного выражения. Я использовал приведенный ниже набор кода для отображения необходимого сообщения в одинарных кавычках (который находится в ПОВЫШЕНИИ).

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

Ответ №3:

Вы можете проверить, пуста ли строка непосредственно из программы, как это :

 btn.setOnClickListener(v-gt;{  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  }   });  

Программа может компилироваться быстрее, потому что вам не нужно проверять базу данных, а код проще.

Комментарии:

1. Да @Rahmad….Но мне нужно показать сообщение об ошибке из триггеров SQLite, которое я создал в триггере как «Имя фермера обязательно»…

2. @Venkatesh Похоже, что в вашем синтаксисе триггера создания отсутствуют некоторые пробелы