最近要求開發(fā)當(dāng)數(shù)據(jù)表發(fā)生變化的時(shí)候調(diào)用web接口的需求,上網(wǎng)找了好幾篇文章看著都覺(jué)得不是很好,也根據(jù)別人的思路去實(shí)現(xiàn)了下,感覺(jué)都不太理想,最后使用URLConnection實(shí)現(xiàn)了調(diào)用。具體查看一下代碼,親自測(cè)試可以使用。可以根據(jù)自己的需求去修改。
##一、觸發(fā)器簡(jiǎn)介
觸發(fā)器的定義就是說(shuō)某個(gè)條件成立的時(shí)候,觸發(fā)器里面所定義的語(yǔ)句就會(huì)被自動(dòng)的執(zhí)行。因此觸發(fā)器不需要人為的去調(diào)用,也不能調(diào)用。然后,觸發(fā)器的觸發(fā)條件其實(shí)在你定義的時(shí)候就已經(jīng)設(shè)定好了。這里面需要說(shuō)明一下,觸發(fā)器可以分為語(yǔ)句級(jí)觸發(fā)器和行級(jí)觸發(fā)器。詳細(xì)的介紹可以參考網(wǎng)上的資料,簡(jiǎn)單的說(shuō)就是語(yǔ)句級(jí)的觸發(fā)器可以在某些語(yǔ)句執(zhí)行前或執(zhí)行后被觸發(fā)。而行級(jí)觸發(fā)器則是在定義的了觸發(fā)的表中的行數(shù)據(jù)改變時(shí)就會(huì)被觸發(fā)一次。
1.首先在oracle中創(chuàng)建java sources
create or replace and compile java source named jym as
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class JYM {
public static void sendGet(String url,String title){
String result ="";
BufferedReader in = null;
try{
String urlName = url+"?title="+title;
URL realUrl = new URL(urlName);
URLConnection conn = realUrl.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.connect();
in= new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while((line = in.readLine())!=null){
result += "/n"+line;
}
}catch(Exception e){
System.out.println("發(fā)送GET請(qǐng)求出現(xiàn)異常"+e);
e.printStackTrace();
}
finally{
try{
if(in !=null){
in.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void say(String ip,String title) throws Exception {
JYM.sendGet(ip,title);
}
}
2.創(chuàng)建存儲(chǔ)過(guò)程
?
create or replace procedure socket(ip varchar2,title varchar2)
as language java name
'JYM.say(java.lang.String,java.lang.String)';
3.創(chuàng)建觸發(fā)器
?
create or replace trigger insterMessageNotionAfter
after? insert on message_notion
for each row
begin
socket('http://192.168.90.132:8080/spring/ydbg/meeting/meetingpaln/related/110928171642707',:new.title);
end insterMessageNotionAfter;
代碼寫好之后可以先用存儲(chǔ)過(guò)程測(cè)試
sql代碼
socket('http://192.168.90.132:8080/spring/ydbg/meeting/meetingpaln/related/110928171642707',:new.title);
為了能在控制臺(tái)中看見(jiàn)錯(cuò)誤信息,要先運(yùn)行下面3句話
Sql代碼
1. set serveroutput on;
2. set serveroutput on size 5000;
3. call dbms_java.set_output(5000);
假如你運(yùn)行存儲(chǔ)過(guò)程時(shí)爆出了? 請(qǐng)給用戶復(fù)制權(quán)限的提示則按照提示在sysdba 下賦權(quán)限,如:
Sql代碼
exec dbms_java.grant_permission('zhym','SYS:java.net.SocketPermission','192.168.9.12:18002','connect,resolve')
exec dbms_java.grant_permission('ZHYM','SYS:java.net.SocketPermission','127.0.0.1:1521','connect,resolve')
exec 后面的語(yǔ)句會(huì)在你的報(bào)錯(cuò)提示中打印出來(lái),只要前面加exec就可以了。