Как подключить базу данных Oracle к Mathematica? - PullRequest
11 голосов
/ 24 августа 2011

Я пытаюсь подключить базу данных 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. >>

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

Ответы [ 4 ]

12 голосов
/ 25 августа 2011

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 - это идентификатор системы Oracle (SID).

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

6 голосов
/ 24 августа 2011

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

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

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

1 голос
/ 06 августа 2014

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

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

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

Needs["JLink`"]
AddToClassPath[$jarDirectory];
1 голос
/ 24 августа 2011

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

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

OpenSQLConnection[JDBC["oracle","server.business.com:1999"],
    Username -> "you"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...