Latest web development tutorials

Rubí operación de lectura DBI

DBI ofrece una serie de diferentes maneras de obtener los registros de la base de datos.dap Supongamos que es un mangode base dedatos,algo es un identificador de instrucción:

序号方法 & 描述
1db.select_one( stmt, *bindvars ) => aRow | nil
执行带有bindvars绑定在参数标记前的stmt语句。返回第一行,如果结果集为空则返回nil
2db.select_all( stmt, *bindvars ) => [aRow, ...] | nil

db.select_all( stmt, *bindvars ){ |aRow| aBlock }

执行带有bindvars绑定在参数标记前的stmt语句。调用不带有块的该方法,返回一个包含所有行的数组。如果给出了一个块,则会为每行调用该方法。
3sth.fetch => aRow | nil
返回下一行 。如果在结果中没有下一行,则返回nil
4sth.fetch { |aRow| aBlock }
为结果集中剩余的行调用给定的块。
5sth.fetch_all => [aRow, ...]
返回保存在数组中的结果集的所有剩余的行。
6sth.fetch_many( count ) => [aRow, ...]
返回保存在 [aRow, ...] 数组中的往下第count行。
7sth.fetch_scroll( direction, offset=1 ) => aRow | nil
返回direction参数和offset指定的行。除了 SQL_FETCH_ABSOLUTE 和 SQL_FETCH_RELATIVE,其他方法都会丢弃参数offsetdirection参数可能的值,请查看下面的表格。
8sth.column_names => anArray
返回列的名称。
9column_info => [ aColumnInfo, ... ]
返回 DBI::ColumnInfo 对象的数组。每个对象存储有关某个列的信息,并包含该列的名称、类型、精度等其他更多的信息。
10sth.rows => rpc
返回执行语句处理的行数Count,如果不存在则返回nil
11sth.fetchable? => true | false
如果可能获取行,则返回true,否则返回false
12sth.cancel
释放结果集所占有的资源。在调用该方法后,您就不能在获取行了,除非再次调用execute
13sth.finish
释放准备语句所占有的资源。在调用该方法后,您就不能在该对象上调用其他进一步操作的方法了。

el parámetro de dirección

Los siguientes valores se pueden utilizar método de parámetrosfetch_scrolldirección:

常量描述
DBI::SQL_FETCH_FIRST获取第一行。
DBI::SQL_FETCH_LAST获取最后一行。
DBI::SQL_FETCH_NEXT获取下一行。
DBI::SQL_FETCH_PRIOR获取上一行。
DBI::SQL_FETCH_ABSOLUTE获取在该位置偏移处的行。
DBI::SQL_FETCH_RELATIVE获取距离当前行该偏移量的行。

Ejemplos

El siguiente ejemplo muestra cómo obtener una declaración de metadatos. Supongamos que tenemos la tabla EMPLOYEE.

#! / Usr / bin / ruby-w

requerir "DBI"

empezar
     # Conecta con el servidor MySQL dap = DBI.connect ( "DBI: MySQL: TESTDB: localhost", 
	                    "UsuarioDePrueba", "test123")
     sth = dbh.prepare ( "SELECT * FROM EMPLEADOS 
	                    Cuando las rentas>? ")
     sth.execute (1000)
     si sth.column_names.size == 0, entonces
        pone "Declaración no tiene conjunto de resultados"
        printf "Número de filas afectadas:% d \ n", sth.rows
     otro
        pone "Declaración tiene un conjunto de resultados"
        rows = sth.fetch_all
        printf "Número de filas:% d \ n", rows.size
        printf "Número de columnas:% d \ n", sth.column_names.size
        sth.column_info.each_with_index hacer | información, i |
          printf "--- columna% d (% s) --- \ n", i, info [ "nombre"]
          printf "SQL_TYPE:% s \ n", info [ "SQL_TYPE"]
          printf "nombre_tipo:% s \ n", info [ "nombre_tipo"]
          printf "precisión:% s \ n", info [ "precisión"]
          printf "escala:% s \ n", info [ "escala"]
          printf "anulable:% s \ n", info [ "anulable"]
          printf "indexados:% s \ n", info [ "indexados"]
          printf "primario:% s \ n", info [ "primaria"]
          printf "único:% s \ n", info [ "única"]
          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"]
      final
   final
   sth.finish
rescate DBI :: DatabaseError => e
     pone "Se ha producido un error"
     pone "Código de error: # {} e.err"
     pone "Mensaje de error: # {} e.errstr"
asegurar
     dbh.disconnect conexión si dap # desconectarse del servidor
final

Esto produce los siguientes resultados:

Declaración tiene un conjunto de resultados
Número de filas: 5
Número de columnas: 5
--- Columna 0 (FIRST_NAME) ---
SQL_TYPE: 12
nombre_tipo: VARCHAR
precisión: 20
escala: 0
anulable: true
indexada: falsa
primaria: falsa
único: falsa
mysql_type: 254
mysql_type_name: VARCHAR
mysql_length: 20
mysql_max_length: 4
mysql_flags: 0
--- Columna 1 (LAST_NAME) ---
SQL_TYPE: 12
nombre_tipo: VARCHAR
precisión: 20
escala: 0
anulable: true
indexada: falsa
primaria: falsa
único: falsa
mysql_type: 254
mysql_type_name: VARCHAR
mysql_length: 20
mysql_max_length: 5
mysql_flags: 0
--- Columna 2 (AGE) ---
SQL_TYPE: 4
nombre_tipo: INTEGER
precisión: 11
escala: 0
anulable: true
indexada: falsa
primaria: falsa
único: falsa
mysql_type: 3
mysql_type_name: INT
mysql_length: 11
mysql_max_length: 2
mysql_flags: 32768
--- Columna 3 (sexo) ---
SQL_TYPE: 12
nombre_tipo: VARCHAR
precisión: 1
escala: 0
anulable: true
indexada: falsa
primaria: falsa
único: falsa
mysql_type: 254
mysql_type_name: VARCHAR
mysql_length: 1
mysql_max_length: 1
mysql_flags: 0
--- Columna 4 (INGRESOS) ---
SQL_TYPE: 6
nombre_tipo: FLOAT
precisión: 12
escala: 31
anulable: true
indexada: falsa
primaria: falsa
único: falsa
mysql_type: 4
mysql_type_name: FLOAT
mysql_length: 12
mysql_max_length: 4
mysql_flags: 32768