Я пытаюсь передать массив типа строки в качестве входных данных для сохранения процедуры из jdbc.
Написал код ниже, и получение «Метод createStruct» не поддерживается в соединении.
Таблица:
create table wspout.test (username varchar(100),location varchar(100),status varchar(100));
Тип строки:
CREATE OR REPLACE TYPE TEST_ROW AS ROW ANCHOR ROW OF test;
Тип строки массива:
CREATE OR REPLACE TYPE TEST_ROW_ARRAY AS TEST_ROW ARRAY[];
Имя процедуры хранения:
CREATE OR REPLACE PROCEDURE TEST_PROC (IN p_test_row_array TEST_ROW_ARRAY)
P1: BEGIN
DECLARE i INTEGER;
DECLARE v_test_row TEST_ROW;
SET i = 1;
WHILE i < CARDINALITY(p_test_row_array) DO
SET v_test_row = p_test_row_array[i];
insert into test values(v_test_row.username,v_test_row.location,v_test_row.status);
set i = i + 1;
END WHILE;
END P1@
my javaкласс: отсюда вызов процедуры магазина
package Test;
import java.sql.Array;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Struct;
import java.util.ArrayList;
import java.util.List;
public class TestJdbc{
public static void main(String[] args) {
try {
Class.forName("com.ibm.db2.jcc.DB2Driver");
}
catch (ClassNotFoundException e) {
e.printStackTrace();
return;
}
System.out.println("DB2 driver is loaded successfully");
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DriverManager.getConnection("jdbc:db2://localhost:40000/db2inst1","test","test123");
if (conn != null)
{
System.out.println("DB2 Database Connected");
List<Object> test_row_List = new ArrayList<>();
Struct test_row[] = new java.sql.Struct[3];
Array test_row_arr;
test_row[0] = conn.createStruct("TEST_ROW", new Object[] { "user1","Location1", "status1"});
test_row_List.add(test_row[0]);
test_row[1] = conn.createStruct("TEST_ROW", new Object[] { "user2","Location2", "status2"});
test_row_List.add(test_row[1]);
test_row[2] = conn.createStruct("TEST_ROW", new Object[] { "user3","Location3", "status4"});
test_row_List.add(test_row[2]);
test_row_arr = conn.createArrayOf("TEST_ROW", test_row_List.toArray());
System.out.println("Array value" + test_row_arr);
pstmt = conn.prepareCall("CALL TEST_PROC(?)");
pstmt.setArray(1, test_row_arr);
pstmt.execute();
}
} catch (SQLException e) {
System.out.println("DB2 Database connection e");
e.printStackTrace();
return;
}
}
во время работы я получаю ниже исключения.
*DB2 driver is loaded successfully
DB2 Database Connected
DB2 Database connection e
com.ibm.db2.jcc.am.SqlFeatureNotSupportedException: [jcc][t4][10181][12052][4.11.69] Method createStruct is not supported. ERRORCODE=-4450, SQLSTATE=0A504*
at com.ibm.db2.jcc.am.gd.e(gd.java:605)
at com.ibm.db2.jcc.am.gd.c(gd.java:625)
at com.ibm.db2.jcc.am.lb.createStruct(lb.java:6761)
at Test.TestJdbc.main(TestJdbc.java:38)