Latest web development tutorials

الوصول إلى قاعدة البيانات روبي - DBI تعليمي

وهذا الفصل تظهر لك كيفية استخدام روبي للوصول إلى قاعدة البيانات. وتقدم وحدةروبي DBIواجهة قاعدة بيانات مستقلة مماثلة لوحدة بيرل DBI للمخطوطات روبي.

DBI وهي قاعدة بيانات واجهة مستقلة، نيابة عن واجهة قاعدة بيانات مستقلة روبي. DBI بين كود روبي مع قاعدة البيانات الأساسية يوفر طبقة تجريد التي تسمح لك لتنفيذ بسهولة التحول قاعدة البيانات. وهو يحدد مجموعة من الأساليب والمتغيرات والمعايير، يوفر واجهة قاعدة بيانات متناسقة قاعدة بيانات مستقلة.

DBI يمكن أن تتفاعل مع ما يلي:

  • ADO (كائنات بيانات ActiveX)
  • DB2
  • Frontbase
  • MSQL
  • الخلية
  • ODBC
  • وحي
  • OCI8 (أوراكل)
  • كيو
  • وكيل / الخادم
  • سكليتي
  • SQLRelay

تطبيق الهندسة المعمارية DBI

DBI مستقلة عن أي قاعدة البيانات المتوفرة في الخلفية. سواء كنت تستخدم أوراكل، الخلية، ينفورميكس، يمكنك استخدام DBI. والرسم البياني التالي يوضح بشكل واضح هذه النقطة.

العمارة روبي DBI

يستخدم روبي DBI البنية العامة طبقتين:

  • واجهة قاعدة البيانات (DBI) طبقة. هذه الطبقة هي قاعدة بيانات مستقلة وتوفر سلسلة من طريقة وصول الجمهور، وذلك باستخدام خادم قاعدة البيانات، بغض النظر عن نوع من النهج.
  • برنامج تشغيل قاعدة البيانات (DBD) طبقة. هذه الطبقة هي التي تعتمد على قاعدة البيانات، ويوفر محرك أقراص آخر الوصول إلى محركات قاعدة بيانات مختلفة. MySQL، الإنترنت، ينترباسي، أوراكل، على التوالي، وذلك باستخدام محرك أقراص آخر. كل سائق هو المسؤول عن تفسير الطلبات المقدمة من طبقة DBI، ويتم تعيين هذه الطلبات لتطبيق لطلب نوع معين من خادم قاعدة البيانات.

تثبيت

إذا كنت ترغب في كتابة البرامج النصية روبي للوصول إلى قاعدة بيانات MySQL، تحتاج إلى تثبيت وحدة روبي الخلية.

تثبيت أدوات تطوير ماي

# Ubuntu
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient15-dev

# Centos
yum install mysql-devel

نظام تشغيل ماكنتوش، تحتاج إلى تعديل ~ / .bash_profile أو ~ / ملف .profile بإضافة التعليمة البرمجية التالية:

MYSQL=/usr/local/mysql/bin
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

أو استخدام اتصال لينة:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

استخدام جواهر روبي تثبيت DBI (موصى به)

جواهر روبي حول تأسست في نوفمبر تشرين الثاني عام 2003، أصبحت جزءا من المكتبة القياسية روبي من روبي 1.9 الإصدار. مزيد من التفاصيل يمكن الاطلاع على: روبي جواهر روبي

استخدام الأحجار الكريمة تثبيت DBI ودبد-ك:

sudo gem install dbi
sudo gem install mysql
sudo gem install dbd-mysql

تركيب كود الاستخدام (روبي نسخة أقل من 1.9 إلى استخدام هذا الأسلوب)

والوحدة هي DBD، من http://tmtm.org/downloads/mysql/ruby/ تحميل.

بعد تحميل أحدث حزمة، بفك إلى دليل، تنفيذ الأمر التالي لتثبيت:

% ruby extconf.rb

或者

% ruby extconf.rb --with-mysql-dir=/usr/local/mysql

或者

% ruby extconf.rb --with-mysql-config

ثم ترجمة:

