java - 覆盆子中 jaydebeapi 的问题类路径

标签 java python oracle raspberry-pi jaydebeapi

我尝试从 Raspberry pi 用 python 发出 Oracle 请求。问题是:

“Oracle不支持Raspberry Pi使用的ARM CPU架构。您下载并解压了Oracle Instant Client,但它实际上无法运行。如果没有Oracle客户端库,cx_oracle将无法工作,也不会通用 Python ODBC 连接器。”

信息:

Apache Maven 3.2.5 
Maven home: /opt/apache-maven-3.2.5
Java version: 1.8.0_212, vendor: Raspbian
Java home: /usr/lib/jvm/java-8-openjdk-armhf/jre
Default locale: fr_FR, platform encoding: UTF-8
OS name: "linux", version: "4.19.42-v7+", arch: "arm", family: "unix"

ojdbc6.jar 的位置是:

/home/pi/ojdbc6.jar

我需要 python,所以安装了 JPype 和 JayDeBeApi,我在 jupyter notebopok 上写了这个:

import jaydebeapi
import jpype
import os
conn= jaydebeapi.connect('oracle.jdbc.driver.OracleDriver',
'[admin]/[root]@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=helloworld.com)(PORT=1521))(CONNECT_DATA=(SID=hello42)))',
'/home/pi/ojdbc6.jar')

但是我有这个错误:

---------------------------------------------------------------------------
java.lang.RuntimeExceptionPyRaisable      Traceback (most recent call last)
<ipython-input-12-2085c24bdf88> in <module>
----> 1 conn=jaydebeapi.connect('oracle.jdbc.driver.OracleDriver','[admin]/[root]@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=helloworld.com)(PORT=1521))(CONNECT_DATA=(SID=hello42)))','/home/pi/ojdbc6.jar')

/usr/local/lib/python3.5/dist-packages/jaydebeapi/__init__.py in connect(jclassname, url, driver_args, jars, libs)
    379     else:
    380         libs = []
--> 381     jconn = _jdbc_connect(jclassname, url, driver_args, jars, libs)
    382     return Connection(jconn, _converters)
    383 

/usr/local/lib/python3.5/dist-packages/jaydebeapi/__init__.py in _jdbc_connect_jpype(jclassname, url, driver_args, jars, libs)
    188             return jpype.JArray(jpype.JByte, 1)(data)
    189     # register driver for DriverManager
--> 190     jpype.JClass(jclassname)
    191     if isinstance(driver_args, dict):
    192         Properties = jpype.java.util.Properties

/usr/local/lib/python3.5/dist-packages/jpype/_jclass.py in JClass(name)
     71     jc = _jpype.findClass(name)
     72     if jc is None:
---> 73         raise _RUNTIMEEXCEPTION.PYEXC("Class %s not found" % name)
     74 
     75     return _getClassFor(jc)

java.lang.RuntimeExceptionPyRaisable: java.lang.RuntimeException: Class oracle.jdbc.driver.OracleDriver not found

我认为问题出在类路径上,但我仍然是初学者。需要输入什么命令来配置它?

提前谢谢您!

最佳答案

我非常确定 '/home/pi/ojdbc6.jar' 当前被视为 driver_args 而不是 jars 变量.

正确的做法:

conn=jaydebeapi.connect('oracle.jdbc.driver.OracleDriver',
'[admin]/[root]@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=helloworld.com)(PORT=1521))(CONNECT_DATA=(SID=hello42)))',
jars='/home/pi/ojdbc6.jar')
<小时/>

或者,您可以手动将 Oracle 轻客户端 jar 添加到 jpype 类路径。

jpype.startJVM(jpype.getDefaultJVMPath(), '-Djava.class.path=/home/pi/ojdbc6.jar'
conn=jaydebeapi.connect('oracle.jdbc.driver.OracleDriver',
'[admin]/[root]@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=helloworld.com)(PORT=1521))(CONNECT_DATA=(SID=hello42)))')

关于java - 覆盆子中 jaydebeapi 的问题类路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56838410/

相关文章:

javascript - 在ScheduledExecutorService中执行javascript函数?

java - Java 中的递归方法,返回一个整数数组列表(仅其中一个),其总和为一个数字,如果没有则为 null

python - PyMySQL 其中类似通配符包围变量

python - 我可以获得应用于函数的装饰器列表吗?

java.math.BigInteger 无法转换为 java.math.BigDecimal

xml - ORA-01861 : literal does not match format string when parsing XML date

java - EJB - 事务超时

java - 将表单字段注入(inject)到具有相同属性名称的多个 bean 中

python - 在 Python 中,识别电子邮件地址的一部分

c# - 如何为 .Net 应用程序选择 Oracle 提供商?