Хэл Фултон - Программирование на языке Ruby
- Название:Программирование на языке Ruby
- Автор:
- Жанр:
- Издательство:ДМК Пресс
- Год:2007
- Город:Москва
- ISBN:5-94074-357-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Хэл Фултон - Программирование на языке Ruby краткое содержание
Ruby — относительно новый объектно-ориентированный язык, разработанный Юкихиро Мацумото в 1995 году и позаимствовавший некоторые особенности у языков LISP, Smalltalk, Perl, CLU и других. Язык активно развивается и применяется в самых разных областях: от системного администрирования до разработки сложных динамических сайтов.
Книга является полноценным руководством по Ruby — ее можно использовать и как учебник, и как справочник, и как сборник ответов на вопросы типа «как сделать то или иное в Ruby». В ней приведено свыше 400 примеров, разбитых по различным аспектам программирования, и к которым автор дает обстоятельные комментарии.
Издание предназначено для программистов самого широкого круга и самой разной квалификации, желающих научиться качественно и профессионально работать на Ruby.
Программирование на языке Ruby - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
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
:
• 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 (http://www.mysql.com) и в архиве приложений 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
.
Интервал:
Закладка: