0

我有这个小脚本,它试图连接到运行 oracle 数据库(11g)的服务器。

import os
import sys
import jpype
import jaydebeapi

if("JAVA_HOME" not in os.environ):
    os.environ["JAVA_HOME"] = "c:\Program Files\Java\jdk1.8.0_45"

ODBC_DRIVER = os.path.join(os.path.dirname(os.path.abspath(__file__)), "ojdbc6.jar")

print("\tPYTHON VERSION", sys.version)
print("\tJAVA_HOME", os.environ["JAVA_HOME"])
print("\tDEFAULT JVM PATH", jpype.getDefaultJVMPath())
print("\tODBC_DRIVER", ODBC_DRIVER)

try:
    jpype.startJVM(jpype.getDefaultJVMPath(), "-Djava.class.path={}".format(ODBC_DRIVER))
    conn = jaydebeapi.connect("oracle.jdbc.driver.OracleDriver",
                             ["jdbc:oracle:thin//192.168.10.33:1521", "<user>", "<passw>"],
                              ODBC_DRIVER)
except Exception as e:
    print(e)
    sys.exit(-1)

sys.exit(0)

抛出异常的输出:

    PYTHON VERSION 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)]
    JAVA_HOME c:\Program Files\Java\jdk1.8.0_45
    DEFAULT JVM PATH c:\Program Files\Java\jdk1.8.0_45\jre\bin\server\jvm.dll
    ODBC_DRIVER d:\path\to\ojdbc6.jar

close_fds is not supported on Windows platforms if you redirect stdin/stdout/stderr

作为参考,我主要使用连接到 oracle 数据库的小型教程。他们的代码看起来基本相同。

通过寻找解决方案,我发现 python 应该支持 2.6.x 版本的 close_fds

我不确定从哪里开始寻找。

有关 jpype 和 jaydebaapi 的更多信息:

JayDeBeApi3 (1.3)
JPype1-py3 (0.5.5.2)

两者都是通过pip.

4

1 回答 1

1

我建议使用 python >=2.7.x (这在您的情况下很好,因为您使用的是更高版本)。使用最新版本 JayDeBeApi 0.2.0 推荐的 JPype1 0.5.7。此外,由于您自己启动 JVM,因此无需在连接语句中指定第三个参数(驱动程序)。或者您可以注释掉 startjvm 并保持连接语句不变。Jpype 执行相同的操作(即,如果您在 connect 语句中将驱动程序 jar 指定为第三个参数,则为 startjvm)。

于 2015-10-20T14:44:07.260 回答