У меня есть отдельная 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();
}
}
}
Мне нужно запустить этот файл jar с помощью PLSQL. Это означает, что я перенес этот файл jar в путь к серверу Linux (/ home / rest). База данных Oracle установлена на сервере. Мне нужно запустить эту банку с помощью PLSQL. Является ли это возможным?
Я пробовал это, но он не поддерживает другие библиотеки Java, такие как JSON, import java.net.HttpURLConnection; import com.google.gson.Gson;
Вы пробовали создать его как Исходный объект Java?




Используйте Утилита 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.
Более подробный пример можно найти здесь: Руководство разработчика Java для баз данных - пример приложения с хранимыми процедурами Java
Взгляните на этот документ docs.oracle.com/cd/B28359_01/java.111/b31225/…