Oracle访问web

Oracle访问Web

一、Oracle访问Web

在系统实现中,有时会有直接在数据库端利用触发器、存储过程等方式进行数据传递、分发的业务,而其中可能会涉及一些业务逻辑,为了处理这些业务逻辑,并简单起见,可以直接在触发器或存储过程中调用一些java类或WebService或一个url连接。这一期呢我来说一下通过oracle中自带的utl_http怎样连接到一个url路径,至于oracle怎样调用WebService咱们下一期再说。

二、应用场景

当数据库中某个表做增删改操作时,需及时的更新缓存数据,同时通知客户端重新请求数据。

三、编码实现

以下是通过UTL_HTTP+SERVLET解决以上问题的一个具体实现,以后如果有类似的需求或问题大家可以借鉴一下。

 

1.         创建UpdateCacheServlet,并在web.xml中配置一下

创建此servlet的目的主要是用来更新缓存的数据等。

publicclass UpdateCacheServlet extends HttpServlet {

 

    @Override

    protectedvoid doGet(HttpServletRequest req, HttpServletResponse resp)

           throws ServletException, IOException {

       String updateTable = req.getParameter("updateTable");

       //调用更新缓存的方法

       updateCache(updateTable);

    }

    /**

     * 更新缓存,并通知相应的客户端更新数据

     * (具体如何缓存数据以及通知客户端我这里不作为描述的重点)

     */

    privatevoid updateCache(String updateTable) {

       if(updateTable == null || updateTable.trim().equals("")) {

           return;

       }

       //oracle触发器的执行是在事务提交之前执行的,所以大家在更新数据的时候最好延迟一下。

       if(updateTable == "TEST_TABLE") {

           //具体的缓存代码我这里就不写了,估计大家都会,这里不作为描述的重点

           System.out.println("在这里延迟更新缓存数据");

           //通知客户端,数据需要更新了,具体如何实现通知客户端我这里也不作为描述的重点。

           System.out.println("在这里发送通知客户端重新请求数据的通知");

       }

    }

}

 

 

2.         创建Oracle触发器

TEST_TABLE表添加触发器,触发UpdateCacheServlet的请求。

CREATEORREPLACETRIGGER TEST_TABLE_TRIGGER--TEST_TABLE表添加触发器

afterinsertON TEST_TABLE --这里在TEST_TABLE添加数据后出发一下事件

--(关于触发器的使用大家可以去查询其它相关资料我这里就不在赘述)

declare

  -- 声明相应变量

  url varchar2(2000);

  req utl_http.req;--创建reques请求变量

  resp utl_http.resp;--创建response相应变量

  value  VARCHAR2(1000);--存储请求文本的变量

begin

  url:='http://forevergis:8898/jinangis/updatecache.do?updateTable=TEST_TABLE';--需要请求的url

  req:= utl_http.begin_request(url);--发送请求

  resp:= utl_http.get_response(req);--获得请求响应

  loop

  utl_http.read_line(resp,value,TRUE);

  dbms_output.put_line('' || value);--打印方法,oracle提供

  ENDloop;

  utl_http.end_response(resp);--结束请求响应

  EXCEPTION

  WHEN utl_http.end_of_body THEN

  utl_http.end_response(resp);--结束请求响应

 

end;

/

注意事项:

oracle触发器的执行是在事务提交之前完成的,所以如果在servlet中,做更新缓存数据的时候,最好加一个延时,避免出现读取错误数据的现象。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值