% make

الحصول على وتثبيت روبي / DBI

يمكنك تحميل وتثبيت وحدة روبي DBI من الرابط التالي:

https://github.com/erikh/ruby-dbi

قبل البدء في التثبيت، تأكد أن لديك امتيازات الجذر. الآن، قم بتثبيت الخطوات التالية لتثبيت:

خطوة 1

git clone https://github.com/erikh/ruby-dbi.git

أو مباشرة تحت الرمز آخر وبفك.

خطوة 2

أدخل الدليلروبي DBI رئيسية،استخدام برنامج التكوينsetup.rbفي الدليل. لم يتم اتباع أوامر التكوين الأكثر شيوعا من أية معلمات المعلمة التكوين. الأمر التكوين الافتراضي لتثبيت كافة برامج التشغيل.

$ ruby setup.rb config

وبشكل أكثر تحديدا، يمكنك استخدام الخيار --with لسرد جزء معين تريد استخدامها. على سبيل المثال، إذا كنت ترغب في تكوين وحدة DBI الرئيسية ومحرك الأقراص طبقة الخلية DBD، أدخل الأمر التالي:

$ ruby setup.rb config --with=dbi,dbd_mysql

خطوة 3

الخطوة الأخيرة هي لإنشاء محرك الأقراص، استخدم الأمر التالي لتثبيت:

$ ruby setup.rb setup
$ ruby setup.rb install

اتصال قواعد البيانات

لنفترض أننا تستخدم قاعدة بيانات MySQL قبل الاتصال بقاعدة البيانات، تأكد من أن:

  • لقد قمت بإنشاء قاعدة بيانات TESTDB.
  • لقد خلق موظف الجدول في TESTDB.
  • الجدول مع FIRST_NAME المجال، LAST_NAME والعمر والجنس والدخل.
  • تعيين هوية المستخدم "testuser" وكلمة السر "test123" للوصول TESTDB
  • بالفعل على جهازك بشكل صحيح تثبيت روبي وحدة DBI.
  • كنت قد رأيت الخلية تعليمي، فهم الكامنة في الخلية التشغيل.

وفيما يلي أمثلة من اتصال قاعدة بيانات MySQL "TESTDB" من:

#!/usr/bin/ruby -w

require "dbi"

begin
     # 连接到 MySQL 服务器
     dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", 
                       "testuser", "test123")
     # 获取服务器版本字符串,并显示
     row = dbh.select_one("SELECT VERSION()")
     puts "Server version: " + row[0]
rescue DBI::DatabaseError => e
     puts "An error occurred"
     puts "Error code:    #{e.err}"
     puts "Error message: #{e.errstr}"
ensure
     # 断开与服务器的连接
     dbh.disconnect if dbh
end

عند تشغيل هذا البرنامج النصي، وسوف تنتج النتائج التالية على جهاز لينكس.

Server version: 5.0.45

إذا كنت تأسيس اتصال مع مصدر البيانات، والتعامل مع قاعدة بيانات عاد (مقبض قاعدة بيانات)، وحفظها إلىDBH لاستخدامها لاحقا، أو سيتم تعيين DBHإلىقيمة معدومة،e.errوالبريد :: errstrالعودة رمز الخطأ والخطأ السلسلة.

وأخيرا، قبل أن تغادر هذا البرنامج، تأكد من إغلاق اتصال قاعدة البيانات، والإفراج عن الموارد.

عملية INSERT

عندما تريد إنشاء سجل في جدول قاعدة بيانات، تحتاج إلى استخدام عملية INSERT.

مرة واحدة في اتصال قاعدة البيانات، ونحن على استعداد لإنشاء جدول أو إدراج البيانات في الجدول لإنشاء طريقة التسجيل باستخدامتأليف أو إعدادوتنفيذ الأساليب.

استخدام تفعل بيان

البيان لا يرجع الصفوف عن طريق الاتصالبه أساليب معالجة قاعدة البيانات.يأخذ هذا الأسلوب معلمة سلسلة بيان وإرجاع عدد الصفوف التي تأثرت بيان.

