使用数据库更改通知
使用数据库更改通知
本教程将向您介绍如何使用 Java 程序 QCNSlider.java 来使用数据库更改通知 (DCN)。
大约 30 分钟
本教程包括下列主题:
将鼠标置于此图标上可以加载和查看本教程的所有屏幕截图。
(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)
注:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图来将其隐藏。
DCN 是什么?
数据库更改通知 (DCN) 是这样一个系统:客户端在其中注册其感兴趣的某些数据库的查询结果。当与这些查询相关联的对象发生更改时,数据库服务器会通知客户端。使用 JDBC 驱动程序的 DCN 特性,多层系统可以通过接收来自 JDBC 驱动程序的无效事件来尽可能地保持数据缓存是最新的。
要执行 DCN,需要执行以下步骤:
创建注册
为了使用 DCN,首先需要创建一个注册。可以使用 oracle.jdbc.OracleConnection 接口的 registerDatabaseChangeNotification() 方法来创建一个 JDBC 样式的注册。要激活查询更改通知而非对象更改通知,可以将选项 OracleConnection.DCN_QUERY_CHANGE_NOTIFICATION 设为“true”。使用该选项意味着当您注册一个选择查询时,您注册的是查询的实际结果,而非该查询所基于的数据库对象。查询注册提供比您注册表时更高的粒度。
DatabaseChangeRegistration dcr = null; Properties prop = new Properties(); prop.setProperty(OracleConnection.DCN_QUERY_CHANGE_NOTIFICATION,"true"); try { dcr = conn.registerDatabaseChangeNotification(prop); ...
将查询与注册相关联
创建了一个注册之后,您可以将一个查询与之相关联。您可以使用 Statement 类方法 setDatabaseChangeRegistration() 将一个查询与注册相关联。该方法将 DatabaseChangeRegistration 的一个对象作为参数。在该演示中,您将 select salary from employees where employee_id=108 查询关联到该注册。
Statement stmt = conn.createStatement(); String query = "select salary from employees where employee_id=108"; ((OracleStatement)stmt).setDatabaseChangeRegistration(dcr);
通知数据库更改事件
您需要使用 addListener() 方法将一个监听程序附加到该注册上,以接收数据库更改通知。
DCNListener list = new DCNListener(); dcr.addListener(list);
QCNSlider.java 程序创建了一个具有两个滑块的 GUI。当用户滑块移动到一个 DML 操作时,执行 update employees set salary=? where employee_id =108,。发生数据库更改事件时,数据库服务器会通知 JDBC 驱动程序。然后,该驱动程序构建一个新的 Java 事件,识别要通知的注册并通知附加到该注册的监听程序。QCNSlider 通过根据 employee_id=108 的工资相应地移动底部的进度条来处理该更改事件。
返回主题列表
开始本教程之前,您应该:
| 1. |
安装 Oracle 数据库 11g
|
| 2. |
从 Sun 下载并安装 JDK 6.0。
|
| 3 |
从 OTN 下载并安装 JDeveloper。 |
| 4 |
将 dcn.zip 文件下载并解压缩到您的工作目录中(即 wkdir)
|
返回主题列表
要执行 QCNSlider.java,您需要执行以下步骤来设置环境:
| 1. |
您需要赋予 hr 用户 change notification 权限。打开一个终端窗口,执行以下命令:
sqlplus / as sysdba
grant change notification to hr;
exit

|
返回主题列表
您需要在 JDeveloper 中设置项目属性。执行以下步骤:
| 1. |
打开一个终端窗口,执行以下命令:
cd <jdevhome>/jdev/bin
./jdev
其中, 是安装/解压缩 Jdeveloper 的目录。
注:首次运行 JDeveloper 时,您需要输入 J2SE 安装目录,系统还将询问您是否希望移植现有的应用程序。
|
| 2. |
打开 JDeveloper。Tip of the Day 窗口出现时,单击 Close。

|
| 3. |
选择 Tools > Manage Libraries。

|
| 4. |
单击 J2SE Definitions 选项卡。

|
| 5. |
单击 Browse 按钮。

|
| 6. |
导航到 jdk1.5.0_11/bin 目录,然后单击 Open。

|
| 7. |
将 J2SE Name 更改为 jdk1.5.0_11,然后单击 OK。

|
| 8. |
单击 Yes。

|
| 9. |
选择 Tools > Default Project Properties。

|
| 10. |
单击 Libraries,然后单击 Add JAR/ Directory。

|
| 11. |
按住 Ctrl 键,选择 $ORACLE_HOME/jdbc/lib 文件夹中的所有 jar 文件,然后单击 Select。

|
| 12. |
单击 OK。

|
返回主题列表
执行 QCNSlider.java 之前,您需要使用以下步骤将它添加到一个 JDeveloper 项目:
| 1. |
右键单击 Application,然后选择 New Application。

|
| 2. |
为 Application Name 输入 myApp,然后单击 OK。

|
| 3. |
为 Project Name 输入 myProj,然后单击 OK。

|
| 4. |
选择 File > Open。

|
| 5. |
从 /home/oracle/dcn 目录中(或者您解压缩 dcn.zip 的地方)选择 QCNSlider.java 文件,然后单击 Open。

|
| 6. |
右键单击 QCNSlider.java 选项卡,然后选择 Add to myProj.jpr。

|
| 7. |
接受默认选项,然后单击 OK。

|
返回主题列表
| 1. |
在 QCNSlider.java 文件中向下滚动一点儿,查看连接信息。

|
返回主题列表
使用以下设置步骤执行 QCNSlider.java:
| 1. |
展开 myProj > Application Sources。右键单击 QCNSlider.java,然后单击 Make。

|
| 1. |
QCNSlider.java 文件成功编译。

|
| 2. |
打开一个终端窗口,执行以下命令:
sqlplus hr/hr
select salary from employees where employee_id=108;

|
| 3. |
右键单击 QCNSlider.java,然后单击 Run。

|
| 4. |
您将看到以下输出

|
| 5. |
移动滑块,使左下方的值更改为 62。

|
| 6. |
再次执行以下查询:
select salary from employees where employee_id=108;
注意,工资现在更改为 62。

|
| 7. |
通过执行以下命令将 employee_id=108 的工资更新为 20:
update employees set salary=20 where employee_id=108;
commit;
您会注意到标记为 receiver 的进度条中的变化。

|
| 8. |
查询通知不仅绑定到 where 子句 employee_id=108,还绑定到逻辑上影响同一行的所有更新。执行以下命令:
update employees set salary=80 where last_name='Greenberg';
commit;
更新 last_name='Greenberg'(它是 employee_id=108)将发送通知,窗口中的进度条将发生滑动。

|
| 9. |
然而,更新 last_name='Ernst' 不会影响 employee_id=108,因此不会发送任何通知,进度条保持不变。执行以下命令:
update employees set salary=40 where last_name='Ernst';
commit;

|
返回主题列表
在本教程中,您学习了数据库更改通知以及如何使用它。
返回主题列表
将鼠标置于该图标上可以隐藏所有的屏幕截图。
|