如何从Jython连接到数据库

问题描述:

我无法从Jython程序连接到数据库。纯Java程序可以连接,我可以从Jython连接到数据库,但只能使用JDBC-ODBC桥:“sun.jdbc.odbc.JdbcOdbcDriver”。如果我使用本机JDBC驱动程序,则我的程序会因“找不到驱动程序”异常而失败如何从Jython连接到数据库

代码:

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文件。

我应该设置什么来获取数据库连接?

我会回答自己:

有臭虫的Jython 2.5b1:Jython has problems to dynamically loading classes when installed on the boot classpath

我能够运行我的程序,如果我用--verify标志调用它。

的Bug的Jython 2.5b3

+0

One Up for learning! – Blauohr 2009-01-27 12:21:13

消失我有同样的问题,不能用--verify标志(Jython的抱怨未知开关)。只要我将OS X Leopard Java配置为使用1.6虚拟机而不是1.5,该问题就神奇地消失了。

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