dbh.do("DROP TABLE IF EXISTS EMPLOYEE")
dbh.do("CREATE TABLE EMPLOYEE (
     FIRST_NAME  CHAR(20) NOT NULL,
     LAST_NAME  CHAR(20),
     AGE INT,  
     SEX CHAR(1),
     INCOME FLOAT )" );

وبالمثل، يمكنك تنفيذعبارةSQLINSERTلإنشاء سجلات في جدول الموظفين.

#!/usr/bin/ruby -w

require "dbi"

begin
     # 连接到 MySQL 服务器
     dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", 
                       "testuser", "test123")
     dbh.do( "INSERT INTO EMPLOYEE(FIRST_NAME,
                   LAST_NAME, 
                   AGE, 
         SEX, 
         INCOME)
          VALUES ('Mac', 'Mohan', 20, 'M', 2000)" )
     puts "Record has been created"
     dbh.commit
rescue DBI::DatabaseError => e
     puts "An error occurred"
     puts "Error code:    #{e.err}"
     puts "Error message: #{e.errstr}"
     dbh.rollback
ensure
     # 断开与服务器的连接
     dbh.disconnect if dbh
end

عن طريقإعدادوتنفيذ

يمكنك استخدام DBI فيإعدادوتنفيذ طريقة لتنفيذ روبي البيانات SQL البرمجية.

لإنشاء سجل على النحو التالي:

  • بيان SQL استعداد مع بيان INSERT. وسيتحقق ذلك من خلال استخدامإعداد الأسلوب.
  • تنفيذ الاستعلام SQL، تحديد كافة النتائج من قاعدة البيانات. وسيتحققذلك عن طريق استخدام طريقة تنفيذه.
  • الافراج عن مقبض عبارة. وسيتحقق ذلك من خلال استخدامAPI النهاية.
  • إذا سارت الامور بشكل جيد، ثم عمليةارتكابها، أو يمكنك استكمال التراجع المعاملة.

هنا هو بناء الجملة من هاتين الطريقتين:

sth = dbh.prepare(statement)
sth.execute
   ... zero or more SQL operations ...
sth.finish

كلتا الطريقتين يمكن استخدامهالربط قيمة لتمرير البيانات SQL.في بعض الأحيان قد لا يكون بالنظر إلى قيمة تم إدخالها في وقت مبكر، في هذه الحالة، ويستخدم لربط القيم. استخدام علامة استفهام(؟) بدلا من القيمة الفعلية والقيمة الفعلية لتمرير من خلال تنفيذ () API.

المثال التالي على إنشاء اثنين من السجلات في الجدول الموظف:

#!/usr/bin/ruby -w

require "dbi"

begin
     # 连接到 MySQL 服务器
     dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", 
                       "testuser", "test123")
     sth = dbh.prepare( "INSERT INTO EMPLOYEE(FIRST_NAME,
                   LAST_NAME, 
                   AGE, 
         SEX, 
         INCOME)
                   VALUES (?, ?, ?, ?, ?)" )
     sth.execute('John', 'Poul', 25, 'M', 2300)
     sth.execute('Zara', 'Ali', 17, 'F', 1000)
     sth.finish
     dbh.commit
     puts "Record has been created"
rescue DBI::DatabaseError => e
     puts "An error occurred"
     puts "Error code:    #{e.err}"
     puts "Error message: #{e.errstr}"
     dbh.rollback
ensure
     # 断开与服务器的连接
     dbh.disconnect if dbh
end

إذا كنت تستخدم INSERT متعددة، ثم أولا بإعداد بيان، ومن ثم تنفيذ عدة مرات في حلقة خلال كل دورة من يدعو لها أن تفعل أكثر من ذلك بكثير بكفاءة.

عملية القراءة

تشير عملية قراءة على أي قاعدة بيانات للحصول على معلومات مفيدة من قاعدة البيانات.

مرة واحدة في اتصال قاعدة البيانات، ونحن على استعداد للاستعلام عن قاعدة البيانات. يمكننا استخدام طريقة أولا إعدادوتنفيذ طريقة للحصول على قيمة من جدول قاعدة البيانات.

