如何将Oracle数据库连接到Mathematica?

Pat*_*ard 11 sql database oracle wolfram-mathematica connect

我正在尝试将Oracle数据库连接到Mathematica 8.另一个问题已经说明如何在MySQL数据库中完成它但它对我不起作用:

Needs["DatabaseLink"] AND conn = OpenSQLConnection[JDBC["MySQL(Connector/J)", 
"yourserver/yourdatabase"], "Username" -> "yourusername", "Password" -> "yourpassword"]
Run Code Online (Sandbox Code Playgroud)

我桌面上可以找到以下信息:

filepath = "C:\oracle\ora92\network\ADMIN\tnsnames.ora"; HOST; PORT; username; password;

conn = OpenSQLConnection[JDBC["MySQL(Connector/J)", HOST], "Username" -> username, "Password" -> password]

Error message: JDBC::error: 
    Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. 
    The driver has not received any packets from the server. >>
Run Code Online (Sandbox Code Playgroud)

有谁知道我如何连接或继续?

WRe*_*ach 12

Mathematica 8没有预先配备Oracle驱动程序,可以通过评估这些表达式来验证这一事实:

Needs["DatabaseLink`"]
JDBCDriverNames[]
(*
Out[2]= {Microsoft Access(ODBC),hsqldb,HSQL(Memory),HSQL(Server),
         HSQL(Server+TLS),HSQL(Standalone),HSQL(Webserver),HSQL(Webserver+TLS),
         jtds_sqlserver,jtds_sybase,mysql,MySQL(Connector/J),ODBC(DSN),odbc,
         PostgreSQL,Microsoft SQL Server(jTDS),Sybase(jTDS),HSQL 2.0.1}
*)
Run Code Online (Sandbox Code Playgroud)

我们必须遵循Mathematica 文档中的说明,该文档描述了如何安装新的JDBC驱动程序.

首先,我们必须创建一个新的资源目录,在其中放置必要的JDBC驱动程序JAR文件:

$jarDirectory =
  CreateDirectory @
    FileNameJoin @
      {$UserBaseDirectory, "Applications", "Oracle", "Java"}
Run Code Online (Sandbox Code Playgroud)

接下来,我们必须选择要使用的JDBC驱动程序.访问相关的Oracle页面,找到适合您数据库的JDBC驱动程序.

选择与Java 6兼容的驱动程序版本,即Mathematica 8内部使用的版本.对于此示例,我选择将Oracle 11.2.0.2.0驱动程序用于Java 6.下载该文件,然后将其移动到刚创建的资源目录中:

SystemOpen[$jarDirectory]
Run Code Online (Sandbox Code Playgroud)

接下来,我们将创建一个JDBC驱动程序配置文件,以便在Mathematica中注册新的驱动程序:

$configDirectory =
  CreateDirectory @
    FileNameJoin @
      {$UserBaseDirectory, "Applications", "Oracle", "DatabaseResources"}

Export[
  FileNameJoin @ {$configDirectory, "Oracle.m"}
, JDBCDriver[
    "Name" -> "Oracle"
  , "Driver" -> "oracle.jdbc.driver.OracleDriver"
  , "Protocol" -> "jdbc:oracle:thin:@"
  , "Version" -> 1
  ]
, "Text"
]
Run Code Online (Sandbox Code Playgroud)

现在安装了驱动程序:

JDBCDriverNames[]
(*
Out[9]= {Oracle,Microsoft Access(ODBC),hsqldb,HSQL(Memory),HSQL(Server),
         HSQL(Server+TLS),HSQL(Standalone),HSQL(Webserver),HSQL(Webserver+TLS),
         jtds_sqlserver,jtds_sybase,mysql,MySQL(Connector/J),ODBC(DSN),odbc,
         PostgreSQL,Microsoft SQL Server(jTDS),Sybase(jTDS),HSQL 2.0.1}
*)
Run Code Online (Sandbox Code Playgroud)

如果命运微笑,我们现在可以建立连接并执行SQL查询:

$connection =
  OpenSQLConnection[
    JDBC["Oracle", "myserver:1521:mysid"]
  , "Username" -> "scott"
  , "Password" -> "tiger"
  ]

SQLExecute[$connection, "SELECT 'success!' FROM DUAL"]
Run Code Online (Sandbox Code Playgroud)

...其中myserver是数据库服务器名称,1521是侦听器端口号,mysid是Oracle系统ID(SID).

Oracle JDBC URL有多种形式.有关详细信息,请查看Oracle FAQ.


Leo*_*rin 6

我怀疑您使用的是错误的JDBC驱动程序 - 您应该使用Oracle JDBC驱动程序而不是MySQL驱动程序.当我DatabaseLink用来连接Oracle数据库时,我使用了以下命令:

OpenSQLConnection[
  JDBC[
   "oracle.jdbc.driver.OracleDriver", 
   "jdbc:oracle:thin:@server:port:dbname"
  ], 
  "Name" -> "dbname", 
  "Username" -> "YourUserName", 
  "Password" -> "YourPassword"
]
Run Code Online (Sandbox Code Playgroud)

您应该确保将正确的Oracle JDBC驱动程序(对应于Oracle db版本)放到Mathematica可以找到它的位置.DatabaseLink 的文档部分介绍了此过程JDBC Connections.您可以通过执行来测试Mathematica可以看到哪些JDBC驱动程序JDBCDrivers[].确保您安装并使用与您的数据库版本对应的正确驱动程序,顺便说一句 - 错误的驱动程序版本可能会导致非常讨厌和非明显的错误(这与Mathematica无关).


bha*_*mby 1

我的猜测是,您不应该对 Oracle 使用 MySQL JBDC 连接。虽然它是针对 Mathematica 5.2 的,但您也许可以参考这篇文章。

我几乎没有使用过 Mathematica,当然也没有使用过数据库,但从该页面来看,您似乎可以这样做:

OpenSQLConnection[JDBC["oracle","server.business.com:1999"],
    Username -> "you"]
Run Code Online (Sandbox Code Playgroud)