python驱动程序开发_从Python连接和测试JDBC驱动程序

I'm trying to do some testing on our JDBC driver using Python.

Initially figuring out JPype, I eventually managed to connect the driver and execute select queries like so (reproducing a generalized snippet):

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'))

However, I've failed to to batch inserts, which is what I wanted to test. Even when executeBatch() returned a jpype int[], which should indicate a successful insert, the table was not updated.

I then decided to try out py4j.

My plight - I'm having a hard time figuring out how to do the same thing as above. It is said py4j does not start a JVM on its own, and that the Java code needs to be prearranged with a GatewayServer(), so I'm not sure it's even feasible.

On the other hand, there's a library named py4jdbc that does just that.

I tinkered through the dbapi.py code but didn't quite understand the flow, and am pretty much jammed.

If anyone understands how to load a JDBC driver from a .jar file with py4j and can point me in the right direction, I'd be much grateful.

解决方案

In py4j, with your respective JDBC uri:

from py4j.JavaGateway import java_gateway

# Open JVM interface with the JDBC Jar

jdbc_jar_path = '/path/to/jdbc_driver.jar'

gateway = java_gateway(classpath=jdbc_jar_path)

# Load the JDBC Jar

jdbc_class = "com.vendor.VendorJDBC"

gateway.jvm.class.forName(jdbc_class)

# Initiate connection

jdbc_uri = "jdbc://vendor:192.168.x.y:zzzz;..."

con = gateway.jvm.DriverManager.getConnection(jdbc_uri)

# Run a query

sql = "select this from that"

stmt = con.createStatement(sql)

rs = stmt.executeQuery()

while rs.next():

rs.getInt(1)

rs.getFloat(2)

.

.

rs.close()

stmt.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值