Использование UCanAccess в сценарии Jython, вызываемом из командной строки

ОС: Windows7, Jython2.7.0FR («Финальный выпуск»)

Попытка использовать решение Горда Томпсона с Jython: Управление базой данных Access из Java без ODBC

Я могу заставить модуль Ucanaccess работать в Eclipse, но не тогда, когда я пытаюсь запустить его из интерфейса командной строки.

# -*- coding: utf-8 -*-
import java, sys
jars_dir = 'D:\\sysadmin\\Resources\\Java jar files\\'
sys.path.append( jars_dir + 'commons-lang-2.6.jar' )
sys.path.append( jars_dir + 'commons-logging-1.2.jar' )
sys.path.append( jars_dir + 'hsqldb.jar' )
sys.path.append( jars_dir + 'jackcess-2.1.2.jar' )
sys.path.append( jars_dir + 'ucanaccess-3.0.2.jar' )
import net.ucanaccess.jdbc.UcanaccessDriver
import net.ucanaccess
print( '# appear to have imported UcanaccessDriver' )
conn = java.sql.DriverManager.getConnection( 'jdbc:ucanaccess://D:/TESTING.mdb' )
print( '# conn OK...') 

Это выводит на печать "# conn OK", когда я запускаю это в Eclipse. Когда я запускаю его из интерфейса командной строки, он выводит сообщение «# похоже, импортировано ...», но затем выдается ошибка:

введите здесь описание изображения

(NB, этот вывод был скопирован в Eclipse: это действительно запуск CLI)

Кто-нибудь знает, почему я могу получить сообщение «Нет подходящего драйвера ...»? NB Я пробовал различные перестановки с обратной косой чертой вместо прямой в getConnection ... безрезультатно.

Кстати, если это актуально, это отрывок из файла .bat, который я использую для запуска этой штуки:

cd "%SOFTWARE_PROJECTS%\workspace\Jython scratchpad\src\jython_scratchpad_root"

REM this is probably irrelevant and doesn't seem to work with Jython2.7.0FR.  The jars are being loaded by sys.path.append, obviously
set CLASSPATH=.;"%SYSADMIN%\resources\java jar files/*"

D:\apps\jython2.7.0\bin\jython loading_test.py 

person mike rodent    schedule 30.10.2015    source источник
comment
URL-адрес jdbc правильный, какая версия java работает?   -  person jamadei    schedule 30.10.2015
comment
Благодарю. Пожалуйста, простите меня, если я не совсем понимаю, как ответить на ваш вопрос: ОС JAVA_HOME Env Var указывает на jdk1.7.0_79. Windows PATH Env Var включает jdk1.7.0_79 \ jre \ bin, а что касается Eclipse, я немного озадачен тем, как он ищет свою JRE при запуске проекта Jython, но в разделе «Настройки» - ›Java -› Установлено. JRE, опять же, указывает на jdk1.7.0_79. Вы предполагаете, что я действительно обязан перейти на Java 8 ???   -  person mike rodent    schedule 30.10.2015
comment
В вашем пакетном файле попробуйте установить CLASSPATH для включения отдельных файлов JAR. Я только что попробовал это, и у меня это сработало.   -  person Gord Thompson    schedule 30.10.2015
comment
@GordThompson, спасибо. Я уже пробовал эту и многие другие перестановки, но на самом деле сегодня я опубликовал еще один вопрос, связанный с загрузкой jar-файлов в Jython 2.7.0FR (финальная версия): stackoverflow.com/questions/33434083/ . Я заметил, что в вашем фрагменте вы используете Jython 2.5.3. Вы пробовали использовать Ucanaccess с 2.7.0FR? PS тот факт, что после использования динамической загрузки (sys.path.append ...) я получаю сообщение «# кажется, импортировано ...», похоже, показывает, что я загрузил эти банки.   -  person mike rodent    schedule 30.10.2015
comment
Нет, я просто хотел узнать, была ли это java6. Но это не так.   -  person jamadei    schedule 30.10.2015


Ответы (1)


Похоже, что sys.path больше связано с переменной среды PATH, чем с переменной среды CLASSPATH. Следующие два метода были протестированы и работают с Jython 2.7.0 для запуска сценария под названием «jyTest.py» из командной строки Windows.

Метод 1. Задайте CLASSPATH из командного файла (или сценария оболочки) перед запуском Jython

SET CLASSPATH=C:/Users/Public/Downloads/UCanAccess/ucanaccess-3.0.2.jar;C:/Users/Public/Downloads/UCanAccess/lib/commons-lang-2.6.jar;C:/Users/Public/Downloads/UCanAccess/lib/commons-logging-1.1.1.jar;C:/Users/Public/Downloads/UCanAccess/lib/hsqldb.jar;C:/Users/Public/Downloads/UCanAccess/lib/jackcess-2.1.2.jar;.  
c:\jython2.7.0\bin\jython jyTest.py

(Для Linux и др. Это будет export CLASSPATH ... и разделители двоеточия вместо точки с запятой.)

Метод 2: используйте -J-cp для установки CLASSPATH при вызове Jython

c:\jython2.7.0\bin\jython -J-cp C:/Users/Public/Downloads/UCanAccess/ucanaccess-3.0.2.jar;C:/Users/Public/Downloads/UCanAccess/lib/commons-lang-2.6.jar;C:/Users/Public/Downloads/UCanAccess/lib/commons-logging-1.1.1.jar;C:/Users/Public/Downloads/UCanAccess/lib/hsqldb.jar;C:/Users/Public/Downloads/UCanAccess/lib/jackcess-2.1.2.jar;. jyTest.py

(Опять же, Linux и друзьям потребовалось бы, чтобы записи -cp были разделены двоеточиями вместо точки с запятой.)

person Gord Thompson    schedule 30.10.2015
comment
Спасибо ... обнаружил проблему: я не осознавал, что jar-файл ucanaccess находится в каталоге, тогда как остальные 4 jar-файла находятся в подкаталоге с именем lib. Также нашли, частично из-за вашего ответа здесь, ответ на общие проблемы, которые у меня были с загрузкой банок с 2.7.0FR: косые черты и пути без пробелов ... (похоже, это изменение относительно 2.7b1). - person mike rodent; 31.10.2015