ПРОЦЕДУРА ВНЕШНЕГО ХРАНЕНИЯ DB2 (JAVA) - PullRequest
1 голос
/ 04 августа 2020

Я попытался вызвать файл jar java, у которого есть метод, который принимает String и boolean в качестве входных параметров.

Хранимая процедура выглядит следующим образом:

CREATE PROCEDURE TBF_STG.PROC( IN in1 VARCHAR(25), OUT out1 BOOLEAN )
  LANGUAGE java
  PARAMETER STYLE java 
  DYNAMIC RESULT SETS 1
  FENCED 
  EXTERNAL NAME 'name1:connection.Connect.javastp'

Я вызываю процедуру, как показано ниже:

CALL TBF_STG.PROC('xyz', ?) 

Класс java выглядит следующим образом:

public class Connect {
    static Connection con = null;
    public static void javastp( String name,
            Boolean outparm, 
            ResultSet[] rs 
            )
                    throws SQLException
    {
        Connection con = DriverManager.getConnection( "jdbc:default:connection" );
        PreparedStatement stmt = null;
        String sql = "SELECT NAME FROM TBF_STG.TEST WHERE NAME = ?";

        //Prepare the query with the value of name  
        stmt = con.prepareStatement( sql );
        stmt.setString( 1, name );

        //Execute query and set output parm
        rs[0] = stmt.executeQuery();
        outparm = true;

        //Close open resources
        if (stmt != null) stmt.close();
        if (con != null) con.close();  

        return;
    }
}

Когда я меняю логический параметр на String, он работает нормально, но мне кажется, чтобы он работал с логическим параметром.

Я получаю следующую ошибку в dbeaver:

SQL Error [42724]: Java stored procedure or user-defined function "TBF_STG.PROC", specific name "SQL200804144354782" could not call Java method "javastp", signature "(Ljava/lang/String".. SQLCODE=-4306, SQLSTATE=42724, DRIVER=4.8.86

Может кто-нибудь указать мне правильное направление, поскольку я новичок в DB2.

1 Ответ

0 голосов
/ 04 августа 2020

Мне любопытно, как это вообще может работать с параметром String так, как вы указали. Стиль параметра JAVA процедуры :

SQL -аргументы Соответствует списку входных параметров в операторе CREATE PROCEDURE. Параметры режима OUT или INOUT передаются как одноэлементные массивы . Для каждого набора результатов, указанного в предложении DYNAMI C RESULT SETS оператора CREATE PROCEDURE, одноэлементный массив типа ResultSet добавляется к списку параметров.

Поддерживается SQL типы данных в Java подпрограммах :

| SQL Column Type | Java Data Type |
+-----------------+----------------+
| BOOLEAN         | boolean        |

Вы должны использовать boolean примитивный тип, а не java.lang.Boolean класс. Итак, попробуйте:

public static void javastp( String name,
        boolean[] outparm, 
        ResultSet[] rs 
        )
....
    //Execute query and set output parm
    rs[0] = stmt.executeQuery();
    outparm[0] = true;
...