English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
DBI bietet verschiedene Methoden, um Aufzeichnungen aus der Datenbank abzurufen. Angenommen dbh ist ein Datenbank-Handler,sth ist ein Statement-Handler:
Nummer | Methode & Beschreibung |
---|---|
1 | db.select_one( stmt, *bindvars ) => aRow | nil ausführen mit bindvars gebunden vor dem Parameterzeichen stmt Statement. Gibt die erste Zeile zurück, wenn der Result-Set leer ist, wird nil。 |
2 | db.select_all( stmt, *bindvars ) => [aRow, ...] | nil db.select_all( stmt, *bindvars ){ |aRow| aBlock } ausführen mit bindvars gebunden vor dem Parameterzeichen stmt Statement. Ruft den ohne Block aufrufenden Methoden, gibt ein Array mit allen Zeilen zurück. Wird ein Block gegeben, wird dieser für jede Zeile aufgerufen. |
3 | sth.fetch => aRow | nil wird zurückgegebennächste Zeile. Wenn im Resultat keine nächste Zeile vorhanden ist, wird nil。 |
4 | sth.fetch { |aRow| aBlock } Ruft den gegebenen Block für die verbleibenden Zeilen im Result-Set auf |
5 | sth.fetch_all => [aRow, ...] Gibt alle verbleibenden Zeilen des Result-Sets, die im Array gespeichert sind, zurück |
6 | sth.fetch_many( count ) => [aRow, ...] Gibt die Zeile zurück, die nach unten gezählt wird im Array [aRow, ...] count Zeile. |
7 | sth.fetch_scroll( direction, offset=1 ) => aRow | nil wird zurückgegeben direction Parameter und offset bestimmte Zeile. Alle anderen Methoden außer SQL_FETCH_ABSOLUTE und SQL_FETCH_RELATIVE werfen die Parameter weg offset。direction Mögliche Werte für den Parameter, siehe Tabelle unten |
8 | sth.column_names => anArray Gibt den Namen der Spalte zurück |
9 | column_info => [ aColumnInfo, ... ] Gibt ein Array von DBI::ColumnInfo-Objekten zurück. Jedes Objekt speichert Informationen über eine Spalte und enthält den Namen, den Typ, die Genauigkeit und weitere Informationen |
10 | sth.rows => rpc Gibt die Anzahl der Zeilen zurück, die von dem ausführenden Statement verarbeitet wurden Countwenn nicht existent, wird nil。 |
11 | sth.fetchable? => true | false wenn möglicherweise Zeilen abgerufen werden können, wird truesonst false。 |
12 | sth.cancel Lösen Sie die Ressourcen, die der Result-Set in Anspruch nimmt. Nach Aufruf dieser Methode können Sie keine Zeilen mehr abrufen, es sei denn, Sie rufen sie erneut auf ausführen。 |
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 INCOME > ?") sth.execute(1000) if sth.column_names.size == 0 then puts "Statement has no result set" printf "Number of rows affected: %d\n", sth.rows else puts "Statement has a result set" rows = sth.fetch_all printf "Number of rows: %d\n", rows.size printf "Number of columns: %d\n", sth.column_names.size sth.column_info.each_with_index do |info, i| printf "--- Column %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"] ende ende sth.finish rescue DBI::DatabaseError => e puts "Es ist ein Fehler aufgetreten" puts "Fehlercode: #{e.err}" puts "Fehlermeldung: #{e.errstr}" sichern # Trennung der Verbindung zum Server dbh.disconnect if dbh ende
Dies erzeugt folgende Ergebnisse:
Der Anweisung wird ein Ergebnisset zugewiesen Anzahl der Zeilen: 5 Anzahl der Spalten: 5 --- Spalte 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 --- Spalte 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 --- Spalte 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 --- Spalte 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 --- Spalte 4 (INCOME) --- 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