更新blob内容时,不会触发DatabaseChangeNotification

时间:2018-05-29 07:32:07

标签: java oracle jdbc

当我更新数据库中的blob时,DatabaseChangeNotification必须触发,但它没有发生。

正常的字符串/ varchar正常工作,但它不能用于blob。 我正在尝试如下

OracleConnection conn = connect();
    Properties prop = new Properties();
    prop.setProperty(OracleConnection.DCN_NOTIFY_ROWIDS,"true");
    prop.setProperty(OracleConnection.DCN_QUERY_CHANGE_NOTIFICATION,"true");
    DatabaseChangeRegistration dcr = conn.registerDatabaseChangeNotification(prop);
    try {
        DCNDemoListener list = new DCNDemoListener(this);
        dcr.addListener(list);
        Statement stmt = conn.createStatement();
        ((OracleStatement) stmt).setDatabaseChangeRegistration(dcr);
        ResultSet rs = stmt.executeQuery("select * from TEST_MODEL");
        rs.close();
        stmt.close();
        stmt = conn.createStatement();          
        ResultSet rss = stmt.executeQuery("select TESTSUITE_NAME,TESTSUITE_DEFINITION from TESTSUITE_MODELS");
        while (rss.next()) {
            System.out.println(rss.getString("TESTSUITE_NAME"));
            System.out.println(rss.getBlob("TESTSUITE_DEFINITION"));
        }
        rss.close();
        stmt.close();

有人可以帮助我吗?

如果我正在尝试查询哪个conatian blob列我正在获取“ORA-29977:在blolb的保证模式下查询注册不支持的列类型”异常

ResultSet rss = stmt.executeQuery(“从TESTSUITE_MODELS选择TESTSUITE_NAME,TESTSUITE_DEFINITION”);

1 个答案:

答案 0 :(得分:0)

我还没有使用数据库更改通知(感谢提示,看起来非常有趣!),但在documentation中找到了以下内容:

  

要在保证模式中注册QRCN,查询必须符合以下规则:   它引用的每一列都是NUMBER数据类型或VARCHAR2数据类型。

尽力而为模式中有关QRCN的部分似乎没有此限制。

有人知道如何使用JDBC的尽力而为模式吗?