English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
O DBI oferece várias maneiras diferentes de obter registros do banco de dados. Supondo dbh dbhé um manipulador de banco de dados: sth
é um manipulador de instrução: | número de série |
---|---|
1 | método & descrição *bindvars ) => aRow | nulo executar com bindvars vinculado antes do marcador de parâmetro stmt instrução. Retorna a primeira linha, se o conjunto de resultados estiver vazio, retorna nulo。 |
2 | db.select_all( stmt, *bindvars ) => [aRow, ...] | nulo db.select_all( stmt, *bindvars ){ |aRow| aBlock } executar com bindvars vinculado antes do marcador de parâmetro stmt instrução. A chamada deste método sem bloco retorna um array contendo todas as linhas. Se um bloco for fornecido, o método será chamado para cada linha. |
3 | sth.fetch => aRow | nulo retornaa próxima linha. Se não houver próxima linha no conjunto de resultados, retorna nulo。 |
4 | sth.fetch { |aRow| aBlock } chama o bloco fornecido para as linhas restantes do conjunto de resultados. |
5 | sth.fetch_all => [aRow, ...] retorna todas as linhas restantes do conjunto de resultados armazenadas no array. |
6 | sth.fetch_many( count ) => [aRow, ...] retorna a linha para baixo na array [aRow, ...] count linha. |
7 | sth.fetch_scroll( direction, offset=1 ) => aRow | nulo retorna direction e offset a linha especificada. Exceto para SQL_FETCH_ABSOLUTE e SQL_FETCH_RELATIVE, outras métodos descartam os parâmetros offset。direction valores possíveis do parâmetro, consulte a tabela abaixo. |
8 | sth.column_names => anArray retorna o nome da coluna |
9 | column_info => [ aColumnInfo, ... ] retorna um array de objetos ColumnInfo DBI. Cada objeto armazena informações sobre uma coluna, incluindo o nome, tipo, precisão e outras informações adicionais. |
10 | sth.rows => rpc retorna o número de linhas tratadas pela instrução de execução Countse não existir, retorna nulo。 |
11 | sth.fetchable? => verdadeiro | falso se possível obter linhas, retorna verdadeirocaso contrário, retorna falso。 |
12 | sth.cancel liberar os recursos ocupados pelo conjunto de resultados. Após a chamada deste método, você não pode obter mais linhas, a menos que chame novamente execute。 |
13 | sth.finish Libere os recursos ocupados pela declaração preparada. Após a chamada deste método, você não pode chamar outros métodos de operação adicional no objeto. |
Os seguintes valores podem ser usados fetch_scroll O parâmetro de método direction:
Constante | Descrição |
---|---|
DBI::SQL_FETCH_FIRST | Obter a primeira linha. |
DBI::SQL_FETCH_LAST | Obter a última linha. |
DBI::SQL_FETCH_NEXT | Obter a próxima linha. |
DBI::SQL_FETCH_PRIOR | Obter a linha anterior. |
DBI::SQL_FETCH_ABSOLUTE | Obter a linha no local de deslocamento. |
DBI::SQL_FETCH_RELATIVE | Obter a linha de deslocamento atual em relação à linha atual. |
O exemplo a seguir demonstra como obter os metadados de uma instrução. Suponha que temos a tabela EMPLOYEE.
#!/usr/bin/ruby -w require "dbi" begin # Conectando ao 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 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 --- Coluna 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 --- Coluna 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 --- Coluna 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 --- Coluna 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