如何从Jython连接到数据库

时间:2009-01-22 11:32:25

标签: jdbc jython

我无法从我的Jython程序连接到数据库。纯Java程序可以连接,我可以从Jython连接到db,但只使用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驱动程序都在cachedir \ packages中有.pkc文件。

我应该设置什么才能获得数据库连接?

3 个答案:

答案 0 :(得分:8)

我会自己回答:

Jython 2.5b1中存在错误:Jython has problems to dynamically loading classes when installed on the boot classpath

如果我用--verify标志调用它,我就可以运行我的程序。

Jython 2.5b3中的Bug消失了

答案 1 :(得分:2)

经过一天的努力,我终于找到了解决方案。不要打扰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)

答案 2 :(得分:0)

我有同样的问题,无法使用--verify标志(jython抱怨未知的开关)。一旦我将OS X Leopard Java配置为使用1.6虚拟机而不是1.5,这个问题就会神奇地消失。