- Ruby基础知识
- Ruby - 主页
- Ruby - 概述
- Ruby - 环境设置
- Ruby - 语法
- Ruby - 类和对象
- Ruby - 变量
- Ruby - 运算符
- Ruby - 评论
- Ruby - IF...ELSE
- Ruby - 循环
- Ruby - 方法
- Ruby - 块
- Ruby - 模块
- Ruby - 字符串
- Ruby - 数组
- Ruby - 哈希
- Ruby - 日期和时间
- Ruby - 范围
- Ruby - 迭代器
- Ruby - 文件 I/O
- Ruby - 例外
用于读取操作的 Ruby DBI 方法
DBI 提供了多种不同的方法来从数据库中获取记录。假设dbh是数据库句柄,sth是语句句柄 -
先生。 | 带有描述的方法 |
---|---|
1 | db.select_one( stmt, *bindvars ) = > aRow | 零 执行stmt语句,并预先将bindvars绑定到参数标记。返回第一行,如果结果集为空,则返回nil 。 |
2 | db.select_all( stmt, *bindvars ) => [aRow, ...] | 零 db.select_all( stmt, *bindvars ){ |aRow| 块 } 执行stmt语句,并预先将bindvars绑定到参数标记。在没有块的情况下调用此方法会返回一个包含所有行的数组。如果给出了一个块,则将为每一行调用该块。 |
3 | sth.fetch => aRow | sth.fetch => aRow | 零 返回下一行。如果结果集中不再有行,则返回nil 。 |
4 | sth.fetch { |aRow| 块 } 为结果集的剩余行调用给定块。 |
5 | sth.fetch_all => [aRow, ...] 返回在数组中收集的结果集的所有剩余行。 |
6 | sth.fetch_many( count ) => [aRow, ...] 返回[aRow, ...] 数组中收集的下一个计数行。 |
7 | sth.fetch_scroll( 方向, offset=1 ) => aRow | 零 返回由方向参数和偏移量指定的行。除了 SQL_FETCH_ABSOLUTE 和 SQL_FETCH_RELATIVE 之外,所有参数的偏移量都会被丢弃。有关方向参数的可能值,请参阅下表。 |
8 | sth.column_names => anArray 返回列的名称。 |
9 | column_info => [ aColumnInfo, ... ] 返回 DBI::ColumnInfo 对象的数组。每个对象存储有关一列的信息,并包含其名称、类型、精度等。 |
10 | sth.rows => rpc 返回已执行语句的行处理计数,如果不存在则返回nil 。 |
11 | 某物可取吗?=> 真 | 错误的 如果可以获取行,则返回true ,否则返回 false。 |
12 | 取消某事 释放结果集所占用的资源。调用此方法后,将无法再获取行,直到您再次调用execute。 |
13 | 完成某事 释放准备好的语句所占用的资源。调用此方法后,不能再对该对象调用其他方法。 |
方向参数
以下值可用于fetch_scroll方法的方向参数 -
先生。 | 常数及说明 |
---|---|
1 | DBI::SQL_FETCH_FIRST 获取第一行。 |
2 | DBI::SQL_FETCH_LAST 获取最后一行。 |
3 | DBI::SQL_FETCH_NEXT 获取下一行。 |
4 | DBI::SQL_FETCH_PRIOR 获取上一行。 |
5 | DBI::SQL_FETCH_ABSOLUTE 获取位置偏移处的行。 |
6 | DBI::SQL_FETCH_RELATIVE 获取与当前行偏移的行。 |
例子
以下示例显示如何获取语句的元数据。考虑我们在上一章中创建的 EMPLOYEE 表。
#!/usr/bin/ruby -w require "dbi" begin # connect to the MySQL server 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 server 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 --- 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