Как подключиться к базе данных из Jython - PullRequest
1 голос
/ 22 января 2009

Я не могу подключиться к базе данных из моей программы Jython. Чистые Java-программы могут подключаться, и я могу подключиться к БД из Jython, но только с помощью моста JDBC-ODBC: "sun.jdbc.odbc.JdbcOdbcDriver". Если я использую собственный драйвер JDBC, моя программа завершается с ошибкой «драйвер не найден».

Код:

import sys
from com.ziclix.python.sql import zxJDBC

connection1 = zxJDBC.connect('jdbc:odbc:test_odbc', 'postgres', 'postgres', 'sun.jdbc.odbc.JdbcOdbcDriver')
print "JDBC:ODBC connection set"
connection2 = zxJDBC.connect('jdbc:postgresql://127.0.0.1/test?stringtype=unspecified', 'postgres', 'postgres', 'org.postgresql.Driver')
print "JDBC native connection set"

Выход:

C:\tools\pyscripts\scripts\db_examples>jython --version
Jython 2.5b1 (trunk:5903:5905, Jan 9 2009, 16:01:29)
[Java HotSpot(TM) Client VM (Sun Microsystems Inc.)] on java1.6.0_11

C:\tools\pyscripts\scripts\db_examples>jython pg_test.py
JDBC:ODBC connection set
Traceback (most recent call last):
  File "pg_test.py", line 6, in <module>
    connection2 = zxJDBC.connect('jdbc:postgresql://127.0.0.1/test?stringtype=un
specified', 'postgres', 'postgres', 'org.postgresql.Driver')
zxJDBC.DatabaseError: driver [org.postgresql.Driver] not found

Я думаю, что мой CLASSPATH установлен правильно, в то время как нативные Java-программы могут подключаться к этой базе данных с помощью нативного драйвера. Я обнаружил, что все драйверы JDBC имеют файлы .pkc в cachedir \ packages.

Что я должен установить, чтобы получить соединение с базой данных?

Ответы [ 3 ]

8 голосов
/ 23 января 2009

Я отвечу себе:

В Jython 2.5b1 была ошибка: У Jython есть проблемы с динамической загрузкой классов при установке в загрузочный путь к классам

Я смог запустить свою программу, если вызвал ее с флагом --verify.

Ошибка исчезла в Jython 2.5b3

2 голосов
/ 25 июля 2013

Поработав с этим в течение дня, я наконец-то нашел решение. Не беспокойтесь о zxJDBC, Class.forName, DriverManager и т. Д., Просто создайте экземпляр драйвера напрямую:

import os
import sys
from java.util import Properties

# add the jar to your classpath, then import it
sys.path.append('/tmp/postgresql-8.4-701.jdbc4.jar')
import org.postgresql.Driver as Driver

props = Properties()
props.put('user', 'u')
props.put('password', 'p')

conn = Driver().connect('jdbc:postgresql://127.0.0.1', props)
0 голосов
/ 25 марта 2009

У меня была та же проблема, и я не смог использовать флаг --verify (jython пожаловался на неизвестный ключ). Проблема волшебным образом исчезла, как только я настроил свою OS X Leopard Java на использование виртуальной машины 1.6 вместо 1.5.

...