Есть ли способ подключиться к базе данных H2 из Ruby без JRuby? - PullRequest
1 голос
/ 31 марта 2011

Я тестирую веб-приложение с ruby ​​1.8.7 и WATiR, и я хотел бы как можно проще подключиться к базе данных H2, для которой я могу найти только информацию о доступе к JDBC.Если есть способ использовать JRuby для этого из Ruby, то это нормально, но мне нужно использовать Ruby прежде всего потому, что в нем написан мой код WATiR и, надеюсь, так и останется.

Будут рассмотрены все возможные решения, ноЯ ищу некоторую простоту, потому что мои знания базы данных ограничены, и мне нужно получить доступ к базе данных (чтение и запись в) из Ruby / WATiR, чтобы проверить, что отображается в веб-интерфейсе.

РЕДАКТИРОВАТЬ:Я удалил часть своего невежества, теперь я знаю, что JDBC - это Java API для доступа к БД, поэтому я сейчас ищу какой-либо способ подключения к базе данных H2, чтобы мои скрипты Ruby / WATiR могли получить к ней доступ.

Справочная информация : у меня есть некоторый опыт работы с гемами DBI и Sequel, и у меня установлены Rails (поэтому я могу начать играть в основном с ActiveRecord), но я готов изучать новые вещи для решения этой проблемы.

Давайте предположим, что я не очень хороший Java-кодер.Я также никогда не задумывался об использовании JRuby прежде, поэтому я не совсем знаком с тем, как он работает.

Решение В конце концов я начал общаться между собой, главным образом благодаря ТомасуОтвет Мюллера ниже.Я установил драйвер ODBC PostgreSQL, получил работу сиквела и подключился через ODBC.Использование PG-адаптера Sequel для подключения к серверу H2 PG вызывает некоторые синтаксические ошибки, над которыми я все еще работаю.Я еще не пробовал DBI для подключения, но я сделаю это, поскольку это может дать мне больший контроль над синтаксисом, если он мне понадобится.Большое спасибо также Джереми Эвансу за помощь в разрешении конфликта между activerecord-jdbc-adapter и Sequel (файл pesky pg.rb в моем пути к ruby) и за управление Sequel.Это не указано в качестве ответа, так что я могу отдать должное тем, кто ответил, в то же время давая отзывы людям, находящимся в той же ситуации, что и я.

Я установил pg (не ruby-pg), продолжение, dbi,dbd-odbc (плюс ручное исправление файла, вы можете спросить меня о деталях), hoe и UNinstalled activerecord-jdbc-adapter.

Ответы [ 3 ]

3 голосов
/ 31 марта 2011

H2 может выступать в качестве сервера PostgreSQL и поддерживает драйвер PostgreSQL ODBC .

Таким образом, теоретически вы должны использовать ruby-pg . Но я никогда не пробовал сам, думаю, шансы, что это работает, составляют около 50%. Так что ответ: возможно. Но предпочтительным решением является использование JRuby.

Если WATiR написан на Ruby ... , тогда WATiR также должен работать на JRuby ?

2 голосов
/ 31 марта 2011

ИМХО ваши два лучших варианта - это гемы DBI или Sequel.

Gem DBI может использоваться для подключения к БД через ODBC. Если у H2 есть способность, как указывает Томас, поддерживать ODBC, тогда вы сможете использовать DBI для подключения и запроса к базе данных (которая, конечно, включает в себя запросы «обновления» для настройки данных тестовых данных и т. Д.).

Подробнее см. Rubyforge DBI Page . DBI существует уже некоторое время, поэтому довольно легко найти онлайн-учебники по его использованию и т. Д. Это довольно низкий уровень, и вам нужно знать SQL или язык вашей БД, чтобы хорошо с ним взаимодействовать.

Другим вариантом может быть гем SEQUEL, который может подключаться через ODBC или JDBC (JDBC имеет субадаптер H2). Этот Gem новее и предлагает некоторые конкретные преимущества по сравнению с DBI. см. эту ссылку на часть Opening_Databases файлов rdoc для Sequel, где немного рассказывается об использовании JDBC для подключения к базам данных. Я полагаю, что проще, зависит от того, насколько сложно настроить ODBC для H2, и сколько Java вам нужно выучить, чтобы заставить JDBC работать на вас. (Я бы отправился в ODBC первым, если бы это был я, так как я очень мало знаю Java)

Сам я до сих пор использовал DBI (для подключения к MS SQL через ODBC), но я вынужден признать, что использование гема Sequel может быть лучше. Сиквел избавляет вас от написания большого количества реального кода типа SQL или даже от необходимости глубокого понимания запросов SQL, и позволяет вам делать все в стиле ruby, используя методы, символы и некоторые строки здесь и там. Если вы делаете МНОГО взаимодействия с БД, я вижу, где оно явно лучше, особенно с точки зрения возможности создания намного более чистого ООП-кода. См. эту презентацию автора сиквела на конференции Ruby в 2009 году для получения более подробной информации.

В моем случае DBI «достаточно хорош» для того, что мне нужно, так как я очень хорошо разбираюсь в SQL, и на самом деле мне не нужно делать что-то большее, чем просто вводить несколько команд здесь и там, чтобы выполнять бит-тиддлинг на уровне базы данных создать надлежащие условия испытаний. ОТО, если бы мне пришлось выполнять множество запросов к БД в качестве тестового оракула и сравнивать его с данными, представленными в пользовательском интерфейсе, я могу понять, где использование Sequel сделает мою жизнь намного проще.

2 голосов
/ 31 марта 2011

нет такой вещи с именем jdbc database , вы можете получить доступ к любой базе данных, используя ruby, если база данных предоставляет соединитель ruby.

...