English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
DBI ofrece varios métodos diferentes para obtener registros de la base de datos. Supongamos dbh es un manejador de base de datos:sth es un manejador de sentencia:
número de secuencia | método & descripción |
---|---|
1 | db.select_one( stmt, *bindvars ) => aRow | nulo ejecutar con bindvars vinculado antes de la marca de parámetro stmt sentencia. Devuelve la primera fila, si el conjunto de resultados está vacío, devuelve nulo。 |
2 | db.select_all( stmt, *bindvars ) => [aRow, ...] | nulo db.select_all( stmt, *bindvars ){ |aRow| aBlock } ejecutar con bindvars vinculado antes de la marca de parámetro stmt sentencia. Al llamar a este método sin bloque, devuelve un array que contiene todas las filas. Si se proporciona un bloque, se llama a este método para cada fila. |
3 | sth.fetch => aRow | nulo devuelvela siguiente fila. Si no hay la siguiente fila en los resultados, devuelve nulo。 |
4 | sth.fetch { |aRow| aBlock } llama al bloque dado para las filas restantes del conjunto de resultados. |
5 | sth.fetch_all => [aRow, ...] devuelve todas las filas restantes del conjunto de resultados almacenadas en el array. |
6 | sth.fetch_many( count ) => [aRow, ...] devuelve la posición hacia abajo del número especificado en el array [aRow, ...]. count fila. |
7 | sth.fetch_scroll( direction, offset=1 ) => aRow | nulo devuelve direction y offset fila especificada. Además de SQL_FETCH_ABSOLUTE y SQL_FETCH_RELATIVE, otros métodos descartarán los parámetros offset。direction valores posibles del parámetro, consulte la tabla a continuación. |
8 | sth.column_names => anArray devuelve el nombre de la columna. |
9 | column_info => [ aColumnInfo, ... ] devuelve un array de objetos DBI::ColumnInfo. Cada objeto almacena información sobre una columna, incluyendo el nombre de la columna, el tipo, la precisión y otros detalles adicionales. |
10 | sth.rows => rpc devuelve el número de filas procesadas por la sentencia de ejecución Countde lo contrario, devuelve nulo。 |
11 | sth.fetchable? => verdadero | falso devuelve verdadero si es posible obtener filas verdaderode lo contrario, devuelve falso。 |
12 | sth.cancel liberar los recursos ocupados por el conjunto de resultados. Después de llamar a este método, ya no puede obtener filas, a menos que llame a ejecutar。 |
13 | sth.finish Libera los recursos ocupados por la declaración preparada. Después de llamar a este método, no se pueden llamar a otros métodos de operación adicionales en el objeto. |
Los siguientes valores se pueden usar fetch_scroll El parámetro de dirección del método:
Constante | Descripción |
---|---|
DBI::SQL_FETCH_FIRST | Obtener la primera fila. |
DBI::SQL_FETCH_LAST | Obtener la última fila. |
DBI::SQL_FETCH_NEXT | Obtener la siguiente fila. |
DBI::SQL_FETCH_PRIOR | Obtener la fila anterior. |
DBI::SQL_FETCH_ABSOLUTE | Obtener la fila en el desplazamiento desde esta posición. |
DBI::SQL_FETCH_RELATIVE | Obtener la fila en el desplazamiento desde la fila actual. |
El siguiente ejemplo demuestra cómo obtener los metadatos de una declaración. Supongamos que tenemos la tabla EMPLOYEE.
#!/usr/bin/ruby -w require "dbi" begin # Conectar al servidor 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 # 断开与服务器的连接 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 precisión: 20 escala: 0 nulo: true indexado: false primario: false único: false mysql_type: 254 mysql_type_name: VARCHAR mysql_length: 20 mysql_max_length: 4 mysql_flags: 0 --- Columna 1 (LAST_NAME) --- sql_type: 12 type_name: VARCHAR precisión: 20 escala: 0 nulo: true indexado: false primario: false único: false mysql_type: 254 mysql_type_name: VARCHAR mysql_length: 20 mysql_max_length: 5 mysql_flags: 0 --- Columna 2 (AGE) --- sql_type: 4 type_name: INTEGER precisión: 11 escala: 0 nulo: true indexado: false primario: false único: false mysql_type: 3 mysql_type_name: INT mysql_length: 11 mysql_max_length: 2 mysql_flags: 32768 --- Columna 3 (SEXO) --- sql_type: 12 type_name: VARCHAR precisión: 1 escala: 0 nulo: true indexado: false primario: false único: false mysql_type: 254 mysql_type_name: VARCHAR mysql_length: 1 mysql_max_length: 1 mysql_flags: 0 --- Columna 4 (INGRESO) --- sql_type: 6 type_name: FLOAT precisión: 12 escala: 31 nulo: true indexado: false primario: false único: false mysql_type: 4 mysql_type_name: FLOAT mysql_length: 12 mysql_max_length: 4 mysql_flags: 32768