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

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

Жанры

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

• 

fetch_fields
возвращает массив объектов
MysqlField
, соответствующих полям в следующей строке;

• 

fetch_row
возвращает массив значений полей в следующей строке;

• 

fetch_hash(with_table=false)
возвращает хэш, содержащий имена и значения полей в следующей строке;

• 

num_rows
возвращает число строк в результирующем наборе;

• 

each
— итератор, последовательно возвращающий массив значений полей;

• 

each_hash(with_table=false)
— итератор, последовательно возвращающий хэш вида
{имя_поля => значение_поля}
(пользуйтесь нотацией
x['имя_поля']
для получения значения поля).

Вот некоторые методы экземпляра, определенные в классе

MysqlField
:

• 

name
возвращает имя поля;

• 

table
возвращает имя таблицы, которой принадлежит поле;

• 

length
возвращает длину поля, заданную при определении таблицы;

• 

max_length
возвращает длину самого длинного поля в результирующем наборе;

• 

hash
возвращает хэш с именами и значениями следующих элементов описания:
name
,
table
,
def
,
type
,
length
,
max_length
,
flags
,
decimals
.

Если изложенный здесь материал противоречит онлайновой документации, предпочтение следует отдать документации. Более подробную информацию вы найдете на официальном сайте MySQL и в архиве приложений Ruby.

10.4.3. Интерфейс с PostgreSQL

В архиве RAA есть также расширение, реализующее доступ к СУБД PostgreSQL (работает с версиями PostgreSQL 6.5/7.0).

В предположении, что PostgreSQL уже установлена и сконфигурирована (и в базе данных есть таблица

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

require 'postgres'

conn = PGconn.connect("", 5432, "", "", "testdb")

conn.exec("create table rtest ( number integer default 0 );")

conn.exec("insert into rtest values ( 99 )")

res = conn.query("select * from rtest")

# res id [["99"]]

В классе

PGconn
есть метод
connect
, который принимает обычные параметры для установления соединения: имя хоста, номер порта, имя базы данных, имя и пароль пользователя. Кроме того, третий и четвертый параметры — соответственно, флаги и параметры терминала. В приведенном примере мы установили соединение через сокет UNIX от имени привилегированного пользователя, поэтому не указывали ни имя пользователя, ни пароль, а имя хоста, флаги и параметры терминала оставили пустыми. Номер порта должен быть целым числом, а остальные параметры — строками. У метода
connect
есть синоним
new
.

Для работы с таблицами нужно уметь выполнять запросы. Для этого служат методы

PGconn#exec
и
PGconn#query
.

Метод

exec
посылает переданную ему строку — SQL-запрос — серверу PostgreSQL и получает ответ в виде объекта
PGresult
, если выполнение завершилось успешно. В противном случае он возбуждает исключение
PGError
.

Метод

query
также посылает свой строковый параметр в виде SQL-запроса. Но в случае успеха получает массив кортежей. В случае ошибки возвращается
nil
, а подробности можно получить, вызвав метод
error
.

Имеется специальный метод

insert_table
для вставки записи в указанную таблицу. Вопреки названию он не создает новую таблицу, а добавляет данные в существующую. Этот метод возвращает объект
PGconn
.

conn.insert_table("rtest",[[34]])

res = conn.query("select * from rtest")

res равно [["99"], ["34"]]

В этом примере в таблицу

rtest
вставляется одна строка. Для простоты мы указали только одну колонку. Отметим, что объект
res
класса
PGresult
после обновления возвращает массив из двух кортежей. Чуть ниже мы рассмотрим методы, определенные в классе
PGresult
.

В классе

PGconn
определены также следующие полезные методы:

• 

db
возвращает имя базы, с которой установлено соединение;

• 

host
возвращает имя сервера, с которым установлено соединение;

• 

user
возвращает имя аутентифицированного пользователя;

• 

error
возвращает сообщение об ошибке;

• 

finish
,
close
закрывают соединение;

• 

loimport(file)
импортирует файл в большой двоичный объект (BLOB), в случае успеха возвращает объект
PGlarge
, иначе возбуждает исключение
PGError
;

• 

loexport(oid, file)
выгружает BLOB с идентификатор
oid
в указанный файл;

• 

locreate([mode])
возвращает объект
PGlarge
в случае успеха, иначе возбуждает исключение
PGError
;

• 

loopen(oid, [mode])
открывает BLOB с идентификатором
oid
. Возвращает объект
PGlarge
в случае успеха. Аргумент
mode
задает режим работы с открытым объектом:
"INV_READ"
или
"INV_WRITE"
(если этот аргумент опущен, по умолчанию предполагается
"INV_READ"
);

• 

lounlink(oid)
удаляет BLOB с идентификатором
oid
.

Отметим, что пять последних методов (

loimport
,
loexport
,
locreate
,
loopen
и
lounlink
) работают с объектами класса
PGlarge
. У этого класса есть собственные методы для доступа к объекту и его изменения. (BLOB'ы создаются в результате выполнения методов
loimport
,
locreate
,
loopen
экземпляра.)

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

Бастард Императора. Том 5

Орлов Андрей Юрьевич
5. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 5

Звездная Кровь. Изгой II

Елисеев Алексей Станиславович
2. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
технофэнтези
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой II

Треск штанов

Ланцов Михаил Алексеевич
6. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Треск штанов

Кодекс Охотника. Книга XXVII

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

Князь Андер Арес 4

Грехов Тимофей
4. Андер Арес
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Князь Андер Арес 4

Идеальный мир для Лекаря 16

Сапфир Олег
16. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 16

Прапорщик. Назад в СССР. Книга 7

Гаусс Максим
7. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прапорщик. Назад в СССР. Книга 7

Хозяин Стужи

Петров Максим Николаевич
1. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
7.00
рейтинг книги
Хозяин Стужи

Кодекс Крови. Книга ХIV

Борзых М.
14. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХIV

Идеальный мир для Лекаря 13

Сапфир Олег
13. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 13

Базис

Владимиров Денис
7. Глэрд
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Базис

Воронцов. Перезагрузка. Книга 5

Тарасов Ник
5. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 5

Херсон Византийский

Чернобровкин Александр Васильевич
1. Вечный капитан
Приключения:
морские приключения
7.74
рейтинг книги
Херсон Византийский

Леший

Северский Андрей
1. Леший в "Городе гоблинов"
Фантастика:
рпг
5.00
рейтинг книги
Леший