English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
DBI предоставляет несколько методов для получения записей из базы данных. Предположим dbh Это обработчик базы данных:sth Это обработчик предложения:
Номер | Метод & Описание |
---|---|
1 | db.select_one( stmt, *bindvars ) => aRow | nil Исполнение с bindvars Связанные с параметрами маркерами stmt Оператор. Возвращает первую строку, если набор результатов пуст, то возвращает nil. |
2 | db.select_all( stmt, *bindvars ) => [aRow, ...] | nil db.select_all( stmt, *bindvars ){ |aRow| aBlock } Исполнение с bindvars Связанные с параметрами маркерами stmt Оператор. Вызов метода без блока возвращает массив всех строк. Если был передан блок, то метод вызывается для каждой строки. |
3 | sth.fetch => aRow | nil Вернетследующая строка. Если в результате нет следующей строки, то вернется nil. |
4 | sth.fetch { |aRow| aBlock } Обратитесь к данному блоку для оставшихся строк в наборе результатов. |
5 | sth.fetch_all => [aRow, ...] Возврат всех оставшихся строк в сохраненном наборе результатов. |
6 | sth.fetch_many( count ) => [aRow, ...] Возврат сохраненных в массиве [aRow, ...] элементов вниз по. count строка. |
7 | sth.fetch_scroll( direction, offset=1 ) => aRow | nil Вернет direction и offset Заданная строка. За исключением SQL_FETCH_ABSOLUTE и SQL_FETCH_RELATIVE, другие методы отбрасывают параметры offset.direction Возможные значения параметра, см таблицу ниже. |
8 | sth.column_names => anArray Вернет имя столбца. |
9 | column_info => [ aColumnInfo, ... ] Вернет массив объектов DBI::ColumnInfo. Каждый объект хранит информацию о столбце и содержит имя столбца, тип, точность и другие дополнительные данные. |
10 | sth.rows => rpc Вернет количество строк, обработанных выполненным запросом Count,если不存在, то вернется nil. |
11 | sth.fetchable? => true | false Вернется, если можно получить строку true,в противном случае вернется false. |
12 | sth.cancel Освободить ресурсы, занимаемые результатом запроса. После вызова этого метода вы не можете более получать строки,除非 повторно вызвать execute. |
13 | sth.finish Освободить ресурсы, занимаемые подготовленным запросом. После вызова этого метода вы не можете вызывать другие методы для выполнения дальнейших операций с этим объектом. |
Следующие значения можно использовать fetch_scroll Параметр direction метода:
Константы | Описание |
---|---|
DBI::SQL_FETCH_FIRST | Получить первую строку. |
DBI::SQL_FETCH_LAST | Получить последнюю строку. |
DBI::SQL_FETCH_NEXT | Получить следующую строку. |
DBI::SQL_FETCH_PRIOR | Получить предыдущую строку. |
DBI::SQL_FETCH_ABSOLUTE | Получить строку в заданном смещении. |
DBI::SQL_FETCH_RELATIVE | Получить строку, расположенную на заданном смещении от текущей строки. |
Ниже приведен пример того, как можно получить метаданные запроса. Предположим, у нас есть таблица EMPLOYEE.
#!/usr/bin/ruby -w require "dbi" begin # 连接到 MySQL 服务器 dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", "testuser", "test123") sth = dbh.prepare("SELECT * FROM EMPLOYEE WHERE ДОХОД > ?") sth.execute(1000) if sth.column_names.size == 0 then puts "Запрос не имеет результатного набора" printf "Количество измененных строк: %d\n", sth.rows else puts "Запрос имеет результатный набор" rows = sth.fetch_all printf "Количество строк: %d\n", rows.size printf "Количество столбцов: %d\n", sth.column_names.size sth.column_info.each_with_index do |info, i| printf "--- Столбец %d (%s) ---\n", i, info["name"] printf "sql_type: %s\n", info["sql_type"] printf "type_name: %s\n", info["type_name"] printf "precision: %s\n", info["precision"] printf "scale: %s\n", info["scale"] printf "nullable: %s\n", info["nullable"] printf "indexed: %s\n", info["indexed"] printf "primary: %s\n", info["primary"] printf "unique: %s\n", info["unique"] printf "mysql_type: %s\n", info["mysql_type"] printf "mysql_type_name: %s\n", info["mysql_type_name"] printf "mysql_length: %s\n", info["mysql_length"] printf "mysql_max_length: %s\n", info["mysql_max_length"] printf "mysql_flags: %s\n", info["mysql_flags"] end end sth.finish rescue DBI::DatabaseError => e puts "An error occurred" puts "Error code: #{e.err}" puts "Error message: #{e.errstr}" ensure # 断开与服务器的连接 dbh.disconnect if dbh end
这将产生以下结果:
Statement has a result set Number of rows: 5 Number of columns: 5 --- Column 0 (FIRST_NAME) --- sql_type: 12 type_name: VARCHAR precision: 20 scale: 0 nullable: true indexed: false primary: false unique: false mysql_type: 254 mysql_type_name: VARCHAR mysql_length: 20 mysql_max_length: 4 mysql_flags: 0 --- Column 1 (LAST_NAME) --- sql_type: 12 type_name: VARCHAR precision: 20 scale: 0 nullable: true indexed: false primary: false unique: false mysql_type: 254 mysql_type_name: VARCHAR mysql_length: 20 mysql_max_length: 5 mysql_flags: 0 --- Column 2 (AGE) --- sql_type: 4 type_name: INTEGER precision: 11 scale: 0 nullable: true indexed: false primary: false unique: false mysql_type: 3 mysql_type_name: INT mysql_length: 11 mysql_max_length: 2 mysql_flags: 32768 --- Column 3 (SEX) --- sql_type: 12 type_name: VARCHAR precision: 1 scale: 0 nullable: true indexed: false primary: false unique: false mysql_type: 254 mysql_type_name: VARCHAR mysql_length: 1 mysql_max_length: 1 mysql_flags: 0 --- Столбец 4 (Доход) --- sql_type: 6 type_name: FLOAT precision: 12 scale: 31 nullable: true indexed: false primary: false unique: false mysql_type: 4 mysql_type_name: FLOAT mysql_length: 12 mysql_max_length: 4 mysql_flags: 32768