الحصول على خطوة سجلت على النحو التالي:

  • وبناء على الشروط المطلوبة لإعداد استعلامات SQL. وسيتحقق ذلك من خلال استخدامإعداد الأسلوب.
  • تنفيذ الاستعلام SQL، تحديد كافة النتائج من قاعدة البيانات. وسيتحققذلك عن طريق استخدام طريقة تنفيذه.
  • واحدا تلو الآخر للحصول على نتائج، وإخراج النتائج. وسيتحقق ذلك من خلال استخدام أساليبجلب.
  • الافراج عن مقبض عبارة. وسيتحقق ذلك من خلال استخدام وسائلالنهاية.

الاستعلام المثال التالي عن الأجر (الراتب) سجلت أكثر من 1000 من طاولة موظف.

#!/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)

     sth.fetch do |row|
        printf "First Name: %s, Last Name : %s\n", row[0], row[1]
        printf "Age: %d, Sex : %s\n", row[2], row[3]
        printf "Salary :%d \n\n", row[4]
     end
     sth.finish
rescue DBI::DatabaseError => e
     puts "An error occurred"
     puts "Error code:    #{e.err}"
     puts "Error message: #{e.errstr}"
ensure
     # 断开与服务器的连接
     dbh.disconnect if dbh
end

وهذا ينتج النتائج التالية:

First Name: Mac, Last Name : Mohan
Age: 20, Sex : M
Salary :2000

First Name: John, Last Name : Poul
Age: 25, Sex : M
Salary :2300

هناك العديد من الطرق للحصول على سجلات من قاعدة البيانات، إذا كنت مهتما، يمكنك عرض عملية روبي DBI مقروءة .

تحديث عملية

تشير أي عملية تحديث قاعدة البيانات إلى السجلات الموجودة تحديث قاعدة بيانات واحدة أو أكثر. المثال التالي بتحديث الجنس هو 'M' لكافة السجلات. هنا، سوف نقوم بإضافة العام جميع الذكور العمر. سيتم تقسيمها إلى ثلاث خطوات:

  • وبناء على الشروط المطلوبة لإعداد استعلامات SQL. وسيتحقق ذلك من خلال استخدامإعداد الأسلوب.
  • تنفيذ الاستعلام SQL، تحديد كافة النتائج من قاعدة البيانات. وسيتحققذلك عن طريق استخدام طريقة تنفيذه.
  • الافراج عن مقبض عبارة. وسيتحقق ذلك من خلال استخدام وسائلالنهاية.
  • إذا سارت الامور بشكل جيد، ثم عمليةارتكابها، أو يمكنك استكمال التراجع المعاملة.
#!/usr/bin/ruby -w

require "dbi"

