Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

# ["Democracy in America", "Alexis de Tocqueville"]

# ...

Если блок не задан, то метод

execute
возвращает объект
ResultSet
(по сути, курсор, который можно перемещать по набору записей).

rs = db.execute("select title,author from books")

rs.each {|row| p row } # Тот же результат, что и выше.

rs.close

Если получен объект

ResultSet
, то программа должна будет рано или поздно закрыть его (как показано в примере выше). Если нужно обойти список записей несколько раз, то с помощью метода
reset
можно вернуться в начало. (Это экспериментальное средство, которое в будущем может измениться.) Кроме того, можно производить обход в духе генератора с помощью методов
next
и
eof?
.

rs = db.execute("select title,author from books")

while ! rs.eof?

 rec = rs.next

 p rec # Тот же результат, что и выше.

end

rs.close

Методы библиотеки могут возбуждать различные исключения. Все они являются подклассами класса

SQLite::Exception
, так что легко перехватываются поодиночке или целой группой.

Отметим еще, что библиотека написана так, что может работать совместно с библиотекой

ArrayFields
Ары Ховарда (Ara Howard). Она позволяет получать доступ к элементам массива по индексу или по имени. Если перед
sqlite
затребована библиотека
arrayfields
, то объект
ResultSet
можно индексировать как числами, так и именами полей. (Но можно задать и такую конфигурацию, что вместо этого будет возвращаться объект
Hash
.)

Хотя библиотека

sqlite
вполне развита, она не покрывает всех мыслимых потребностей просто потому, что сама база данных SQLite не полностью реализует стандарт SQL92. Дополнительную информацию об SQLite и привязке к Ruby ищите в сети.

10.4.2. Интерфейс с MySQL

Интерфейс Ruby с MySQL — один из самых стабильных и полнофункциональных среди всех интерфейсов с базами данных. Это расширение, которое должно устанавливаться после инсталляции Ruby и MySQL.

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

require 'mysql'

m = Mysql.new("localhost","ruby","secret","maillist")

r = m.query("SELECT * FROM people ORDER BY name")

r.each_hash do |f|

 print "#{f['name']} - #{f['email']}"

end

# Выводится что-то вроде:

# John Doe - jdoe@rubynewbie.com

# Fred Smith - smithf@rubyexpert.com

Особенно полезны методы класса

Mysql.new
и
MysqlRes.each_hash
, а также метод экземпляра
query
.

Модуль состоит из четырех классов (

Mysql
,
MysqlRes
,
MysqlField
и
MysqlError
), описанных в файле README. Мы приведем сводку некоторых наиболее употребительных методов, а дополнительную информацию вы сможете найти сами в официальной документации.

Метод класса

Mysql.new
принимает несколько строковых параметров, которые по умолчанию равны
nil
, и возвращает объект, представляющий соединение. Параметры называются
host
,
user
,
passwd
,
db
,
port
,
sock
и
flag
. У метода
new
есть синонимы
real_connect
и
connect
.

Методы

create_db
,
select_db
и
drop_db
принимают в качестве параметров имя базы данных и используются, как показано ниже. Метод
close
закрывает соединение с сервером.

m=Mysql.new("localhost","ruby","secret")

m.create_db("rtest") # Создать новую базу данных.

m.select_db("rtest2") # Выбрать другую базу данных.

in.drop_db("rtest") # Удалить базу данных.

m.close # Закрыть соединение.

В последних версиях методы

create_db
и
drop_db
объявлены устаревшими. Но можно «воскресить» их, определив следующим образом:

class Mysql

 def create_db(db)

query("CREATE DATABASE #{db}")

 end

 def drop_db(db)

query("DROP DATABASE #{db}")

 end

end

Метод

list_dbs
возвращает список имен доступных баз данных в виде массива.

dbs = m.list_dbs # ["people","places","things"]

Метод

query
принимает строковый параметр и по умолчанию возвращает объект
MysqlRes
. В зависимости от заданного значения свойства
query_with_result
может также возвращаться объект
Mysql
.

Если произошла ошибка, то ее номер можно получить, обратившись к методу

errno
. Метод
error
возвращает текст сообщения об ошибке.

begin

 r=m.query("create table rtable

 (

id int not null auto_increment,

name varchar(35) not null,

desc varchar(128) not null,

unique id(id)

 )")

# Произошло исключение...

rescue

 puts m.error

# Печатается: You have an error in your SQL syntax

# near 'desc varchar(128) not null ,

# unique id(id)

# )' at line 5"

 puts m.errno

# Печатается 1064

# ('desc' is reserved for descending order)

end

Ниже перечислено несколько полезных методов экземпляра, определенных в классе

MysqlRes
:

Поделиться:
Популярные книги

Поход

Валериев Игорь
4. Ермак
Фантастика:
боевая фантастика
альтернативная история
6.25
рейтинг книги
Поход

Книга гор (сборник)

Лукьяненко Сергей Васильевич
Фантастика:
социально-философская фантастика
героическая фантастика
6.12
рейтинг книги
Книга гор (сборник)

Полное собрание сочинений в одном томе

По Эдгар Аллан
Полное собрание в одном томе
Фантастика:
ужасы и мистика
детективная фантастика
мистика
8.40
рейтинг книги
Полное собрание сочинений в одном томе

Театральный роман (Сборник)

Булгаков Михаил Афанасьевич
Проза:
классическая проза
5.00
рейтинг книги
Театральный роман (Сборник)

Технология XSLT

Валиков Алексей Н.
Компьютеры и Интернет:
программирование
5.00
рейтинг книги
Технология XSLT

Эфемер

Прокофьев Роман Юрьевич
7. Стеллар
Фантастика:
боевая фантастика
рпг
7.23
рейтинг книги
Эфемер

Наследие Маозари

Панежин Евгений
1. Наследие Маозари
Фантастика:
рпг
попаданцы
аниме
5.80
рейтинг книги
Наследие Маозари

Том 6. Пьесы 1901-1906

Горький Максим
6. Собрание сочинений в тридцати томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 6. Пьесы 1901-1906

Эрбат. Пленники судьбы

Корнилова Веда
2. Эрбат
Фантастика:
фэнтези
6.25
рейтинг книги
Эрбат. Пленники судьбы

Имперец. Том 1 и Том 2

Романов Михаил Яковлевич
1. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Имперец. Том 1 и Том 2

Кодекс Охотника XXVIII

Винокуров Юрий
28. Кодекс Охотника
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника XXVIII

Темный карнавал (сборник)

Брэдбери Рэй Дуглас
1. Сборники рассказов Рэя Брэдбери
Фантастика:
социально-философская фантастика
научная фантастика
ужасы и мистика
мистика
сказочная фантастика
7.71
рейтинг книги
Темный карнавал (сборник)

Геном хищника. Книга третья

Гарцевич Евгений Александрович
3. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга третья

Дважды одаренный. Том II

Тарс Элиан
2. Дважды одаренный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.25
рейтинг книги
Дважды одаренный. Том II