【问题标题】:Coding to connect to Oracle through TNS通过 TNS 连接到 Oracle 的编码
【发布时间】:2016-07-26 20:55:08
【问题描述】:

在我的工作场所,通过 Oracle UI,我只能使用 TNS 作为连接类型,因为他们无法为我打开端口来进行连接。它是 Oracle 11g。

但是,现在我需要编写代码来连接到 Oracle 并获取数据。我尝试了几种编码语言,但它们都不起作用......

这是我尝试过的

尝试1:Spark Scala,Spark Python 类似,我这里用的是Spark Notebook

val jdbcUsername = "[my user name]"
val jdbcPassword = "[my pswd]"
val jdbcHostname = "[Oracle hostname]"
val jdbcPort = [default port number]
val jdbcDatabase ="DATABASE"
val jdbcUrl = s"jdbc:oracle://${jdbcHostname}:${jdbcPort}/${jdbcDatabase}?user=${jdbcUsername}&password=${jdbcPassword}"
val connectionProperties = new java.util.Properties()

Class.forName("com.oracle.jdbc.Driver")

import java.sql.DriverManager
val connection = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword)
connection.isClosed()

此方法失败并显示

找不到合适的驱动程序

尝试 2:Oracle 教程

然后我检查了Oracle Tutorial,它对我不起作用,因为它使用的是基本连接类型而不是 TNS 我还检查了相关的 Java 连接方法,对我不起作用

尝试 3:R

最后我换成了R,教程如下:R connect to Oracle

第一种使用RODBC的方法失败,显示

消息 [Microsoft][ODBC Driver Manager] 未找到数据源名称且未指定默认驱动程序

代码如下:

library(RODBC)
con <- odbcConnect("[Oracle Host name]", uid="[my user id]", pwd="[my pswd]", rows_at_time = 500)

对于第二种方法,我也不能使用RJDBC。 对于第三种方法,我尝试了所有mirror urls in my location,仍然无法安装包ROracle.....

我的问题是,是否可以使用 TNS 作为连接类型来编写代码并连接到 Oracle 表?我擅长 Python、Java 和 R,还可以使用 Spark Scala p>

【问题讨论】:

  • 为什么你的第一个加载 com.mysql.jdbc.Driver 用于 Oracle 连接?以及您无法打开端口是什么意思 - TNS 通过网络连接到基本连接将使用的同一端口。

标签: oracle oracle11g tns


【解决方案1】:

首先使用 Class.forName("oracle.jdbc.driver.OracleDriver") 加载驱动程序。并且 oracle jdbc 驱动 jar 文件应该在你的 $CLASSPATH 中

【讨论】:

  • 1/ 错误的驱动程序类。从 9i 开始,您应该使用 \oracle.jdbc.OracleDriver'。虽然我同意事情确实适用于滑稽的驱动程序类名称。 2/ 自 JDBC4 起,您也不再需要使用 Class.forName 3/ 最后他的连接字符串中缺少“@”。(jdbc:oracle:thin:scott/tiger@//myhost:1521/myservicename) 4/ TNS 连接完全是一个不同的连接字符串
  • @Alain Pannetier viktor@ViksPro:~/jlib $ unzip -l ojdbc7.jar |grep OracleDriver 2285 06-30-14 11:32 oracle/jdbc/OracleDriver.class 459 06-30-14 11:32 oracle/jdbc/driver/OracleDriver$1.class 16742 06-30-14 11:32 oracle/jdbc/driver/OracleDriver.class 950 06-30-14 11:32 oracle/jdbc/driver/OracleDriverExtension.class viktor@ViksPro:~/jlib $
  • @BblKTOP,加油! This is what Oracle say “在 Oracle JDBC 版本 9.0.1 中,客户不推荐使用该包中的类。引入了一个新包 oracle.jdbc,建议客户开始使用 oracle.jdbc 中定义的接口和类。在自 9.0.1 以来的每个版本,我们都鼓励客户切换到 oracle.jdbc,并声明将不再支持 oracle.jdbc.driver。时机已到。引用 oracle.jdbc.driver 的客户代码将无法编译..."
  • Class.forName("oracle.jdbc.driver.OracleDriver") 是目前为止在 Spark 云中使用 Spark Scala 的唯一方法(我使用的是社区版云并且有设置限制)。同时使用 Spark Scala,连接字符串 (jdbcUrl) 不需要'@'。我觉得BblKTOP说的有一定的价值
【解决方案2】:

终于发现 R 对我有用,而我的公司阻止了太多东西。 R 非常快。这是解决方案:

第 1 步: Download .jar for ojdbc,需要为您的 Oracle 版本选择一个,对我来说是 11g。此 .jar 文件的路径将是 classPath

第二步:如果没有Java jdk,请安装,否则无法加载rJava包。 Download Java JDK here

library(rJava)
library(RJDBC)
drv <- JDBC("oracle.jdbc.OracleDriver", classPath="[your .jar file path]\\ojdbc6.jar", " ")
con <- dbConnect(drv, "jdbc:oracle:thin:@[hostname]:[port number]:[database name]", "[user name]", "[user paswd]")
d <- dbGetQuery(con, "select * from [table name] WHERE ROWNUM <= 3")
d$[a column name]
dbDisconnect(con)

【讨论】:

    猜你喜欢
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    相关资源
    最近更新 更多