我正在尝试使用 Python 对我们的 JDBC 驱动程序进行一些测试。
最初弄清楚 JPype,我最终设法连接驱动程序并像这样执行选择查询(复制一个通用片段):
from __future__ import print_function
from jpype import *
#Start JVM, attach the driver jar
jvmpath = 'path/to/libjvm.so'
classpath = 'path/to/JDBC_Driver.jar'
startJVM(jvmpath, '-ea', '-Djava.class.path=' + classpath)
# Magic line 1
driver = JPackage('sql').Our_Driver
# Initiating a connection via DriverManager()
jdbc_uri = 'jdbc:our_database://localhost:port/database','user', 'passwd')
conn = java.sql.DriverManager.getConnection(jdbc_uri)
# Executing a statement
stmt = conn.createStatement()
rs = stmt.executeQuery ('select top 10 * from some_table')
# Extracting results
while rs.next():
''' Magic #2 - rs.getStuff() only works inside a while loop '''
print (rs.getString('col_name'))
但是,我未能批量插入,这是我想要测试的。即使executeBatch()
返回一个 jpype int[],它应该表明插入成功,表也没有更新。
然后我决定尝试 py4j。
我的困境 - 我很难弄清楚如何做与上述相同的事情。据说py4j不会自己启动JVM,Java代码需要预先安排一个GatewayServer(),所以我不确定它是否可行。
另一方面,有一个名为py4jdbc的库可以做到这一点。
我修改了 dbapi.py 代码,但不太了解流程,而且几乎被卡住了。
如果有人了解如何使用 py4j 从 .jar 文件加载 JDBC 驱动程序并能指出正确的方向,我将不胜感激。