hsqldb вызывает java .lang.IncompatibleClassChangeError при выполнении Open / Libre Office Uno XPreparedStatement.executeQuery () - PullRequest
0 голосов
/ 02 февраля 2020

Мне было приятно написать расширение Open / Libre Office Python gContactOOo , позволяющее восстановить эти контакты Google в Open / Libre Office. Для этого я написал драйвер , который загружается при вызове протокола: sdb c: google: people и возвращает интерфейс com.sun.star.sdb c .XConnection

Чтобы это работало, я должен использовать оболочку Python вокруг XConnection, возвращаемого драйвером, и должен переписать метод XPreparedStatement.executeQuery (), например:

def executeQuery(self):
   # TODO: cannot use: result = self.statement.executeQuery()
   # TODO: it trow a: java.lang.IncompatibleClassChangeError
   # TODO: fallback to: self.statement.execute()
   try:
       print("Connection.PreparedStatement.executeQuery() hack 1")
       return self.statement.executeQuery()
   except:
       pass
   try:
       print("Connection.PreparedStatement.executeQuery() hack 2")
       if self.statement.execute():
           return self.statement.getResultSet()
   except:
       pass
   try:
       print("Connection.PreparedStatement.executeQuery() hack 3")
       statement = self.connection.connection.createStatement()
       return statement.executeQuery(self.sql)
   except:
       pass
   print("Connection.PreparedStatement.executeQuery() hack 4")
raise SQLException()

Я использую Hsqldb версии 2.5.0 (для управления версиями), но у меня та же проблема с версией 2.4

Эта проблема превышает мои навыки, спасибо за вашу помощь ...

Редактировать

Если я использую openjdk-11-jre-headless для версии amd64 (вместо Oracle JRE 1.8.0_201), проблема заключается в то же самое, но сообщение об ошибке изменяется:

uno.com.sun.star.sdb c .SQLException: класс приемника org.hsqldb.jdb c .JDBCPreparedStatement не реализует интерфейс java. sql .CallableStatement, определяющий вызываемый метод (org.hsqldb.jdb c .JDBCPreparedStatement находится в безымянном модуле загрузчика java. net .URLClassLoader @ 2e7290b4; java. sql .CallableStatement находится в модуле java. sql загрузчика «платформа») PreparedStatement.executeQuery () ОШИБКА: класс приемника org.hsqldb.jdb c .JDBCPreparedStatement не реализует интерфейс java. sql .CallableStatement, определяющий вызываемый метод (org.hsqldb.jdb c .JDBCPreparedStatement находится в неназванном модуле загрузчика java. net .URLClassLoader @ 2e7290b4; java. sql .CallableStatement находится в модуле java. sql загрузчика «платформа») - Нет

Может быть, это сообщение кому-то покажется более явным?

...