Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
17 / 17 / 2
Регистрация: 02.05.2010
Сообщений: 122
1

Java триггер в базе данных Oracle

11.12.2012, 15:52. Показов 2306. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Есть база данных Oracle и программа написанная на Java. Программа должно выполнять просмотр, добавление, удаление ,изменение строк таблицы. Просмотр работает нормально. Но та часть программы, которая добавляет, изменяет или удаляет - не срабатывает. Потому что в базе есть триггер, который позволяет что-то менять в базе, только залогинившемуся пользователю.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[SQL]ELIMITER @@
CREATE OR REPLACE TRIGGER RUNNING_ON_WAVES."RUNNING_ON_WAVES"."TR_USERS_BIU" 
  BEFORE INSERT OR UPDATE ON USERS
  FOR EACH ROW
DECLARE
BEGIN
  --
  :NEW.CU_USERS_ID := P_USERS.GET_USERS_ID;
  --
  :NEW.UPD_DATE := SYSDATE;
  --
  IF INSERTING THEN
 
     :NEW.SERVER_LOCATION := DM_CONST.get_SERVER_LOCATION;
    -- FILL PK
    IF :NEW.USERS_ID IS NULL THEN
      SELECT to_number(SEQ_USERS.NEXTVAL||DM_CONST.get_SERVER_LOCATION) INTO :NEW.USERS_ID FROM DUAL;
    END IF;
    -- END PK
    :NEW.CR_DATE := SYSDATE;
  END IF;
 
END TR_USERS_BIU; @@
DELIMITER ;
[/SQL]

Вот код на java, где я пыталась как-то справиться с этой проблеммой
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public void updateEmployee(Employee employee) {
        jdbcTemplate.call(new CallableStatementCreator() {
            @Override
            public CallableStatement createCallableStatement(Connection con) throws SQLException {
                //CallableStatement cs = con.prepareCall("p_users.set_user_id(2);");
                CallableStatement cs = con.prepareCall("p_users.get_user_id;");
                 //CallableStatement cs = con.prepareCall("NEW.USERS_ID := P_USERS.GET_USERS_ID");
                cs.setInt(1, 2); // первый параметр
                cs.setInt(2, 2); // второй параметр
                return cs;
            }
        }, new ArrayList<SqlParameter>());
        Object[] values = {
                employee.getLastName(),
                employee.getSecondName(),
                employee.getFirstName(),
                employee.getLogin(),
                employee.getPassword(),
                employee.getComments(),
                employee.getCurrentDate(),
                employee.getUpdateDate(),
                employee.getCompanyId(),
                employee.getUserId(),
                employee.getWebAccess(),
                employee.getServerLocation(),
                employee.getId()
        };
        int[] types = {
                Types.VARCHAR,
                Types.VARCHAR,
                Types.VARCHAR,
                Types.VARCHAR,
                Types.VARCHAR,
                Types.VARCHAR,
                Types.DATE,
                Types.DATE,
                Types.INTEGER,
                Types.INTEGER,
                Types.INTEGER,
                Types.INTEGER,
                Types.INTEGER
        };
        int result = jdbcTemplate.update(SQL_UPDATE_USERS, values, types);
        logger.debug("{} row(s) was/were updated", result);
    }
Подскажите, пожалуйста, как программно получить разрешение на изменения базы, НЕ удаляя триггер?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2012, 15:52
Ответы с готовыми решениями:

Триггер в базе данных
Здравствуйте. Стоит такая задача: Если запись в таблице не обновляется в течении, например,...

AndroidStudio подключение к базе данных Oracle
Доброго дня. Разрабатываю приложение с БД, база создана в Oracle Sql Developer. Нужна помощь,...

Мониторинг подключения к серверу и к базе данных Oracle
Добрый день! Есть такая проблема - нужно обеспечить контроль за подключением клиента к серверу БД...

Не удается подключиться к базе данных oracle в приложении C#
Выдает ошибку : Дополнительные сведения: Произошли ошибки во время выполнения многошаговой...

2
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
11.12.2012, 15:57 2
Цитата Сообщение от Luchic Посмотреть сообщение
Потому что в базе есть триггер, который позволяет что-то менять в базе, только залогинившемуся пользователю.
А соединение с базой - разве не есть логин в Oracle?
В триггере нет никаких дополнительных условий, которые могут отменить вставку/обновление.
0
17 / 17 / 2
Регистрация: 02.05.2010
Сообщений: 122
11.12.2012, 16:18  [ТС] 3
С тоже так думала, но тот пароль, сам по себе, а тут установлена куча триггеров, которые срабатывают, как только кто-то, даже в самом оракле попытается сохранить какие-то изменения. Один из триггеров я привела

Добавлено через 3 минуты
Если попытаться изменять в PL SQL просто выводится окошко с просьбой ввести логин, а у меня программа выводила ошибку, что нет такого юзера. Вот и начала я сочинять как обойти это

Добавлено через 4 минуты
Вот ещё , к примеру, триггер
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
DELIMITER @@
CREATE OR REPLACE TRIGGER RUNNING_ON_WAVES."RUNNING_ON_WAVES"."TR_COUNTRY_BIU" 
  BEFORE INSERT OR UPDATE ON COUNTRY
  FOR EACH ROW
DECLARE
BEGIN
  --
  :NEW.USERS_ID := P_USERS.GET_USERS_ID;
  --
  :NEW.UPD_DATE := SYSDATE;
  --
  IF INSERTING THEN
 
     :NEW.SERVER_LOCATION := DM_CONST.get_SERVER_LOCATION;
    -- FILL PK
    IF :NEW.COUNTRY_ID IS NULL THEN
      SELECT to_number(SEQ_REFERENCES.NEXTVAL||DM_CONST.get_SERVER_LOCATION) INTO :NEW.COUNTRY_ID FROM DUAL;
    END IF;
    -- END PK
    :NEW.CR_DATE := SYSDATE;
  END IF;
 
END TR_COUNTRY_BIU; @@
DELIMITER ;
Добавлено через 10 минут
Вот ошибка "org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.InvalidResultSetAccessException: CallableStatementCallback; invalid ResultSet access for SQL []; nested exception is java.sql.SQLException: Недопустимый индекс столбца
"
0
11.12.2012, 16:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2012, 16:18
Помогаю со студенческими работами здесь

Итоговая таблица и триггер, который вносит изменения в эту таблицу при изменении данных в базе
я создаю итоговую таблицу: select count(ks) as vse, ( select count(ks) from Sotrudnik where...

Получение списка заголовков столбцов определённой таблицы из базе данных Oracle?
Нужно получить имена заголовков столбцов определённой таблицы, а можно ещё и все строки, чтобы...

Ошибка подключения к базе Oracle DB Express 11g через Oracle Data Integrator
Приветствую. На работе дали задание: установить Oracle Data Integrator и создать стенд с...

Обновление данных в базе - Java БД
Подскажите, где может быть ошибка. Здесь происходит вставка данных и обновление, вставка работает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru