Как подключить базу данных Oracle к Mathematica?

Я пытаюсь подключить базу данных Oracle к Mathematica 8. Еще один вопрос уже говорит о том, как это можно сделать для базы данных MySQL, но для меня это не работает

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

Следующая информация доступна для меня на моем рабочем столе:

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. >>

Кто-нибудь знает, как я могу подключиться или продолжить?

Ответ 1

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}
*)

Нам нужно будет следовать инструкциям в документации Mathematica которая описывает, как установить новый драйвер JDBC.

Сначала нам нужно создать новый каталог ресурсов, в который нужно поместить необходимый JAR файл JDBC-драйвера:

$jarDirectory =
  CreateDirectory @
    FileNameJoin @
      {$UserBaseDirectory, "Applications", "Oracle", "Java"}

Далее, мы должны выбрать драйвер JDBC для использования. Посетите соответствующую страницу Oracle, чтобы найти правильный драйвер JDBC для вашей базы данных.

Выберите версию драйвера, совместимую с Java 6, версию, которую Mathematica 8 использует внутренне. В этом примере я решил использовать драйвер Oracle 11.2.0.2.0 для Java 6. Загрузите файл, а затем переместите его в только что созданный каталог ресурсов:

SystemOpen[$jarDirectory]

Затем мы создадим файл конфигурации драйвера 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"
]

Теперь драйвер установлен:

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}
*)

Если судьбы улыбаются, мы можем установить соединение и выполнить SQL-запрос:

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

SQLExecute[$connection, "SELECT 'success!' FROM DUAL"]

... где myserver - имя сервера базы данных, 1521 - номер порта слушателя, а mysid - системный идентификатор (SID) Oracle.

URL-адреса Oracle JDBC бывают разных форм. Подробнее см. Oracle FAQ.

Ответ 2

Я подозреваю, что вы используете неправильный драйвер JDBC - вы должны использовать драйвер JDBC Oracle, а не MySQL. Когда я использовал DatabaseLink для подключения к базе данных Oracle, я использовал эту команду:

OpenSQLConnection[
  JDBC[
   "oracle.jdbc.driver.OracleDriver", 
   "jdbc:oracle:thin:@server:port:dbname"
  ], 
  "Name" -> "dbname", 
  "Username" -> "YourUserName", 
  "Password" -> "YourPassword"
]

Вы должны поместить надлежащий драйвер JDBC Oracle (соответствующий вашей версии Oracle db) в место, где Mathematica может его найти. Эта процедура описана в документации для раздела DatabaseLink, раздел JDBC Connections. Вы можете проверить, какие драйверы JDBC видны Mathematica, выполнив JDBCDrivers[]. Убедитесь, что вы устанавливаете и используете правильный драйвер, соответствующий вашей версии DB, b.t.w. - неправильные версии драйверов могут привести к очень неприятным и неочевидным ошибкам (это не связано с Mathematica).

Ответ 3

Я предполагаю, что вы не должны использовать MySQL JBDC-соединения для Oracle. Хотя это для Mathematica 5.2, вот статья, которую вы, возможно, можете использовать как что-то, что нужно сделать.

Я едва использовал Mathematica и, конечно, не с базой данных, но с этой страницы, похоже, вы можете это сделать:

OpenSQLConnection[JDBC["oracle","server.business.com:1999"],
    Username -> "you"]

Ответ 4

В то время как ответ из WReach выше верен, также может быть полезно знать, что есть две дополнительные строки, которые полезны - чтобы убедиться, что Jlink загружен, а Java ClassPath верен и указывает на ваш файл oracle jdbc6.jar.

Needs["JLink`"]
AddToClassPath[
FileNameJoin[{$UserBaseDirectory, "Applications", "Oracle", 
"Java"}]];

или, если использовать ответ дословно просто

Needs["JLink`"]
AddToClassPath[$jarDirectory];