English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby DBI Read 操作

DBI 提供了一些从数据库获取记录的不同方法。假设 dbh 是一个数据库句柄,sth 是一个语句句柄:

序号方法 & 描述
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, ...] عدد السطر.
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/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 "--- \t\t\t\tColumn \d \t\t\t\t(%s) \t\t\t---\n", i, info["name"]
          printf "sql_type: \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t%s\n", info["sql_type"]
          printf "type_name: \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t%s\n", info["type_name"]
          printf "precision: \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t%s\n", info["precision"]
          printf "scale: \t\t\t\t\t\t\t\t\t\t\t\t\t\t%s\n", info["scale"]
          printf "nullable: \t\t\t\t\t\t\t\t\t\t\t\t\t%s\n", info["nullable"]
          printf "indexed: \t\t\t\t\t\t\t\t\t\t\t\t%s\n", info["indexed"]
          printf "primary: \t\t\t\t\t\t\t\t\t\t\t%s\n", info["primary"]
          printf "unique: \t\t\t\t\t\t\t\t\t\t%s\n", info["unique"]
          printf "mysql_type: \t\t\t\t\t\t\t\t%s\n", info["mysql_type"]
          printf "mysql_type_name: \t%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 the server
     dbh.disconnect if dbh
end

This will produce the following results:

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