Java oracle 12c中的数据库更改通知

Java oracle 12c中的数据库更改通知,java,maven,java-8,oracle12c,ojdbc,Java,Maven,Java 8,Oracle12c,Ojdbc,我在maven项目中使用ojdbc8 12.2.0.1,我希望在表中出现新条目时发出通知。 我使用的是ojdbc7 11.2.0.1和oracle 11g,在这方面,它运行良好。 现在我正在升级到Oracle12c,我正在使用OJDBC812.2.0.1JAR 正如我所看到的,该表正在进入user_change_notification_regs表,但一旦注册表中有新条目,注册表就会被注销。 这意味着用户更改通知注册表中没有条目 代码没有给出任何类型的异常或错误 DCN的任何替代方案也会有所帮助

我在maven项目中使用ojdbc8 12.2.0.1,我希望在表中出现新条目时发出通知。 我使用的是ojdbc7 11.2.0.1和oracle 11g,在这方面,它运行良好。 现在我正在升级到Oracle12c,我正在使用OJDBC812.2.0.1JAR

正如我所看到的,该表正在进入user_change_notification_regs表,但一旦注册表中有新条目,注册表就会被注销。 这意味着用户更改通知注册表中没有条目

代码没有给出任何类型的异常或错误

DCN的任何替代方案也会有所帮助

代码:

导入java.sql.ResultSet;
导入java.sql.SQLException;
导入java.sql.Statement;
导入java.util.Properties;
导入oracle.jdbc.OracleConnection;
导入oracle.jdbc.OracleDriver;
导入oracle.jdbc.oracle语句;
导入oracle.jdbc.dcn.DatabaseChangeEvent;
导入oracle.jdbc.dcn.DatabaseChangeListener;
导入oracle.jdbc.dcn.DatabaseChangeRegistration;
公共类DBChangeNotification{
公共静态void main(字符串[]argv){
试一试{
Connection con=DriverManager.getConnection(url、用户、密码);
startDcn(con);
}捕获(SQLException mainSQLException){
mainSQLException.printStackTrace();
}
}
公共静态void startDcn(连接连接)引发SQLException{
Properties prop=新属性();
prop.setProperty(OracleConnection.DCN_NOTIFY_ROWIDS,“true”);
prop.setProperty(OracleConnection.DCN_IGNORE_DELETEOP,“true”);
prop.setProperty(OracleConnection.DCN_IGNORE_UPDATEOP,“true”);
DatabaseChangeRegistration dcr=conn.registerDatabaseChangeNotification(prop);
//侦听器未被调用为未注册的表。
addListener(新的DatabaseChangeListener(){
公共无效onDatabaseChangeNotification(DatabaseChangeEvent dce){
RowChangeDescription[]RowChangeDescription=dce.getTableChangeDescription()[0]。getRowChangeDescription();
对于(RowChangeDescription rcd:RowChangeDescription){
System.out.print(“正在工作”);//无法打印
}
}
});
语句stmt=conn.createStatement();
(OracleStatement)stmt.setDatabaseChangeRegistration(dcr);
ResultSet rs=stmt.executeQuery(“从演示中选择*,其中rownum='1');
while(rs.next()){}
字符串[]tableNames=dcr.getTables();
for(int i=0;i

注意:如果有语法错误,请忽略。

为什么要发布有语法错误的代码?或者甚至没有正确格式化的代码?你不需要帮助吗…@james z没有syntex错误,但如果有,那不是焦点,是否有任何更新?…任何建议都会有帮助
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import oracle.jdbc.OracleConnection;
import oracle.jdbc.OracleDriver;
import oracle.jdbc.OracleStatement;
import oracle.jdbc.dcn.DatabaseChangeEvent;
import oracle.jdbc.dcn.DatabaseChangeListener;
import oracle.jdbc.dcn.DatabaseChangeRegistration;

public class DBChangeNotification {
    public static void main(String[] argv) {
        try {
            Connection con = DriverManager.getConnection(url, user, password);
            startDcn(con);
        } catch (SQLException mainSQLException) {
            mainSQLException.printStackTrace();
        }
    }

    public static void startDcn(Connection conn) throws SQLException {
        Properties prop = new Properties();
        prop.setProperty(OracleConnection.DCN_NOTIFY_ROWIDS, "true");
        prop.setProperty(OracleConnection.DCN_IGNORE_DELETEOP, "true");
        prop.setProperty(OracleConnection.DCN_IGNORE_UPDATEOP, "true");

        DatabaseChangeRegistration dcr = conn.registerDatabaseChangeNotification(prop);
        //listener not getting called as table getting unregistered.
        dcr.addListener(new DatabaseChangeListener() {
            public void onDatabaseChangeNotification(DatabaseChangeEvent dce) {
                RowChangeDescription[] rowChangeDescription = dce.getTableChangeDescription()[0].getRowChangeDescription();
                for (RowChangeDescription rcd: rowChangeDescription) {
                    System.out.print("Working"); //not getting print
                }
            }
        });

        Statement stmt = conn.createStatement();
        ((OracleStatement) stmt).setDatabaseChangeRegistration(dcr);
        ResultSet rs = stmt.executeQuery("select * from demo where rownum='1' ");
        while (rs.next()) {}
        String[] tableNames = dcr.getTables();
        for (int i = 0; i < tableNames.length; i++)
            System.out.println(tableNames[i] + " is part of the registration.");
        rs.close();
        stmt.close();
    }
    catch (SQLException ex) {
        ex.printStackTrace();
    }
}