RubyのDBIリード動作
DBIは、データベースからレコードを取得するには、いくつかの異なる方法を提供します。 仮定DBHは、データベース・ハンドルで、s番目の文ハンドルです。
序号 | 方法 & 描述 |
---|---|
1 | db.select_one( stmt, *bindvars ) => aRow | nil 执行带有bindvars绑定在参数标记前的stmt语句。返回第一行,如果结果集为空则返回nil。 |
2 | db.select_all( stmt, *bindvars ) => [aRow, ...] | nil db.select_all( stmt, *bindvars ){ |aRow| aBlock } 执行带有bindvars绑定在参数标记前的stmt语句。调用不带有块的该方法,返回一个包含所有行的数组。如果给出了一个块,则会为每行调用该方法。 |
3 | sth.fetch => aRow | nil 返回下一行 。如果在结果中没有下一行,则返回nil。 |
4 | sth.fetch { |aRow| aBlock } 为结果集中剩余的行调用给定的块。 |
5 | sth.fetch_all => [aRow, ...] 返回保存在数组中的结果集的所有剩余的行。 |
6 | sth.fetch_many( count ) => [aRow, ...] 返回保存在 [aRow, ...] 数组中的往下第count行。 |
7 | sth.fetch_scroll( direction, offset=1 ) => aRow | nil 返回direction参数和offset指定的行。除了 SQL_FETCH_ABSOLUTE 和 SQL_FETCH_RELATIVE,其他方法都会丢弃参数offset。direction参数可能的值,请查看下面的表格。 |
8 | sth.column_names => anArray 返回列的名称。 |
9 | column_info => [ aColumnInfo, ... ] 返回 DBI::ColumnInfo 对象的数组。每个对象存储有关某个列的信息,并包含该列的名称、类型、精度等其他更多的信息。 |
10 | sth.rows => rpc 返回执行语句处理的行数Count,如果不存在则返回nil。 |
11 | sth.fetchable? => true | false 如果可能获取行,则返回true,否则返回false。 |
12 | sth.cancel 释放结果集所占有的资源。在调用该方法后,您就不能在获取行了,除非再次调用execute。 |
13 | sth.finish 释放准备语句所占有的资源。在调用该方法后,您就不能在该对象上调用其他进一步操作的方法了。 |
方向パラメータ
次の値は、方向パラメータfetch_scroll方法を使用することができます。
常量 | 描述 |
---|---|
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に/ルビー-w 必要 "DBI」 始めます MySQLサーバへの#接続DBH = DBI.connect( "DBI:mysqlの:TESTDB:localhost"を、 「TESTUSER」、「test123」) STH = dbh.prepare( "SELECT * FROM EMPLOYEE WHERE所得>? ") sth.execute(1000) 場合sth.column_names.size == 0その後、 「文は結果セットを持っていない」ます printfの「影響を受ける行の数:%dは\ nを "、sth.rows ほかに 「文が結果セットを持っている "置きます 行= sth.fetch_all printfの「行数:%dは\ nを "、rows.size printfの「列数:%dは\ nを "、sth.column_names.size 情報、私| sth.column_info.each_with_index行います| printfの "---列%d個(%sの)--- \ n"は、私、インフォ[「名」] printfの「SQL_TYPE:%sの\ nを "、インフォ[" SQL_TYPE」] printfの「タイプ名:%sの\ nを "、インフォ[「タイプ名」] printfの "精度:%sの\ nを"、インフォ[「精密」] printfの "スケール:%sの\ nを"、インフォ[「スケール」] printfの「NULL可能:%sの\ nを "、インフォ[「NULL可能」] printfの "インデックス付け:%sのを\ n"、インフォ[ "インデックス付け」] printfの「一次:%sの\ nを "、インフォ[「主」] printfの「ユニーク:%sのを\ n "、インフォ["ユニーク "] printfの「mysql_type:%sの\ nを "、インフォ[" mysql_type」] printfの「mysql_type_name:%sの\ nを "、インフォ[" mysql_type_name」] printfの「mysql_length:%sの\ nを "、インフォ[" mysql_length」] printfの「mysql_max_length:%sの\ nを "、インフォ[" mysql_max_length」] printfの「mysql_flags:%sの\ nを "、インフォ[" mysql_flags」] 終了 終了 sth.finish 救助DBI :: DatabaseError =>電子 プット」エラーが発生しました」 プット "エラーコード:#{e.err}" プット」エラーメッセージ:#{e.errstr} " 確保 接続dbh.disconnect場合は、サーバーからのDBHの#切断 終了
これにより、以下の結果が得られます。
声明では、結果セットを持っています 行の数:5 列の数:5 ---列0(FIRST_NAME)--- SQL_TYPE:12 TYPE_NAME:VARCHAR 精度:20 スケール:0 NULL可能:真 インデックス付け:偽 プライマリ:偽 ユニーク:偽 mysql_type:254 mysql_type_name:VARCHAR mysql_length:20 mysql_max_length:4 mysql_flags:0 ---列1(LAST_NAME)--- SQL_TYPE:12 TYPE_NAME:VARCHAR 精度:20 スケール:0 NULL可能:真 インデックス付け:偽 プライマリ:偽 ユニーク:偽 mysql_type:254 mysql_type_name:VARCHAR mysql_length:20 mysql_max_length:5 mysql_flags:0 ---列2(AGE)--- SQL_TYPE:4 TYPE_NAME:INTEGER 精度:11 スケール:0 NULL可能:真 インデックス付け:偽 プライマリ:偽 ユニーク:偽 mysql_type:3 mysql_type_name:INT mysql_length:11 mysql_max_length:2 mysql_flags:32768 ---列3(SEX)--- SQL_TYPE:12 TYPE_NAME:VARCHAR 精度:1 スケール:0 NULL可能:真 インデックス付け:偽 プライマリ:偽 ユニーク:偽 mysql_type:254 mysql_type_name:VARCHAR mysql_length:1 mysql_max_length:1 mysql_flags:0 ---列4(INCOME)--- SQL_TYPE:6 TYPE_NAME:FLOAT 精度:12 スケール:31 NULL可能:真 インデックス付け:偽 プライマリ:偽 ユニーク:偽 mysql_type:4 mysql_type_name:FLOAT mysql_length:12 mysql_max_length:4 mysql_flags:32768