powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / SQLite триггер не работает из клиента
3 сообщений из 3, страница 1 из 1
SQLite триггер не работает из клиента
    #39681125
nikomp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть приложение, в приложение БД.
В БД 2 таблицы:
Код: plsql
1.
CREATE TABLE object_90067_ (_id integer primary key autoincrement, id text not null unique, if_edit integer not null default 0, attr_90116_ text, attr_90118_ integer, attr_90114_ text, attr_90115_ text, attr_90570_ integer, foreign key(attr_90118_) references object_90132_(id) ON DELETE CASCADE, foreign key(attr_90570_) references object_90037_(id) ON DELETE CASCADE)



Код: plsql
1.
CREATE TABLE relation1_90037_90067_ (_id integer primary key autoincrement, id text not null unique, if_edit integer not null default 0, id_parent text not null, id_child text not null, foreign key (id_parent) references object_90037_(id) ON DELETE CASCADE, foreign key (id_child) references object_90067_(id) ON DELETE CASCADE)



Есть триггер:

Код: plsql
1.
CREATE TRIGGER tr_relation1_90037_90067_ BEFORE DELETE on relation1_90037_90067_ for each row when OLD.id not like 'AppGUID-%' begin insert into deleted (name, clause_where) values ('relation1_90037_90067_', OLD.id); end



Проблема в том, что при выполнении удаления из приложения триггер не отрабатывает. Если удаляю запись из просотрщика БД (DB Browser SQLite) триггер отрабатывает корректно.

В приложении запись удаляется вот так:
Код: java
1.
2.
3.
4.
5.
db.delete("object_90067_", "id=" + listView.getTag().toString());
......
public void delete(String stTable, String whereClause) {
    mDB.delete(stTable, whereClause, null);
  }
...
Рейтинг: 0 / 0
SQLite триггер не работает из клиента
    #39681146
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавь это в свой db helper:

Код: java
1.
2.
3.
4.
5.
6.
7.
    @Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);
        if (!db.isReadOnly()) {
            db.execSQL("PRAGMA foreign_keys=ON;");
        }
    }
...
Рейтинг: 0 / 0
SQLite триггер не работает из клиента
    #39681147
nikomp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решилась проблема, фууу ))

Оказалось, что дело было не в триггере. Дело было во внешнем ключе и правиле ON DELETE CASCADE. По-умолчанию при создании БД ограничение внешних ключей в БД отключено. Его нужно принудительно включать при каждом открытии БД. Подробнее тут https://stackoverflow.com/questions/13641250/sqlite-delete-cascade-not-working
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Android [игнор отключен] [закрыт для гостей] / SQLite триггер не работает из клиента
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]