Я хотел бы знать, могу ли я отобразить измененную запись (данные) в базе данных Oracle 10G, используя Oracle уведомление об изменении базы данных?, Без выполнения второго запроса SQL в процедуре java: onDatabaseChangeNotification (DatabaseChangeEvent dce)
.
мой код:
public class OracleDCN {
static final String USERNAME = "system";
static final String PASSWORD = "POP_P5";
static String URL = "jdbc:oracle:thin:@192.168.23.128:1521:uep";
public static void main(String[] args) {OracleDCN oracleDCN = new OracleDCN();
try {
oracleDCN.run();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void run() throws Exception{
OracleConnection conn = connect();
System.out.println("succes1");
Properties prop = new Properties();
prop.setProperty(OracleConnection.DCN_NOTIFY_ROWIDS, "true");
DatabaseChangeRegistration dcr = conn.registerDatabaseChangeNotification(prop);
try{
dcr.addListener(new DatabaseChangeListener() {
public void onDatabaseChangeNotification(DatabaseChangeEvent dce) {
System.out.println(dce.getTableChangeDescription()[0].getTableOperations().toString());
}
});
Statement stmt = conn.createStatement();
((OracleStatement) stmt).setDatabaseChangeRegistration(dcr);
ResultSet rs = stmt.executeQuery("SELECT * FROM CAF.tab");
while (rs.next()) {
System.out.println( rs.getString(1)+" " +rs.getString(2)+" " +rs.getString(3));
}
rs.close();
stmt.close();
}catch(SQLException ex){
if (conn != null)
{
conn.unregisterDatabaseChangeNotification(dcr);
conn.close();
}
throw ex;
}
}
OracleConnection connect() throws SQLException {
OracleDriver dr = new OracleDriver();
Properties prop = new Properties();
prop.setProperty("user", OracleDCN.USERNAME);
prop.setProperty("password", OracleDCN.PASSWORD);
return (OracleConnection) dr.connect(OracleDCN.URL, prop);
}
}
Мне сложно отображать изменение данных с событием dcn.