Oracle数据库更改事件 - 获取更改行

时间:2015-01-04 14:31:22

标签: java events jdbc oracle11g ojdbc

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有相同的步骤来解决问题,但我的工作无效。

1 个答案:

答案 0 :(得分:1)

让我们来看看这两行:

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

您在queryChangeDescription.getTableChangeDescription()上收到编译错误。变量queryChangeDescription的类型是什么?

这是QueryChangeDescription[]。这是一个数组类型。

您收到错误,因为方法getTableChangeDescription不在数组上。

我想你想要在数组的第一个元素上调用方法,而不是在数组本身上调用。如果是这样,请尝试

RowChangeDescription[] rowChangeDescriptions = queryChangeDescription[0].getTableChangeDescription()[0]