首页 > 解决方案 > 使用 PLSQL 执行 jar 文件

问题描述

我有一个独立的 java 程序,它从 REST 端点读取数据并将数据插入到服务器的表中。

   package com.test.main;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.json.JSONObject;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.test.connectdb.ConDataBase;
import com.test.entity.User;

public class Main {

    public static void main(String[] args)  {

        try {


            URL url = new URL("https://jsonplaceholder.typicode.com/todos/");
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            conn.setRequestMethod("GET");

            conn.connect();
            System.out.println("DONE2");

            int responsecode = conn.getResponseCode();

            String inline = "";
            if(responsecode == 200){
                Scanner sc = new Scanner(url.openStream());
                while(sc.hasNext())
                {
                inline+=sc.nextLine();
                }
                System.out.println("JSON data in string format");
                System.out.println(inline);
                sc.close();

            }else{
                throw new RuntimeException("HttpResponseCode:" +responsecode);

            }

              //-----------------------------------------------------------------------
                Connection con = new ConDataBase().buildConnection();

                User[] userList = new Gson().fromJson(inline, User[].class);
                System.out.println(userList.length);
                for (User user : userList) {
                   //System.out.println(user.getCompleted());
                     String insert_date = "insert into XX_USER "
                                + "(USER_ID)"
                                + "VALUES"
                                +"('"+user.getCompleted()+"')";


                    try {

                        PreparedStatement ps_data = con.prepareStatement(insert_date);
                        ps_data.executeUpdate();
                        con.commit();
                        System.out.println("Successfully Inserted");
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        System.out.println(e.getMessage());
                    }
                }


        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }



        }

}

我需要使用 PLSQL 运行这个 jar 文件。这意味着我已将此 jar 文件转移到 Linux 服务器路径(/home/rest)中。Oracle 数据库安装在服务器中。我需要使用 PLSQL 运行这个 jar。可能吗?

标签: javaoracle

解决方案


使用该LOADJAVA实用程序将 jar 文件和所有其他 jar 依赖项加载到 Oracle 的内部类路径(这与操作系统的类路径不同)。

您可能还希望将代码更改为不带参数的静态方法(而不是main使用字符串数组参数),因为它会使调用该方法更加简单。

// package and imports
public class Main {
  public static void yourMethodName()  {
    // your code
  }
}

然后你需要使用类似的东西:

CREATE PROCEDURE get_todos_from_rest_service AS
  LANGUAGE JAVA NAME 'com.test.main.Main.yourMethodName()';

要围绕 java 方法创建一个过程包装器,然后您可以在 PL/SQL 中调用它。

可以在此处找到更详细的示例:Database Java Developer's Guide - Java Stored Procedures Application Example


推荐阅读