Событие изменения базы данных Oracle — получить измененную строку

class DCNDemoListener implements DatabaseChangeListener
    {
          String rid;
      DBChangeNotification demo;
      DCNDemoListener(DBChangeNotification dem)
      {
        demo = dem;
      }
      public void  onDatabaseChangeNotification(DatabaseChangeEvent e)
      {
        Thread t = Thread.currentThread();
//      System.out.println("DCNDemoListener: got an event ("+this+" running on thread "+t+")");
//      System.out.println(e.toString());
            TableChangeDescription[] tableChangeDescription = e.getTableChangeDescription();
            QueryChangeDescription[] queryChangeDescription = e.getQueryChangeDescription();
            RowChangeDescription[] rowChangeDescriptions = queryChangeDescription.getTableChangeDescription()[0].getRowChangeDescription(); // error here
            for (RowChangeDescription rowChangeDescription : rowChangeDescriptions) 
            {
              rowChangeDescription.getRowid();
            }              
  }

Я получаю сообщение об ошибке getTableChangeDescription()[0]. Он говорит, что не может найти символ. Я правильно импортировал класс и файл ojdbc6.jar, а также проверил документ API и не знаю, почему я получаю сообщение об ошибке.

По сути, я пытаюсь получить ROWID, чтобы узнать, где именно была выполнена вставка/обновление/удаление.

Глядя на предыдущий post1, post2 некоторых других пользователей имеет те же шаги для решения проблемы, но мой не работает.


person Community    schedule 04.01.2015    source источник


Ответы (1)


Давайте посмотрим на эти две строки:

QueryChangeDescription[] queryChangeDescription = e.getQueryChangeDescription();
RowChangeDescription[] rowChangeDescriptions = queryChangeDescription.getTableChangeDescription()[0].getRowChangeDescription(); // error here

Вы получаете ошибку компиляции на queryChangeDescription.getTableChangeDescription(). Каков тип переменной queryChangeDescription?

Это QueryChangeDescription[]. Это тип массива.

Вы получаете сообщение об ошибке, потому что метод getTableChangeDescription не относится к массивам.

Я предполагаю, что вы хотели вызвать метод для первого элемента массива, а не для самого массива. Если да, попробуйте

RowChangeDescription[] rowChangeDescriptions = queryChangeDescription[0].getTableChangeDescription()[0]
person Luke Woodward    schedule 04.01.2015
comment
Большое спасибо! :) Искал часами простую вещь, блин. - person ; 04.01.2015