В моем классе я создал простой метод ниже. Этот класс также имеет основную функцию. Я вызываю getRes() из моей хранимой процедуры DB2.
public static void getRes() {
System.out.println("Start");
try{
Class.forName("com.ibm.db2.jcc.DB2Driver");
con = DriverManager.getConnection(
"jdbc:db2://url:50003/DB","user","Password");
Statement stmt=con.createStatement();
stmt.executeUpdate("INSERT INTO schema.TEST(ID) VALUES(1)");
} catch(Exception e){
System.out.println(e);
} finally {
if(con!=null) {
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
System.out.println("End");
}
Я вызываю эту функцию из хранимой процедуры DB2.
CREATE OR REPLACE PROCEDURE schema.sp_TEST1()
FENCED
MODIFIES SQL DATA
EXTERNAL NAME 'connection.Connect.getRes()'
LANGUAGE JAVA
PARAMETER STYLE JAVA;
call schema.sp_TEST1()
Эта хранимая процедура успешно выполняется. Но я сомневаюсь, что мой метод выполняется или нет. Потому что после выполнения в тестовой таблице нет записи.
Ниже приведены шаги, которые я выполнил для развертывания этого файла jar. 1. Экспортировал банку из Eclipse. Проверено, работает ли банка. 2. Выполнен вызов sqlj.install_jar(). Проверена установка в SYSIBM.SYSJARCONTENTS. 3. УСТАНОВИТЕ путь класса на сервере db export CLASSPATH=/home/db2inse5/sqllib/function/jar/SchemaName/JarName.jar.
Ожидаемый результат - это запись, сделанная в таблице test. Но я не получаю ожидаемого результата, хотя выполнение sp прошло успешно.
Updated-20200423 Я попытался зафиксировать часть подключения к базе данных и заменил ее созданием файла на сервере БД. Это сработало, поэтому я могу подтвердить, что jar был правильно вызван из SP, и файл jar работал правильно. Но вышеуказанная часть еще не решена
public static void getRes() {
System.out.println("Start");
File myObj = new File("/opt/filename.txt");
myObj.createNewFile();
}