English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
DBI propose plusieurs méthodes différentes pour obtenir des enregistrements à partir de la base de données. Supposons que dbh est un handle de base de données :sth est un handle d'instruction :
numéro | méthode & description |
---|---|
1 | db.select_one( stmt, *bindvars ) => aRow | nil exécuter avec bindvars lié avant les marqueurs de paramètres stmt instruction. Retourne la première ligne, retourne nil si le jeu de résultats est vide nil。 |
2 | db.select_all( stmt, *bindvars ) => [aRow, ...] | nil db.select_all( stmt, *bindvars ){ |aRow| aBlock } exécuter avec bindvars lié avant les marqueurs de paramètres stmt instruction. Appel de cette méthode sans bloc, retourne un tableau contenant toutes les lignes. Si un bloc est fourni, la méthode est appelée pour chaque ligne. |
3 | sth.fetch => aRow | nil retournela ligne suivante. Si il n'y a pas de ligne suivante dans le résultat, retourne nil。 |
4 | sth.fetch { |aRow| aBlock } appelle le bloc donné pour les lignes restantes du jeu de résultats. |
5 | sth.fetch_all => [aRow, ...] retourne toutes les lignes restantes du jeu de résultats stockées dans l'array. |
6 | sth.fetch_many( count ) => [aRow, ...] retourne le nombre de lignes vers le bas dans l'array [aRow, ...] count ligne. |
7 | sth.fetch_scroll( direction, offset=1 ) => aRow | nil retourne direction et offset ligne spécifiée. Sauf pour SQL_FETCH_ABSOLUTE et SQL_FETCH_RELATIVE, d'autres méthodes ignoreront les paramètres offset。direction valeurs possibles des paramètres, voir le tableau suivant. |
8 | sth.column_names => anArray retourne le nom de la colonne |
9 | column_info => [ aColumnInfo, ... ] retourne un tableau d'objets ColumnInfo DBI. Chaque objet contient des informations sur une colonne, y compris le nom de la colonne, le type, la précision et d'autres informations supplémentaires. |
10 | sth.rows => rpc retourne le nombre de lignes traitées par l'instruction d'exécution Countretourne, si elle n'existe pas nil。 |
11 | sth.fetchable? => true | false retourne si possible de lignes truesinon retourne false。 |
12 | sth.cancel Libérer les ressources occupées par le jeu de résultats. Après l'appel de cette méthode, vous ne pouvez plus obtenir de lignes, sauf si vous appelez à nouveau execute。 |
13 | sth.finish 释放准备语句所占有的资源。在调用该方法后,您就不能在该对象上调用其他进一步操作的方法了。 |
下面的值可用于 fetch_scroll 方法的 direction 参数:
常量 | 描述 |
---|---|
DBI::SQL_FETCH_FIRST | 获取第一行。 |
DBI::SQL_FETCH_LAST | 获取最后一行。 |
DBI::SQL_FETCH_NEXT | 获取下一行。 |
DBI::SQL_FETCH_PRIOR | 获取上一行。 |
DBI::SQL_FETCH_ABSOLUTE | 获取在该位置偏移处的行。 |
DBI::SQL_FETCH_RELATIVE | 获取距离当前行该偏移量的行。 |
下面的示例演示了如何获取一个语句的元数据。假设我们有 EMPLOYEE 表。
#!/usr/bin/ruby -w require "dbi" begin # 连接到 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 --- Colonne 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 --- Colonne 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 --- Colonne 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 --- Colonne 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