English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
DBI fornisce diversi metodi per ottenere record dal database. Supponiamo dbh È un gestore di database:sth È un gestore di statement:
Numero di ordinamento | Metodo & Descrizione |
---|---|
1 | db.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. |
2 | db.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. |
3 | sth.fetch => aRow | nil Restituiscela riga successiva. Se non ci sono altre righe nel risultato, viene restituito nil. |
4 | sth.fetch { |aRow| aBlock } Chiama il blocco fornito per le righe rimanenti del set di risultati. |
5 | sth.fetch_all => [aRow, ...] Restituisce tutte le righe rimanenti del set di risultati salvato nell'array. |
6 | sth.fetch_many( count ) => [aRow, ...] Restituisce il numero di righe successivo salvato nell'array [aRow, ...] count riga. |
7 | sth.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. |
8 | sth.column_names => anArray Restituisce il nome della colonna |
9 | column_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. |
10 | sth.rows => rpc Restituisce il numero di righe gestite dall'espressione eseguita Count, se non esiste, restituisce nil. |
11 | sth.fetchable? => true | false Restituisce true se è possibile ottenere una riga, altrimenti true, altrimenti restituisce false. |
12 | sth.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. |
13 | sth.finish Rilascia le risorse occupate dalla preparazione della query. Dopo aver chiamato questo metodo, non puoi chiamare altri metodi di ulteriore operazione sull'oggetto. |
I seguenti valori possono essere usati fetch_scroll Il parametro direction del metodo:
Costanti | Descrizione |
---|---|
DBI::SQL_FETCH_FIRST | Ottieni la prima riga. |
DBI::SQL_FETCH_LAST | Ottieni l'ultima riga. |
DBI::SQL_FETCH_NEXT | Ottieni la riga successiva. |
DBI::SQL_FETCH_PRIOR | Ottieni la riga precedente. |
DBI::SQL_FETCH_ABSOLUTE | Ottieni la riga a una posizione specifica. |
DBI::SQL_FETCH_RELATIVE | Ottieni la riga a una certa offset rispetto alla riga corrente. |
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