English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Operazioni di lettura Ruby DBI

DBI fornisce diversi metodi per ottenere record dal database. Supponiamo dbh È un gestore di database:sth È un gestore di statement:

Numero di ordinamentoMetodo & Descrizione
1db.select_one( stmt, *bindvars ) => aRow | nil
Esegui con bindvars legato prima del segno di parametro stmt Esempio di statement. Restituisce la prima riga, se il set di risultati è vuoto viene restituito nil.
2db.select_all( stmt, *bindvars ) => [aRow, ...] | nil
db.select_all( stmt, *bindvars ){ |aRow| aBlock }

Esegui con bindvars legato prima del segno di parametro stmt Esempio di statement. Se il metodo non viene chiamato con un blocco, viene restituito un array contenente tutte le righe. Se viene fornito un blocco, il metodo viene chiamato per ogni riga.
3sth.fetch => aRow | nil
Restituiscela riga successiva. Se non ci sono altre righe nel risultato, viene restituito nil.
4sth.fetch { |aRow| aBlock }
Chiama il blocco fornito per le righe rimanenti del set di risultati.
5sth.fetch_all => [aRow, ...]
Restituisce tutte le righe rimanenti del set di risultati salvato nell'array.
6sth.fetch_many( count ) => [aRow, ...]
Restituisce il numero di righe successivo salvato nell'array [aRow, ...] count riga.
7sth.fetch_scroll( direction, offset=1 ) => aRow | nil
Restituisce direction e offset Riga specificata. Oltre a SQL_FETCH_ABSOLUTE e SQL_FETCH_RELATIVE, gli altri metodi scartano i parametri offset.direction Valori possibili dei parametri, vedere la tabella sottostante.
8sth.column_names => anArray
Restituisce il nome della colonna
9column_info => [ aColumnInfo, ... ]
Restituisce un array di oggetti DBI::ColumnInfo. Ogni oggetto contiene informazioni su una colonna, tra cui il nome della colonna, il tipo, la precisione e altre informazioni aggiuntive.
10sth.rows => rpc
Restituisce il numero di righe gestite dall'espressione eseguita Count, se non esiste, restituisce nil.
11sth.fetchable? => true | false
Restituisce true se è possibile ottenere una riga, altrimenti true, altrimenti restituisce false.
12sth.cancel
Rilascia le risorse occupate dal set di risultati. Dopo aver chiamato questo metodo, non puoi ottenere più righe, a meno di chiamare di nuovo execute.
13sth.finish
Rilascia le risorse occupate dalla preparazione della query. Dopo aver chiamato questo metodo, non puoi chiamare altri metodi di ulteriore operazione sull'oggetto.

parametro direction

I seguenti valori possono essere usati fetch_scroll Il parametro direction del metodo:

CostantiDescrizione
DBI::SQL_FETCH_FIRSTOttieni la prima riga.
DBI::SQL_FETCH_LASTOttieni l'ultima riga.
DBI::SQL_FETCH_NEXTOttieni la riga successiva.
DBI::SQL_FETCH_PRIOROttieni la riga precedente.
DBI::SQL_FETCH_ABSOLUTEOttieni la riga a una posizione specifica.
DBI::SQL_FETCH_RELATIVEOttieni la riga a una certa offset rispetto alla riga corrente.

Esempio online

Esempio di come ottenere i metadati di una query. Supponiamo di avere una tabella EMPLOYEE.

#!/usr/bin/ruby -w
require "dbi"
begin
     # Connettersi al server 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"]
      end
   end
   sth.finish
rescue DBI::DatabaseError => e
     puts "An error occurred"
     puts "Error code: #{e.err}"
     puts "Error message: #{e.errstr}"
ensure
     # Disconnect from the server
     dbh.disconnect if dbh
end

This will produce the following results:

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
--- Column 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