Вызов функции HSQL из JDBC

#java #stored-procedures #jdbc #hsqldb

#java #хранимые процедуры #jdbc #hsqldb

Вопрос:

У меня есть следующая функция хранимой процедуры в HSQLDB 2.3.4 прямо из документации

 CREATE FUNCTION an_hour_before (t TIMESTAMP)
   RETURNS TIMESTAMP
   RETURN t - 1 HOUR;
/;
  

Я пытаюсь вызвать функцию с

 try (Connection connection = this.dataSource.getConnection()) {
    try (CallableStatement call = connection.prepareCall("{ ? = call an_hour_before(?)}")) {
        ...
    }
}
  

И я получаю NullPointerException следующую трассировку стека

 java.lang.NullPointerException
    at org.hsqldb.StatementProcedure.getParametersMetaData(Unknown Source)
    at org.hsqldb.result.Result.newPrepareResponse(Unknown Source)
    at org.hsqldb.Session.execute(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
    at org.hsqldb.jdbc.JDBCCallableStatement.<init>(Unknown Source)
    at org.hsqldb.jdbc.JDBCConnection.prepareCall(Unknown Source)
    at com.acme.HsqlTest.test(HsqlTest.java:42)
    ...
  

Комментарии:

1. this.dataSource.getConnection() Возвращается ли null ?

2. @GordThompson нет NullPointerException , это происходит изнутри реализации HSQLDB #prepareCall

Ответ №1:

Это известная проблема с HSQLDB 2.3.4, и она была исправлена в репозитории SVN. Используйте более раннюю версию или скомпилируйте jar из /базового / магистрального кода.

Комментарии:

1. действительно, понижение версии до 2.3.3 устраняет проблему. Есть ли у вас ETA на 2.3.5?