Latest web development tutorials

RubyのDBIリード動作

DBIは、データベースからレコードを取得するには、いくつかの異なる方法を提供します。 仮定DBHは、データベース・ハンドル、s番目の文ハンドルです。

序号方法 & 描述
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
释放准备语句所占有的资源。在调用该方法后,您就不能在该对象上调用其他进一步操作的方法了。

方向パラメータ

次の値は、方向パラメータ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