Уведомления об изменении типа базы данных Oracle - PullRequest
0 голосов
/ 13 декабря 2018

Мне нужно получать уведомления при изменении типов в базе данных Oracle.Я нашел следующий код из Уведомление об изменении базы данных .Он получает уведомления, если какие-либо изменения (вставка, обновление, удаление) сделаны в зарегистрированной таблице.

public class DBChangeNotification
{
static final String USERNAME= "username";
static final String PASSWORD= "password!";
static String URL = "jdbc:oracle:thin:@localhost:1521:xe";

public static void main(String[] argv)
{
    DBChangeNotification demo = new DBChangeNotification();
    try
    {
        demo.run();
    }
    catch(SQLException mainSQLException )
    {
        mainSQLException.printStackTrace();
    }
}

void run() throws SQLException
{
    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 type");
        ResultSet rs = stmt.executeQuery("select * from table_name");
        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)
    {
        if(conn != null)
            conn.unregisterDatabaseChangeNotification(dcr);
        throw ex;
    }
    finally
    {
        try
        {
            conn.close();
        }
        catch(Exception innerex){ innerex.printStackTrace(); }
    }

   synchronized( this )
    {
        try{ this.wait();} catch( InterruptedException ie ) {}
    }
}
OracleConnection connect() throws SQLException
{
    OracleDriver dr = new OracleDriver();
    Properties prop = new Properties();
    prop.setProperty("user",DBChangeNotification.USERNAME);
    prop.setProperty("password",DBChangeNotification.PASSWORD);
    return (OracleConnection)dr.connect(DBChangeNotification.URL,prop);
}
 }

class DCNDemoListener implements DatabaseChangeListener
{
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());
    synchronized( demo ){ demo.notify();}
}
}

Мне нужно изменить этот код, чтобы получать уведомления, когда пользователь вносит изменения в types .Я пытался, но не мог найти способ сделать это.Есть ли какая-либо возможность для этого или Пожалуйста, какой-то орган может помочь мне решить эту проблему?

Моя версия базы данных - Oracle Database 11g Express Edition, выпуск 11.2.0.2.0 - 64-разрядная версия

...