Latest web development tutorials

روبي DBI مقروءة عملية

يوفر DBI عدد من الطرق المختلفة للحصول على السجلات من قاعدة البيانات.DBH افترض هو التعامل معقاعدةالبيانات،لك شيء هو التعامل مع البيان:

序号方法 & 描述
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获取距离当前行该偏移量的行。

أمثلة

يوضح المثال التالي كيفية الحصول على بيان من البيانات الوصفية. لنفترض أن لدينا جدول الموظفين.

#! / البيرة / بن / روبي -w

تتطلب "DBI"

بدأ
     # اتصال الخلية الخادم DBH = DBI.connect ( "DBI: الخلية: TESTDB: مضيف"، 
	                    "Testuser"، "test123")
     لك شيء = dbh.prepare ( "SELECT * FROM موظف 
	                    إذا كان الدخل>؟ ")
     sth.execute (1000)
     إذا sth.column_names.size == 0 ثم
        يضع "بيان لا يوجد لديه مجموعة النتائج"
        printf "عدد الصفوف المتأثرة:٪ د \ ن"، sth.rows
     آخر
        يضع "بيان له نتيجة تعيين"
        الصفوف = sth.fetch_all
        printf "عدد الصفوف:٪ د \ ن"، rows.size
        printf "عدد الأعمدة:٪ د \ ن"، sth.column_names.size
        sth.column_info.each_with_index القيام | معلومات، ط |
          printf "--- العمود٪ د (٪ ق) --- \ ن"، ط، معلومات [ "اسم"]
          printf "sql_type:٪ ق \ ن"، معلومات [ "sql_type"]
          printf "TYPE_NAME:٪ ق \ ن"، معلومات [ "TYPE_NAME"]
          printf "الدقة:٪ ق \ ن"، معلومات [ "الدقة"]
          printf "على نطاق و:٪ ق \ ن"، معلومات [ "نطاق"]
          printf "قيم الفارغة:٪ ق \ ن"، معلومات [ "قيم الفارغة"]
          printf "فهرستها:٪ ق \ ن"، معلومات [ "فهرسة"]
          printf "الابتدائية:٪ ق \ ن"، معلومات [ "الأولية"]
          printf "فريدة من نوعها:٪ ق \ ن"، معلومات [ "فريدة من نوعها"]
          printf "mysql_type:٪ ق \ ن"، معلومات [ "mysql_type"]
          printf "mysql_type_name:٪ ق \ ن"، معلومات [ "mysql_type_name"]
          printf "mysql_length:٪ ق \ ن"، معلومات [ "mysql_length"]
          printf "mysql_max_length:٪ ق \ ن"، معلومات [ "mysql_max_length"]
          printf "mysql_flags:٪ ق \ ن"، معلومات [ "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
قيم الفارغة: صحيح
فهرستها: كاذبة
المرحلة الابتدائية: كاذبة
فريدة من نوعها: كاذبة
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
قيم الفارغة: صحيح
فهرستها: كاذبة
المرحلة الابتدائية: كاذبة
فريدة من نوعها: كاذبة
mysql_type: 254
mysql_type_name: VARCHAR
mysql_length: 20
mysql_max_length: 5
mysql_flags: 0
--- العمود 2 (AGE) ---
sql_type: 4
TYPE_NAME: عدد صحيح
الدقة: 11
على نطاق و: 0
قيم الفارغة: صحيح
فهرستها: كاذبة
المرحلة الابتدائية: كاذبة
فريدة من نوعها: كاذبة
mysql_type: 3
mysql_type_name: INT
mysql_length: 11
mysql_max_length: 2
mysql_flags: 32768
--- العمود 3 (الجنس) ---
sql_type: 12
TYPE_NAME: VARCHAR
الدقة: 1
على نطاق و: 0
قيم الفارغة: صحيح
فهرستها: كاذبة
المرحلة الابتدائية: كاذبة
فريدة من نوعها: كاذبة
mysql_type: 254
mysql_type_name: VARCHAR
mysql_length: 1
mysql_max_length: 1
mysql_flags: 0
--- العمود 4 (الدخل) ---
sql_type: 6
TYPE_NAME: تعويم
الدقة: 12
على نطاق و: 31
قيم الفارغة: صحيح
فهرستها: كاذبة
المرحلة الابتدائية: كاذبة
فريدة من نوعها: كاذبة
mysql_type: 4
mysql_type_name: تعويم
mysql_length: 12
mysql_max_length: 4
mysql_flags: 32768