Мне было приятно написать расширение 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 загрузчика «платформа») - Нет
Может быть, это сообщение кому-то покажется более явным?