oracle数据库调用外部https接口

4 篇文章 0 订阅

1.在数据库执行下面脚本创建java类

create or replace and compile java source named cux_http_utl as
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

import oracle.jdbc.OracleConnection;
import oracle.jdbc.OracleDriver;
import java.io.Writer;
import java.sql.SQLException;
import java.net.URL;

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import oracle.sql.CLOB;


public class CUX_HTTP_UTL {
    static class TrustAllTrustManager implements TrustManager, X509TrustManager {

        @Override
        public void checkClientTrusted(X509Certificate[] x509Certificate, String string) throws CertificateException {
            return;
        }

        @Override
        public void checkServerTrusted(X509Certificate[] x509Certificate, String string) throws CertificateException {
            return;
        }

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    }
    static TrustManager[] tm = { new TrustAllTrustManager() };
   private static OracleConnection getConnection() throws SQLException {
        return (OracleConnection) new OracleDriver().defaultConnection();
    }
     private static CLOB stringToClob(String input) throws Exception {
        OracleConnection conn = null;
        Writer writer = null;
        CLOB clob = null;
        try {
            conn = getConnection();
            clob = CLOB.createTemporary(conn, false, CLOB.DURATION_SESSION);
            writer = clob.setCharacterStream(0L);
            writer.write(input);
            return clob;
        } catch (Exception e) {
            throw e;
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (Exception e) {

                }
            }

            if (clob != null) {
                try {
                    clob.close();
                } catch (Exception e) {

                }
            }

            if (conn != null) {
                try {
                    conn.close();
                } catch (Exception e) {

                }
            }
        }
    }
    
     private static String clobToString(CLOB input) throws Exception {
        BufferedReader bufferedReader = null;
        StringBuffer buf = new StringBuffer("");
        String line = "";
        try {
            bufferedReader = new BufferedReader(input.getCharacterStream());
            while ((line = bufferedReader.readLine()) != null) {
                buf.append(line);
            }
            return buf.toString();
        } catch (Exception e) {
            throw e;
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (Exception e) {
                }
            }
        }
    }
    public static CLOB httpsRequest(String requestUrl, String requestMethod, String contentType,
                                    CLOB inputClob) throws Exception {
        String str = "";
        //  try {
        String inputStr = "";
        if (inputClob != null) 
          inputStr = clobToString(inputClob);
        StringBuffer buffer = null;
        InputStream is = null;
        InputStreamReader isr = null;
        BufferedReader br = null;

        HostnameVerifier hv = new HostnameVerifier() {
            @Override
            public boolean verify(String urlHostName, SSLSession session) {
                return true;
            }
        };

        SSLContext sslContext = SSLContext.getInstance("SSL");
        sslContext.init(null, tm, null);
        HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

        HttpsURLConnection.setDefaultHostnameVerifier(hv);
        URL url = new URL(requestUrl);
        HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setUseCaches(false);
        conn.setRequestMethod(requestMethod);
        if (contentType != null) {
            conn.setRequestProperty("Content-Type", contentType);
        }
        conn.connect();
        if (null != inputStr) {
            OutputStream os = conn.getOutputStream();
            os.write(inputStr.getBytes("utf-8"));
            os.close();
        }
        if (conn.getResponseCode() != 200) {
            throw new RuntimeException("HTTP GET Request Failed with Error code : " + conn.getResponseCode());
        }
        is = conn.getInputStream();
        isr = new InputStreamReader(is, "utf-8");
        br = new BufferedReader(isr);
        buffer = new StringBuffer();
        String line = null;
        while ((line = br.readLine()) != null) {
            buffer.append(line);
        }
        br.close();
        conn.disconnect();
        if (buffer != null & !"".equals(buffer.toString()))
            str = buffer.toString();
        else
            str = "1";
        CLOB clob; 
        clob =stringToClob( str);
        return clob;
        /*  } catch (Exception e) {
      e.printStackTrace();
      return "ERROR:" + e.getMessage();
    } */
    }
 
}

2.在数据库创建函数

create or replace function cux_https_request(requestUrl    VARCHAR2,
                                             requestMethod VARCHAR2,
                                             contentType   VARCHAR2,
                                             inputClob     Clob)
  return Clob as
  language java name 'CUX_HTTP_UTL.httpsRequest(java.lang.String,java.lang.String,java.lang.String,oracle.sql.CLOB ) return oracle.sql.CLOB';

3.调用函数即可


```sql
 select Cux_https_request(requesturl    => 'https://opencs.517la.com/api/token/getToken',
                            requestmethod => 'POST',
                            contenttype   => 'application/json',
                            inputclob     => '{
    "data": {
      "appid": "string",
      "appsecret": "string"
    },
    "requestid": "20180616112955089",
    "version": "0.0.1"
  }')
    from dual;

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的Java代码示例,用于连接Oracle数据库并执行查询: ```java import java.sql.*; public class OracleConnection { public static void main(String[] args) { String url = "jdbc:oracle:thin:@//hostname:port/service_name"; String user = "username"; String password = "password"; String query = "SELECT * FROM table_name"; try { // Establish a connection to the Oracle database Connection conn = DriverManager.getConnection(url, user, password); // Create a statement object to execute the query Statement stmt = conn.createStatement(); // Execute the query and get the result set ResultSet rs = stmt.executeQuery(query); // Loop through the result set and print each row while (rs.next()) { System.out.println(rs.getString("column_name")); } // Close the database connection rs.close(); stmt.close(); conn.close(); } catch (SQLException e) { System.out.println("Error: " + e.getMessage()); } } } ``` 在上面的代码中,我们首先定义了一个包含数据库连接信息和查询语句的变量。`url` 变量包含了数据库的连接信息,其中的 `hostname` 是数据库服务器的主机名或IP地址,`port` 是数据库服务器的端口号,`service_name` 是要连接的数据库的服务名。`user` 和 `password` 变量分别是数据库用户名和密码。`query` 变量是要执行的查询语句。 在 `try` 块中,我们首先使用 `DriverManager.getConnection()` 方法来建立与 Oracle 数据库的连接。然后,我们创建一个 `Statement` 对象,并使用 `executeQuery()` 方法来执行查询语句。查询结果将保存在一个 `ResultSet` 对象中,我们可以通过调用 `next()` 方法来遍历每一行数据,并使用 `getString()` 方法来获取指定列的值。 最后,我们关闭了 `ResultSet`、`Statement` 和 `Connection` 对象,以释放资源并确保数据库连接被正确关闭。如果在连接或执行查询的过程中发生了异常,我们将在 `catch` 块中捕获并输出错误消息。 你可以将上面的代码修改为一个方法,然后将其暴露给外部调用。需要注意的是,为了安全起见,你应该对外部输入的参数进行验证和过滤,以避免 SQL 注入等安全问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值