Как я могу получать первичный ключ моей таблицы посредством Оракле Датабасе Чанхе Нотификатион?

Я смог получать извещения базы данных в Oracle благодаря этому коду и опуская эту линию:

prop.setProperty(OracleConnection.DCN_QUERY_CHANGE_NOTIFICATION,"true");

Также я смог решать мою проблему ORA-29977 меняясь select * from act_code_metadata where product_id=1159 из-за select column_with_Number_type from act_code_metadata where product_id=1159

Все функционирует как ожидаемое :D

Это код, который я использую, чтобы печатать информацию о линии (Java 8):

DatabaseChangeRegistration dcp.addListener((DatabaseChangeEvent dce) -> 
                System.out.println(
                "Changed row id : " +
                dce.getTableChangeDescription()[0].getRowChangeDescription()[0].getRowid().stringValue() 
                + " " +  dce.getTableChangeDescription()[0].getRowChangeDescription()[0].getRowOperation().toString()));

Но вся информация, которую я получаю, - физический адрес линии (rowid) и операция, подразумеваемая (insert, delete или update). Я нуждаюсь в том, чтобы идентифицировать линию, которая изменена / вводить / удалять, чтобы освежать мою дату в кэше в нескольком контроле Swing моего GUI.

Я прочитал, что, несмотря на то, что rowid неизменный, тот же rowid может быть пере-распределенным, если линия удалена и новость введена, и который rowid может менять, если линия находится в таблице particionada. Так что лучшее, что я могу делать, состоит в том, чтобы использовать rowid и первичный ключ линии. У моей таблицы есть первичный ключ autoincrementable (с последовательностью и trigger), созданный с этим кодом.

У меня нет контроля, на котором оно происходит в basse данных, или если кто-то вводит и удаляет линии несколько раз. Так что я могу получать линию, спутанную, выбрав ее используя rowid, данный извещением.

Есть какой-то способ получать основной первичный путь Оракле Датабасе Чанхе Нотификатион так что я могу идентифицировать линию, введенную / удаленную / измененную правильно?

Я работаю с Оракле Датабасе XE 11.2 Express и Java 8. У пользователя, который используется для извещений, уже есть привилегия change notification: grant change notification to the_user;

6
задан 23.05.2017, 15:39
0 ответов