【问题标题】:How to connect to Oracle DB via "bequeath" OCI in Java?如何通过 Java 中的“遗赠”OCI 连接到 Oracle DB?
【发布时间】:2014-08-22 18:40:15
【问题描述】:

我尝试了以下 url 字符串变体:

String url = "jdbc:oracle:oci:"+msDbUser+"/"+msPassword+"/@";

String url = "jdbc:oracle:oci:@//<TNS entry>";

String url = "jdbc:oracle:oci:@//<hostname>:<port>:<SID>";

然后我连接使用:

conn = DriverManager.getConnection(url);

但所有这些都会导致一个模糊的 SQL 异常“java.sql.SQLException: ??”如下所示。我尝试用谷歌搜索此错误,但找不到任何信息。

java.sql.SQLException: ??
    at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
    at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:206)
    at oracle.jdbc.driver.T2CConnection.checkError(T2CConnection.java:650)
    at oracle.jdbc.driver.T2CConnection.logon(T2CConnection.java:338)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:508)
    at oracle.jdbc.driver.T2CConnection.<init>(T2CConnection.java:133)
    at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtension.java:53)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:510)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at com.pca.test.TestConn.main(TestConn.java:75)

请注意,通过常规 THIN 驱动程序连接正常,所以我确定我的数据库没问题。但是,我在工作中的要求是使用“遗赠”连接和 OCI。

jdbc:oracle:thin:@<HOSTNAME>:<PORT>:<SID>

【问题讨论】:

    标签: java sql oracle oracle-call-interface


    【解决方案1】:

    OCI 连接是

    jdbc:oracle:oci:@<host>:<port>/<SID>
    

    【讨论】:

    • 仍然得到相同的“java.sql.SQLException: ??”错误。
    • 请参考community.oracle.com/thread/924664?tstart=0,确保根据您的OCI版本使用正确的驱动版本
    • 对于遗赠,客户端和服务器必须位于同一主机上 - 只需提及这一点以使其清楚。假设您的 java 程序在同一台服务器上,然后创建一个指定 BEQ 协议的 TNSNAMES.ORA 条目,然后使用 jdbc:oracle:thin:@TNSALIAS 连接。
    • @user3487063 我正在使用 ojdbc6.jar。
    • @TenG 是的,它们都在同一个主机中。我已经在 TNSNAMES.ORA 中有一个如下所示的条目: TESTBQ.PAQ.COM = (DESCRIPTION = (ADDRESS = (PROTOCOL = BEQ) (PROGRAM = ORACLE) (ARGV0 = ORACLEORARED) (ARGS = '(DESCRIPTION=(LOCAL =YES)(ADDRESS=(PROTOCOL=BEQ))') ) (CONNECT_DATA = (SERVICE_NAME = ORARED.PAQ.COM) ) ) 如果我将条目切换为使用常规 TCP,它可以工作。所以它可以很好地读取 TNSNAMES 条目。但由于某种原因,通过 OCI 的 BEQ 无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    相关资源
    最近更新 更多