【问题标题】:Connecting to Oracle DB via python通过 python 连接到 Oracle DB
【发布时间】:2020-04-08 22:38:00
【问题描述】:

我正在使用 jaydebeapi 连接到 Oracle 数据库。代码如下:

host = [address]
port = "1521"
sid = "ctginst1"
database = "oracle"
drivertype = "thin"
uid = [user]
pwd = [pass]

driver_class = "oracle.jdbc.OracleDriver"

driver_file = "ojdbc10.jar"

connection_string="jdbc:{}:{}@{}:{}:{}".format(database, drivertype, host, port, sid)

conn=jaydebeapi.connect(driver_class, connection_string, [uid, pwd], driver_file, )

但是这失败并给了我一个错误:

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

编辑: 通过在启动 JVM 时将 CLASSPATH 与 .jar 的位置一起传递,然后才尝试连接,我设法继续进行

import jpype
jpype.startJVM(jpype.getDefaultJVMPath(), '-Djava.class.path=%s' % driver_file)

现在我收到java.sql.SQLException: Invalid Oracle URL specified 错误

【问题讨论】:

  • 您需要将 JDBC 驱动程序的路径作为最后一个参数传递给connect。见pypi.org/project/JayDeBeApi/#usageCLASSPATH 环境变量不用于大多数执行 Java 的方法,JAVA_HOME\lib 绝对不属于它,并且您不应该将不属于 Java 本身的随机库放在 JAVA_HOME\lib 中。
  • 我没有完整复制最后一行,驱动的路径确实在最后。
  • 那么driver_file 应该是驱动程序的完整路径(或者可能是相对于 Python 程序的路径),而不仅仅是驱动程序 jar 的名称。跨度>
  • 该jar也存在于程序的根目录下。我也尝试过完整的绝对路径,例如“C:\ojdbc10.jar”。
  • ojdbc10.jar 适用于 Java 10。您真的安装了 Java 10 或更高版本吗? JayDeBeApi 甚至可以在 Java 10 上运行吗?

标签: python oracle jdbc


【解决方案1】:

好吧,从那里显然“@”之前缺少一个冒号。 完整的成功连接代码如下所示:

import jaydebeapi
import jpype

host = host
port = "1521"
sid = "ctginst1"
database = "oracle"
drivertype = "thin"
uid = user
pwd = password

driver_class = "oracle.jdbc.OracleDriver"

driver_file = "C:\ojdbc8.jar"

connection_string="jdbc:{}:{}:@{}:{}:{}".format(database, drivertype, host, port, sid)

jpype.startJVM(jpype.getDefaultJVMPath(), '-Djava.class.path=%s' % driver_file)

conn=jaydebeapi.connect(driver_class, connection_string, [uid, pwd])

【讨论】:

    猜你喜欢
    • 2021-07-15
    • 1970-01-01
    • 2019-12-26
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 2019-03-27
    • 2018-04-05
    相关资源
    最近更新 更多