begin
     # 连接到 MySQL 服务器
     dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", 
                       "testuser", "test123")
     sth = dbh.prepare("UPDATE EMPLOYEE SET AGE = AGE + 1
                        WHERE SEX = ?")
     sth.execute('M')
     sth.finish
     dbh.commit
rescue DBI::DatabaseError => e
     puts "An error occurred"
     puts "Error code:    #{e.err}"
     puts "Error message: #{e.errstr}"
     dbh.rollback
ensure
     # 断开与服务器的连接
     dbh.disconnect if dbh
end

عملية الحذف

عندما تريد حذف السجلات من قاعدة البيانات، تحتاج إلى استخدام عملية الحذف. الأمثلة التالية حذف AGE 20 على جميع السجلات من موظف. الخطوات العملية هي كما يلي:

  • وبناء على الشروط المطلوبة لإعداد استعلامات SQL. وسيتحقق ذلك من خلال استخدامإعداد الأسلوب.
  • تنفيذ استعلامات SQL، حذف السجلات المطلوبة من قاعدة البيانات. وسيتحققذلك عن طريق استخدام طريقة تنفيذه.
  • الافراج عن مقبض عبارة. وسيتحقق ذلك من خلال استخدام وسائلالنهاية.
  • إذا سارت الامور بشكل جيد، ثم عمليةارتكابها، أو يمكنك استكمال التراجع المعاملة.
#!/usr/bin/ruby -w

require "dbi"

begin
     # 连接到 MySQL 服务器
     dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", 
                       "testuser", "test123")
     sth = dbh.prepare("DELETE FROM EMPLOYEE 
                        WHERE AGE > ?")
     sth.execute(20)
     sth.finish
     dbh.commit
rescue DBI::DatabaseError => e
     puts "An error occurred"
     puts "Error code:    #{e.err}"
     puts "Error message: #{e.errstr}"
     dbh.rollback
ensure
     # 断开与服务器的连接
     dbh.disconnect if dbh
end

الشؤون التنفيذية

والصفقة هي آلية لضمان اتساق المعاملة. يجب أن يكون خدمات السمات الأربعة التالية:

  • Atomicity (Atomicity): atomicity من المعاملة يعني أن يتم تضمين البرنامج في المعاملة وحدة منطقية من قاعدة بيانات العمل، فإنه عمليات تعديل البيانات إما عن تنفيذها أو عدم تنفيذها على الإطلاق.
  • تشير الصفقة الاتساق في معاملة أنجزت قبل وبعد يجب أن يكون تنفيذ قاعدة البيانات في حالةمتناسقة: الاتساق (الاتساق).إذا كانت حالة قاعدة البيانات يرضي جميع قيود التكامل، ويقول قاعدة البيانات متناسقة.
  • تشير عزل المعاملة ليتم فصلها عن بعضها البعض المعاملات المتزامنة، وهذا هو، داخل معاملة من البيانات العملية والتشغيلية وأن أغلقت، لا ينظر إليه محاولات أخرى لتعديلالصفقة: عزل (عزل).
  • الثابتة (المتانة): متانة الصفقة تعني أنه عندما فشل النظام أو وسائل الإعلام، تلتزم المعاملات لضمان أن التحديثات لا يمكن أن تضيع.أنه بمجرد أن يرتكب الصفقة، تغيير يجب أن بياناتها في قاعدة البيانات تكون دائمة، وتحمل فشل أي نظام قاعدة البيانات. الثابتة التي تكفلها قاعدة بيانات النسخ الاحتياطي والاسترداد.

يوفر DBI طريقتان لإجراء المعاملات. واحد هوارتكابأوالعودةالطرق لارتكاب أو استرجاع المعاملة. وهناك أيضا طريقةمعاملةيمكن استخدامها لتنفيذ الصفقة. التالي نقدم اثنين من طريقة بسيطة لتنفيذ المعاملات:

طريقة أنا

يستخدم الأسلوب الأول DBI فيارتكابوالتراجع عن وسائل لارتكاب صراحة أو إلغاء الصفقة:

   dbh['AutoCommit'] = false # 设置自动提交为 false.
   begin
     dbh.do("UPDATE EMPLOYEE SET AGE = AGE+1 
             WHERE FIRST_NAME = 'John'")
     dbh.do("UPDATE EMPLOYEE SET AGE = AGE+1 
             WHERE FIRST_NAME = 'Zara'")
     dbh.commit
   rescue
     puts "transaction failed"
     dbh.rollback
   end
   dbh['AutoCommit'] = true

طريقة الثاني

يستخدم الأسلوب الثاني أسلوبالمعاملة.وهذه طريقة بسيطة نسبيا، لأنه يتطلب معاملة تشكل كتلة التعليمات البرمجية التي تحتوي على بيان. طريقةمعاملةينفذ الكتلة، ومن ثم يتم تنفيذ كتلة بنجاح، استدعاء تلقائياارتكابأوالتراجع:

   dbh['AutoCommit'] = false # 设置自动提交为 false
   dbh.transaction do |dbh|
     dbh.do("UPDATE EMPLOYEE SET AGE = AGE+1 
             WHERE FIRST_NAME = 'John'")
     dbh.do("UPDATE EMPLOYEE SET AGE = AGE+1 
             WHERE FIRST_NAME = 'Zara'")
   end
   dbh['AutoCommit'] = true

ارتكاب عملية

ولقد تم الانتهاء من ارتكاب عملية لتحديد التغييرات قاعدة بيانات، وبعد هذه العملية، كل التغييرات ليست قابلة للاسترداد.

هنا مثال بسيطارتكاب استدعاء الأسلوب.

     dbh.commit

عملية التراجع

إذا كنت غير راض مع واحد أو عدد قليل من التغييرات، التي تريد استعادة تماما هذه التغييرات، استخدم طريقةالتراجع.

هنا مثال بسيط من استدعاء الأسلوبالاستعادة.

     dbh.rollback

فصل قاعدة البيانات

لقطع الاتصال من قاعدة البيانات، استخدام API قطع الاتصال.

    dbh.disconnect

إذا أغلق المستخدم اتصال قاعدة البيانات طريقة قطع الاتصال، DBI تتحرك مرة أخرى جميع المعاملات غير المكتملة. ومع ذلك، فإنه لا تعتمد على تفاصيل تنفيذ أي DBI، وطلبك يمكن أن يكون دعوة صريحة جيدة لارتكاب أو التراجع.

خطأ معالجة

هناك العديد من المصادر المختلفة من الخطأ. على سبيل المثال، أخطاء في بناء الجملة في تنفيذ عبارة SQL أو الاتصال فشلت، أو هي ليست بيانا كاملا أو المكالمات مقبض إلغاء جلب الأسلوب.

إذا فشل أسلوب DBI، سوف DBI رمي استثناء. طريقة DBI يمكن أن يلقي أي نوع من الاستثناء، ولكن الطبقة استثناء أهم اثنين هوDBI :: InterfaceErrorوDBI :: DatabaseError.

الأشياء استثناء من هذه الطبقات هييخطئ،errstr ثلاث سماتوالدولة،ويمثل الجدول الفرعي رقم الخطأ، سلسلة خطأ وصفي ورمز الخطأ المعياري. السمة المحددة على النحو التالي:

  • يخطئ: بإرجاع خطأ صحيحا التي وقعت التدوين، إذا DBD لا يدعم عودةالصفر.على سبيل المثال، أوراكل DBD إرجاع القسم رسالة خطأ ORA-XXXX.
  • errstr: إرجاع تمثيل سلسلة من الخطأ الذي حدث.
  • الدولة: إرجاع حدث رمز الخطأ SQLSTATE.SQLSTATE هو خمسة أحرف طول السلسلة. معظم DBD لا يعتمد عليه، فإنه سيعود صفر.

في المثال أعلاه، كنت قد رأيت البرمجية التالية:

rescue DBI::DatabaseError => e
     puts "An error occurred"
     puts "Error code:    #{e.err}"
     puts "Error message: #{e.errstr}"
     dbh.rollback
ensure
     # 断开与服务器的连接
     dbh.disconnect if dbh
end

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

require "dbi/trace"
..............

trace(mode, destination)

وضع قيمة يمكن أن يكون 0 (إيقاف)، 1،2، أو 3، وينبغي أن تكون قيمة الوجهة كائن IO. القيم الافتراضية هي 2 و STDERR.

طريقة كتلة

هناك طرق لإنشاء مؤشر. يتم استدعاء هذه الأساليب من قبل كتلة التعليمات البرمجية. مزايا استخدام كتل التعليمات البرمجية باستخدام الأسلوب هو أنها توفر مؤشر لكتلة كحجة عندما يتم إنهاء كتلة مقبض مسح تلقائيا. وفيما يلي بعض الأمثلة للمساعدة في فهم هذا المفهوم.

  • DBI.connect: هذه الطريقة يولد التعامل مع قاعدة البيانات، فمن المستحسن في نهايةفصلدعوة كتلة لفصل قاعدة البيانات.
  • dbh.prepare: هذه الطريقة يولد مقبض البيان، توصي يدعوتنتهيفي نهاية الكتلة.داخل كتلة، يجب استدعاء أسلوبتنفيذلتنفيذ العبارة.
  • dbh.execute: هذه الطريقة مشابهة لdbh.prepare، ولكن dbh.execute لا تحتاج إلى استدعاء تنفيذ الأسلوب داخل الكتلة.يتم تنفيذ مقبض بيان تلقائيا.

مثال 1

DBI.connect قد يكون له كتلة من التعليمات البرمجية، فمررها مقبض قاعدة البيانات، وسوف مقبض قطع الاتصال تلقائيا في نهاية الكتلة.

dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", 
                  "testuser", "test123") do |dbh|

مثال 2

dbh.prepare قد يكون لها كتلة التعليمات البرمجية، تمرير مقبض عبارة، ويدعو النهاية تلقائيا في نهاية الكتلة.

dbh.prepare("SHOW DATABASES") do |sth|
       sth.execute
       puts "Databases: " + sth.fetch_all.join(", ")
end

مثال 3

dbh.execute قد يكون لها كتلة التعليمات البرمجية، تمرير مقبض عبارة، ويدعو النهاية تلقائيا في نهاية الكتلة.

dbh.execute("SHOW DATABASES") do |sth|
   puts "Databases: " + sth.fetch_all.join(", ")
end

ويمكن أيضا أن توفر طريقة معاملةDBIمع كتلة من التعليمات البرمجية، التي في الأقسام المذكورة أعلاه قد شرحت من قبل.

وظائف تشغيل معين وخصائص

السماح برنامج تشغيل قاعدة البيانات DBI يوفر وظائف إضافية قاعدة بيانات محددة، يمكن أن تسمى هذه الوظائف من قبل أيظائفهاالمستخدم كائن طريقة التعامل.

استخدام[] = أو []طريقة لتعيين أو الحصول على سمات برامج معينة.

DBD :: الخلية بتنفيذ الدالة التالية برنامج تشغيل معين:

لا. وظيفة والوصف
1 dbh.func (: createdb، DB_NAME)
إنشاء قاعدة بيانات جديدة.
2 dbh.func (: dropdb، DB_NAME)
لحذف قاعدة البيانات.
3 dbh.func (: تحديث)
تحديث العملية.
4 dbh.func (: الاغلاق)
إيقاف تشغيل الملقم.
5 dbh.func (: insert_id) => Fixnum
يعود قيمة AUTO_INCREMENT الأخيرة من الاتصال.
6 dbh.func (: client_info) => سلسلة
ترجع الخلية إصدار عميل المعلومات المطلوبة.
7 dbh.func (: client_version) => Fixnum
اعتمادا على معلومات الإصدار مرة أخرى إلى العميل. هذا هو: على غرار client_info، لكنه سيعود fixnum، بدلا من العودة سلسلة.
8 dbh.func (: host_info) => سلسلة
بإرجاع معلومات المضيف.
9 dbh.func (: proto_info) => Fixnum
يعود البروتوكولات المستخدمة للاتصال.
10 dbh.func (: server_info) => سلسلة
بإرجاع معلومات الخلية نسخة خادم يعمل.
11 dbh.func (: القانون الأساسي) => Stringb >
إرجاع الحالة الراهنة من قاعدة البيانات.
12 dbh.func (: thread_id) => Fixnum
إرجاع معرف الترابط الحالي.

أمثلة

#!/usr/bin/ruby

require "dbi"
begin
   # 连接到 MySQL 服务器
   dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", 
                       "testuser", "test123") 
   puts dbh.func(:client_info)
   puts dbh.func(:client_version)
   puts dbh.func(:host_info)
   puts dbh.func(:proto_info)
   puts dbh.func(:server_info)
   puts dbh.func(:thread_id)
   puts dbh.func(:stat)
rescue DBI::DatabaseError => e
   puts "An error occurred"
   puts "Error code:    #{e.err}"
   puts "Error message: #{e.errstr}"
ensure
   dbh.disconnect if dbh
end

وهذا ينتج النتائج التالية:

5.0.45
50045
Localhost via UNIX socket
10
5.0.45
150621
Uptime: 384981  Threads: 1  Questions: 1101078  Slow queries: 4 \
Opens: 324  Flush tables: 1  Open tables: 64  \
Queries per second avg: 2.860