oracle笔记2
来源:互联网 发布:英伟达游戏优化扫描 编辑:程序博客网 时间:2024/06/12 21:14
--------oracle加载java包,创建java存储过程
http://www.cnblogs.com/Mayvar/archive/2011/03/30/wanghonghua_201103300200.html
----------oracle加载jar包 失败:信息如下。次原因是oracle10g的默认j2re(即JRE)是1.4的,我写的这个jar包所使用的JRE是1.7的所以oracle的loadjava命令会失败。需要将使用
Myeclipse6.5创建java工程的时候使用j2se<1.4版本的。
F:\>loadjava -u sys/tiger@orcl -v -resolve EncDecryption.jar
arguments: '-u' 'sys/tiger@orcl' '-v' '-resolve' 'EncDecryption.jar'
identical: META-INF/MANIFEST.MF
identical: com/autonavi/CEncrptor
identical: .classpath
identical: .project
skipping : resource META-INF/MANIFEST.MF
resolving: class com/autonavi/CEncrptor
errors : class com/autonavi/CEncrptor
ORA-29521: 引用名称java/lang/StringBuilder无法找到
skipping : resource .classpath
skipping : resource .project
The following operations failed
class com/autonavi/CEncrptor: resolution
exiting : Failures occurred during processing
--------oracle调用webservice
oracle的utl_dbws包我试了一下,使用中会有很多问题,所以抛弃了。(但后来经过改进可使用,具体参见webservice笔记)
改用oracle调用java---然后-->java再调用webservice这条路。
http://www.docin.com/p-57405269.html(可以不用soap/axis《apache的axis是soap的升级版》进行访问webservice)。
------------使用servlet做一个http服务,使用oracle进行调用,如下:
如果想让oracle通过通过utl_http带一句简单的url中带有参数的方式来进行访问服务,然后就能获取到返回值,则服务端可以使用java的servlet,调用如下:
-------------------server端:
先使用myeclipse6.5构建一个web工程,然后在此web工程上添加一个servlet,其中CEncrptor类在此不可公布,这个servlet具体代码如下:
package com.autonavi;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class decrptor extends HttpServlet {/** * Constructor of the object. */public decrptor() {super();}/** * Destruction of the servlet. <br> */public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}/** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {/*response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println(" <BODY>");out.print(" This is ");out.print(this.getClass());out.println(", using the GET method");out.println(" </BODY>");out.println("</HTML>");out.flush();out.close();*/doPost(request,response);}/** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {/*response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println(" <BODY>");out.print(" This is ");out.print(this.getClass());out.println(", using the POST method");out.println(" </BODY>");out.println("</HTML>");out.flush();out.close();*/request.setCharacterEncoding("GBK");String RESULT=null;String xcoord = request.getParameter("xcoord").toString();String ycoord = request.getParameter("ycoord").toString();RESULT=CEncrptor.getDecrptor(xcoord)+","+CEncrptor.getDecrptor(ycoord);response.setContentType("text/html;charset=GBK"); PrintWriter out = response.getWriter();out.print(RESULT);out.flush();out.close();}/** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */public void init() throws ServletException {// Put your code here}}--------------oracle客户端client:
FUNCTION ENCRYPTION(i_x_coord IN NUMBER,i_y_coord IN NUMBER) RETURN json AS url VARCHAR2(2000); req utl_http.req; resp utl_http.resp; returnValue VARCHAR2(400); obj json; BEGIN url:='http://' || '10.2.10.43:8000' || '/?opt=Secret2Public' || CHR(38) || 'x=' || i_x_coord || CHR(38) || 'y=' || i_y_coord; req:= utl_http.begin_request(url); resp:= utl_http.get_response(req); utl_http.READ_TEXT(resp,returnValue); utl_http.end_response(resp); obj := json(returnValue); RETURN obj; EXCEPTION WHEN utl_http.end_of_body THEN utl_http.end_response(resp); raise_application_error( coordinate_conversion_error,'encryption error of pint:( ' || i_x_coord || ',' || i_y_coord || ').', TRUE ); WHEN OTHERS THEN utl_http.end_response(resp); raise_application_error( coordinate_conversion_error,'encryption error of pint:( ' || i_x_coord || ',' || i_y_coord || ').', TRUE ); end ENCRYPTION;----------具体如何在oracle10G中调用java存储过程,然后java存储过程再去调用webservice如下:
1:了解WSDL:http://www.ibm.com/developerworks/cn/webservices/ws-soapacc/
2:构建webservice:http://blog.csdn.net/kenshenz/article/details/6533177(我使用的是这个)或者http://www.cnblogs.com/hellojava/archive/2012/12/05/2803531.html
3:查看构建好webservice后myeclipse6.5自动生成的wsdl文件,先开启tomcat6,然后 点击下图红色标记处, 如下:
然后 会出现下方所示(下图:我是将窗体扩展了的,方便展示)。。。。。。。。。。注意:在下方的“Status”这一栏中可能出现的只是一个返回值5(即2+3得到的。),要想看到soap报文消息,则需要点击“Status”一栏的右上角的“Form”才行(具体可以双击下图,然后查看完整图像即可)。
然后,如上图所示,出现的soap的Request和Response消息结构出来了。在调用的时候直接使用即可。
4:在oracle中写javasource包如下:create or replace and compile java source named test asimport java.io.*;import java.net.*; public class test { public static String caService() throws Exception { String SOAPUrl = "http://10.2.28.31:9090/WebServiceProject/CalculatorPort?WSDL"; // Create the connection where we're going to send the file. URL url = new URL(SOAPUrl); URLConnection connection = url.openConnection(); HttpURLConnection httpConn = (HttpURLConnection) connection; // Open the input file. After we copy it to a byte array, we can see // how big it is so that we can set the HTTP Cotent-Length // property. (See complete e-mail below for more on this.) StringBuffer soapMessage = new StringBuffer(); //soapMessage.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); soapMessage.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:q0=\"http://ws.myeclipseide.com/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"); soapMessage.append("<soapenv:Body>"); soapMessage.append("<q0:add>"); soapMessage.append("<arg0>2</arg0> "); soapMessage.append("<arg1>3</arg1>"); soapMessage.append("</q0:add>"); soapMessage.append("</soapenv:Body>"); soapMessage.append("</soapenv:Envelope>"); byte[] b = soapMessage.toString().getBytes(); // Set the appropriate HTTP parameters. httpConn.setRequestProperty( "Content-Length", String.valueOf(b.length) ); httpConn.setRequestProperty("Content-Type","text/xml; charset=utf-8"); //httpConn.setRequestProperty("SOAPAction","add"); httpConn.setRequestMethod( "POST" ); httpConn.setDoOutput(true); httpConn.setDoInput(true); // Everything's set up; send the XML that was read in to b. OutputStream out=null; out = httpConn.getOutputStream(); out.write( b ); out.close(); try{ // Read the response and write it to standard out. InputStreamReader isr = new InputStreamReader(httpConn.getInputStream()); BufferedReader in = new BufferedReader(isr); String inputLine,inputLine2; while ((inputLine = in.readLine()) != null) break; in.close(); return inputLine;} catch(Exception e){return "no-getOutputStream:"+e.getMessage();} } }5:创建oracle函数,进行调用此存储过程,如下:
CREATE OR REPLACE FUNCTION teyy RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'test.caService() return java.lang.String';
6:调用oracle函数,展示webservice的结果:
select teyy() from dual调用结果如下:
<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body> <ns2:addResponse xmlns:ns2="http://ws.myeclipseide.com/"> <return>5</return> </ns2:addResponse></S:Body></S:Envelope>
--------------如果想使用socket进行和oracle通信进行数据传递也可以,如下:
--------服务器端代码:(C#作为服务端)
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.Net.Sockets;using System.Threading;using System.IO;namespace TCPServer{ class Program { static void Main(string[] args) { string strline = "", dir = ""; if (!File.Exists("cfg.txt")) { dir = Environment.CurrentDirectory+"\\dunk"; Directory.CreateDirectory(dir); } else { StreamReader sr = new StreamReader("cfg.txt"); while ("" != (strline = sr.ReadLine().Trim())) { string[] arr = strline.Split(new char[] { ',' }); string tag = arr[0].Trim().ToUpper(); if ("PATH" == tag) { dir = tag; if (!Directory.Exists(dir)) { continue; } break; } } sr.Close(); if (!Directory.Exists(dir)) { Console.WriteLine(dir + "输出目录不存在"); return; } } IPAddress local = IPAddress.Any; IPEndPoint iep = new IPEndPoint(local, 13000); Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); server.Bind(iep); server.Listen(20); while (true) { Socket client = server.Accept(); ClientThread newClient = new ClientThread(client,dir); Thread newThread = new Thread(new ThreadStart(newClient.ClientService)); newThread.Start(); } } } class ClientThread { public Socket client = null; public string dir = null; int i; public ClientThread(Socket k, string d) { client = k; dir = d; } public void ClientService() { string data = null; byte[] bytes = new byte[1024]; char[] ches = new char[1024]; Console.WriteLine("新用户的连接IP:{0}", (client.RemoteEndPoint as IPEndPoint).Address.ToString()); try { /*NetworkStream ns = new NetworkStream(client); //Encoding gbk = Encoding.GetEncoding("GBK"); Encoding gbk = Encoding.GetEncoding("utf-8"); StreamReader sr = new StreamReader(ns, gbk); data = sr.ReadLine(); bytes = System.Text.Encoding.GetEncoding("utf-8").GetBytes("服务器端已经收到数据:"); client.Send(bytes);*/ string path = string.Format("{0}\\{1}.xml",dir,DateTime.Now.ToString("yyyyMMddhhmmssfff")); using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8)) { while ((i = client.Receive(bytes)) != 0) { data = Encoding.GetEncoding("utf-8").GetString(bytes); sw.Write(data); if (data.IndexOf("<EOF>") > -1) { bytes = System.Text.Encoding.GetEncoding("utf-8").GetBytes("1"); client.Send(bytes); break; } } sw.Flush(); sw.Close(); } /*while ((i = client.Receive(bytes)) != 0) {d //将bytes写入到本地文件中 data=Encoding.GetEncoding("utf-8").GetString(bytes); //data = System.Text.Encoding.ASCII.GetString(bytes, 0, i); Console.WriteLine("收到客户端数据:{0}", data); bytes = System.Text.Encoding.GetEncoding("utf-8").GetBytes("服务器端已经收到数据:"); client.Send(bytes); }*/ } catch (System.Exception exp) { Console.WriteLine(exp.ToString()); } Console.WriteLine("用户IP:{0}断开连接", (client.RemoteEndPoint as IPEndPoint).Address.ToString()); client.Close(); } } }-------客户端代码:(oracle进行访问)
DECLARE c utl_tcp.connection; -- TCP/IP connection to the Web server ret_val pls_integer; len integer:=0; ix2 integer; response varchar2(4000); param1 varchar2(300);BEGIN c := utl_tcp.open_connection(remote_host => '10.2.11.96', remote_port => 13000, charset => 'AL32UTF8'); -- open connection /*ix2:=utl_tcp.write_raw(c, utl_raw.cast_to_raw(convert('Subject:' || 'Lot有效期过期提示' || utl_tcp.CRLF, 'ZHS16GBK')));*/ --param1:=CONVERT('的说法发', 'ZHS16GBK', 'AL32UTF8'); /*param1:=convert('大哥哦了kluayf','ZHS16GBK'); len := utl_tcp.write_line(c,param1);*/ --len := utl_tcp.write_line(c,'的说法发'); --ix2:=utl_tcp.write_text(c,'的说法发',length('的说法发')); len := utl_tcp.write_line(c,'打算干啥贡嘎温柔'); len := utl_tcp.write_line(c,'打算干啥贡嘎温柔'); len := utl_tcp.write_line(c,'打算干啥贡嘎温柔<EOF>'); response:=utl_tcp.get_line(c); dbms_output.put_line(response); utl_tcp.close_connection(c);END;-------其次还有其他oracle调用webservice的方法:参见文章“webservice笔记”。
- oracle笔记2
- oracle 笔记2 函数
- oracle学习笔记2
- oracle笔记2
- ORACLE学习笔记2
- oracle笔记2
- Oracle笔记2
- Oracle 数据库笔记2
- Oracle学习笔记2
- oracle笔记2
- Oracle笔记2
- Oracle笔记.2
- oracle 培训笔记[2]
- oracle学习笔记2
- oracle查询笔记(2)
- Oracle学习笔记(2)
- Oracle学习笔记2
- Oracle 学习笔记2
- sh和bash一些小差别
- 第五周项目二:分数类
- poj 2084 Game of Connections
- 管道PipedInputStream/PipedOutputStream类
- newlisp字符表示
- oracle笔记2
- 【我的应用系列】(二)自定义控件开发
- 金蝶BOS二次开发入门:常用类说明、代码调用过程
- HDU1710:Binary Tree Traversals
- Openwrt安装软件的方法
- 热泪盈眶...
- FS_S5PC100平台上Linux Camera驱动开发详解
- UART中断方式发送无反应
- delete this的使用