akses database Ruby - DBI Tutorial
Bab ini akan menunjukkan kepada Anda bagaimana menggunakan Ruby untuk mengakses database.Ruby DBImodul menyediakan antarmuka database-independen mirip dengan Perl DBI modul untuk script Ruby.
DBI yaitu database antarmuka independen, atas nama antarmuka database-independen Ruby. DBI antara kode Ruby dengan database menyediakan lapisan abstraksi yang memungkinkan Anda untuk dengan mudah menerapkan peralihan basis data. Ini mendefinisikan seperangkat metode, variabel dan norma-norma, menyediakan antarmuka database yang konsisten database independen.
DBI dapat berinteraksi dengan berikut:
- ADO (ActiveX Data Objects)
- DB2
- Frontbase
- mSQL
- MySQL
- ODBC
- peramal
- OCI8 (Oracle)
- PostgreSQL
- Proxy / Server
- SQLite
- SQLRelay
arsitektur aplikasi DBI
DBI independen database apapun yang tersedia di latar belakang. Apakah Anda menggunakan Oracle, MySQL, Informix, Anda dapat menggunakan DBI. Bagan berikut jelas menggambarkan hal ini.
Ruby DBI arsitektur umum menggunakan dua lapisan:
- Database Interface (DBI) lapisan. Lapisan ini database independen dan menyediakan serangkaian metode akses publik, menggunakan server database, terlepas dari jenis pendekatan.
- Database driver (DBD) lapisan. Lapisan ini tergantung pada database, drive yang berbeda memberikan akses ke mesin database yang berbeda. MySQL, PostgreSQL, Interbase, Oracle, masing-masing, menggunakan drive yang berbeda. Setiap pengemudi bertanggung jawab untuk menafsirkan permintaan dari lapisan DBI, dan permintaan ini dipetakan untuk menerapkan permintaan untuk jenis tertentu dari database server.
memasang
Jika Anda ingin menulis skrip Ruby untuk mengakses database MySQL, Anda perlu menginstal modul Ruby MySQL.
Menginstal Mysql Development Kit
# Ubuntu sudo apt-get install mysql-client sudo apt-get install libmysqlclient15-dev # Centos yum install mysql-devel
Mac OS, Anda perlu memodifikasi ~ / .bash_profile atau ~ / Profil file, tambahkan kode berikut:
MYSQL=/usr/local/mysql/bin export PATH=$PATH:$MYSQL export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH
Atau menggunakan koneksi lunak:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Gunakan RubyGems menginstal DBI (dianjurkan)
RubyGems tentang didirikan pada November 2003, menjadi bagian dari Ruby perpustakaan standar dari Ruby 1.9 versi. Rincian lebih lanjut dapat dilihat: Ruby rubygems
Gunakan gem install dbi dan dbd-mysql:
sudo gem install dbi sudo gem install mysql sudo gem install dbd-mysql
Gunakan Kode instalasi (versi Ruby kurang dari 1,9 untuk menggunakan metode ini)
Modul ini adalah DBD, dari http://tmtm.org/downloads/mysql/ruby/ Download.
Setelah men-download paket terbaru, unzip ke direktori, jalankan perintah berikut untuk menginstal:
% ruby extconf.rb 或者 % ruby extconf.rb --with-mysql-dir=/usr/local/mysql 或者 % ruby extconf.rb --with-mysql-config
Kemudian kompilasi:
% make
Mendapatkan dan menginstal Ruby / DBI
Anda dapat men-download dan menginstal modul Ruby DBI dari link berikut:
https://github.com/erikh/ruby-dbi |
Sebelum memulai instalasi, pastikan Anda memiliki hak akses root. Sekarang, menginstal langkah-langkah berikut untuk menginstal:
Langkah 1
git clone https://github.com/erikh/ruby-dbi.git
Atau langsung di bawah pos lain dan unzip.
Langkah 2
Masukkan direktoriruby-dbi-master,menggunakan script konfigurasisetup.rbdalam direktori. Perintah konfigurasi yang paling umum tidak diikuti dengan parameter parameter konfigurasi. Perintah konfigurasi default untuk menginstal semua driver.
$ ruby setup.rb config
Lebih khusus, Anda dapat menggunakan opsi --with untuk daftar bagian tertentu yang ingin Anda gunakan. Misalnya, jika Anda ingin mengkonfigurasi modul DBI utama dan lapisan berkendara MySQL DBD, masukkan perintah berikut:
$ ruby setup.rb config --with=dbi,dbd_mysql
Langkah 3
Langkah terakhir adalah untuk menciptakan drive, gunakan perintah berikut untuk menginstal:
$ ruby setup.rb setup $ ruby setup.rb install
database Connectivity
Misalkan kita menggunakan database MySQL sebelum menghubungkan ke database, pastikan bahwa:
- Anda telah membuat testdb basis data.
- Anda telah menciptakan KARYAWAN meja di testdb.
- Tabel dengan bidang FIRST_NAME, LAST_NAME, AGE, SEX dan PENGHASILAN.
- Set user ID "testuser" dan password "test123" untuk mengakses testdb
- Sudah pada mesin Anda terpasang dengan benar Ruby modul DBI.
- Anda telah melihat MySQL tutorial, memahami MySQL operasi yang mendasarinya.
Berikut ini adalah contoh dari MySQL koneksi database "testdb" dari:
#!/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
Ketika Anda menjalankan script ini, akan menghasilkan hasil sebagai berikut pada mesin Linux.
Server version: 5.0.45
Jika Anda membuat sambungan dengan sumber data, menangani database kembali (Database Handle), dan disimpan kedbh untuk penggunaan selanjutnya, atau dbhakan diatur kenilai nil,e.err dane :: errstrmengembalikan kode kesalahan dan kesalahan tali.
Akhirnya, sebelum keluar program ini, pastikan untuk menutup koneksi database, pelepasan sumber daya.
operasi INSERT
Bila Anda ingin membuat catatan dalam tabel database, Anda perlu menggunakan operasi INSERT.
Setelah koneksi database, kita siap untuk membuat tabel atau menyisipkan data dalam tabel untuk menciptakan sebuah metode rekaman menggunakando atau mempersiapkandanmelaksanakanmetode.
Gunakan melakukan pernyataan
Pernyataan itu tidak kembali baris dengan memanggilmelakukan metode pengolahan database.Metode ini membutuhkan pernyataan parameter string dan mengembalikan jumlah baris yang dipengaruhi oleh pernyataan itu.
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 )" );
Demikian pula, Anda dapatmengeksekusipernyataan SQLINSERTuntuk membuat catatan ke dalam tabel EMPLOYEE.
#!/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
Menggunakanmempersiapkandanmelaksanakan
Anda dapat menggunakan DBI inimempersiapkandanmelaksanakanmetode untuk mengeksekusi Ruby pernyataan kode SQL.
Untuk membuat rekor sebagai berikut:
- Pernyataan SQL siap dengan pernyataan INSERT. Hal ini akan dicapai melalui penggunaanmempersiapkan metode.
- Mengeksekusi SQL query, pilih semua hasil dari database. Hal ini akan dicapai denganmenggunakan metode mengeksekusi.
- Lepaskan pernyataan pegangan. Hal ini akan dicapai melalui penggunaanfinish API.
- Jika semua berjalan dengan baik, maka operasikomit, atau Anda dapat menyelesaikan transaksi rollback.
Berikut adalah sintaks dari dua metode ini:
sth = dbh.prepare(statement) sth.execute ... zero or more SQL operations ... sth.finish
Kedua metode dapat digunakan untukmengikat nilai untuk lulus pernyataan SQL.Terkadang nilai yang dimasukkan tidak dapat diberikan di muka, dalam hal ini, digunakan untuk mengikat nilai-nilai. Gunakan tanda tanya(?) Daripada nilai aktual, nilai aktual untuk melewati mengeksekusi () API.
Contoh berikut membuat dua catatan dalam tabel EMPLOYEE:
#!/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
Jika Anda menggunakan beberapa INSERT, maka pertama menyiapkan laporan, dan kemudian jalankan beberapa kali dalam satu lingkaran melalui setiap siklus daripada panggilan melakukan lebih efisien.
operasi BACA
READ operasi pada database apapun mengacu untuk mendapatkan informasi yang berguna dari database.
Setelah koneksi database, kita siap untuk query database. Kita dapat menggunakan metodeatau mempersiapkandanmelaksanakanmetode untuk mendapatkan nilai dari tabel database.
Dapatkan langkah dicatat sebagai berikut:
- Berdasarkan kondisi yang diperlukan untuk persiapan query SQL. Hal ini akan dicapai melalui penggunaanmempersiapkan metode.
- Mengeksekusi SQL query, pilih semua hasil dari database. Hal ini akan dicapai denganmenggunakan metode mengeksekusi.
- Satu per satu untuk mendapatkan hasil, dan output hasil. Hal ini akan dicapai melalui penggunaanmengambil metode.
- Lepaskan pernyataan pegangan. Hal ini akan dicapai melalui penggunaan metodefinish.
Contoh berikut query semua upah (gaji) mencatat lebih dari 1.000 dari tabel 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) 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
Ini menghasilkan hasil sebagai berikut:
First Name: Mac, Last Name : Mohan Age: 20, Sex : M Salary :2000 First Name: John, Last Name : Poul Age: 25, Sex : M Salary :2300
Ada banyak metode untuk mendapatkan catatan dari database, jika Anda tertarik, Anda dapat melihat Ruby DBI Baca operasi .
Operasi pembaruan
Setiap operasi database UPDATE mengacu pada satu atau lebih database update catatan yang ada. Contoh berikut update SEX adalah 'M' untuk semua catatan. Di sini, kita akan menambahkan satu tahun semua laki-laki AGE. Ini akan dibagi menjadi tiga tahap:
- Berdasarkan kondisi yang diperlukan untuk persiapan query SQL. Hal ini akan dicapai melalui penggunaanmempersiapkan metode.
- Mengeksekusi SQL query, pilih semua hasil dari database. Hal ini akan dicapai denganmenggunakan metode mengeksekusi.
- Lepaskan pernyataan pegangan. Hal ini akan dicapai melalui penggunaan metodefinish.
- Jika semua berjalan dengan baik, maka operasikomit, atau Anda dapat menyelesaikan transaksi rollback.
#!/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
operasi DELETE
Bila Anda ingin menghapus catatan dari database, Anda perlu menggunakan operasi DELETE. Contoh berikut menghapus AGE 20 atas semua catatan dari EMPLOYEE tersebut. Langkah-langkah operasi adalah sebagai berikut:
- Berdasarkan kondisi yang diperlukan untuk persiapan query SQL. Hal ini akan dicapai melalui penggunaanmempersiapkan metode.
- Mengeksekusi query SQL, menghapus catatan yang diinginkan dari database. Hal ini akan dicapai denganmenggunakan metode mengeksekusi.
- Lepaskan pernyataan pegangan. Hal ini akan dicapai melalui penggunaan metodefinish.
- Jika semua berjalan dengan baik, maka operasikomit, atau Anda dapat menyelesaikan transaksi rollback.
#!/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
Urusan eksekutif
Sebuah transaksi adalah mekanisme untuk memastikan konsistensi transaksi. Jasa harus memiliki empat atribut berikut:
- Atomicity (Atomicity): atomicity transaksi berarti bahwa program ini termasuk dalam transaksi sebagai unit logis database pekerjaan, ia melakukan operasi modifikasi data baik semua dijalankan atau tidak dijalankan sama sekali.
- Konsistensi (Consistency): transaksi Konsistensi mengacu pada transaksi dieksekusi sebelum dan setelah pelaksanaan database harus dalam keadaan konsisten.Jika keadaan database memenuhi semua batasan integritas, mengatakan database konsisten.
- Isolasi (Isolasi): isolasi transaksi mengacu pada transaksi konkuren yang terisolasi satu sama lain, yaitu, dalam transaksi data operasi dan operasi yang harus ditutup, tidak terlihat upaya lain untuk memodifikasi transaksi.
- Persistent (Daya Tahan): daya tahan transaksi berarti bahwa ketika sistem atau media kegagalan, berkomitmen transaksi untuk memastikan bahwa update tidak bisa hilang.Bahwa sekali transaksi melakukan, mengubah data dalam database harus permanen, bertahan kegagalan sistem database. Persistent dijamin oleh backup database dan pemulihan.
DBI memberikan dua cara untuk melakukan transaksi. Salah satunya adalahmelakukanataurollbackmetode untuk melakukan atau memutar kembali transaksi. Ada juga metodetransaksi yangdapat digunakan untuk melaksanakan transaksi. Berikutnya kami memperkenalkan dua metode sederhana untuk melaksanakan transaksi:
metode yang saya
Metode pertama menggunakan DBIkomitdanrollbackmetode untuk secara eksplisit melakukan atau membatalkan transaksi:
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
metode II
Metode kedua menggunakan metodetransaksi.Metode ini relatif sederhana, karena memerlukan transaksi merupakan blok kode yang berisi pernyataan. Metodetransaksimengeksekusi blok, dan kemudian blok dijalankan berhasil, secara otomatis memanggilmelakukanataurollback:
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
COMMIT operasi
Komit operasi telah selesai untuk mengidentifikasi perubahan database, dan setelah operasi ini, semua perubahan yang tidak dapat dipulihkan.
Berikut ini adalah contoh sederhanakomit metode doa.
dbh.commit
operasi ROLLBACK
Jika Anda tidak puas dengan satu atau beberapa perubahan, Anda ingin benar-benar mengembalikan perubahan ini, menggunakan metoderollback.
Berikut ini adalah contoh sederhana dari metoderollback panggilan.
dbh.rollback
Lepaskan database
Untuk memutuskan sambungan dari database, menggunakan putuskan API.
dbh.disconnect
Jika pengguna menutup metode putuskan koneksi database, DBI gulung kembali semua transaksi tidak lengkap. Namun, tidak bergantung pada rincian pelaksanaan setiap DBI, dan aplikasi Anda bisa menjadi panggilan eksplisit baik untuk melakukan atau rollback.
kesalahan pengolahan
Ada banyak sumber yang berbeda dari kesalahan. Misalnya, kesalahan sintaks dalam pelaksanaan pernyataan SQL atau koneksi gagal, atau merupakan pernyataan lengkap atau dibatalkan menangani panggilan mengambil metode.
Jika metode DBI gagal, DBI akan melempar pengecualian. Metode DBI dapat membuang jenis pengecualian, tapi dua kelas pengecualian yang paling penting adalahDBI :: InterfaceErrordanDBI :: DatabaseError.
benda pengecualian kelas-kelas inierr,errstr tiga atribut dannegara,sub-tabel merepresentasikan jumlah kesalahan, kesalahan tali deskriptif dan kode kesalahan standar. Atribut yang ditentukan sebagai berikut:
- err: kembali kesalahan integer yang terjadi notasi, jika DBD tidak mendukung kembalinyanihil.Misalnya, Oracle DBD Pengembalian bagian ORA-XXXXpesan kesalahan.
- errstr: Mengembalikan representasi string dari kesalahan yang terjadi.
- negara: Mengembalikan kode kesalahan SQLSTATE terjadi.SQLSTATE adalah panjang string lima karakter. Sebagian besar DBD tidak mendukung, itu akan kembali nihil.
Dalam contoh di atas, Anda telah melihat kode berikut:
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
Untuk mendapatkan debug informasi tentang isi dari script dijalankan ketika script dijalankan, Anda dapat mengaktifkan tracing. Untuk melakukan ini, Anda harus terlebih dahulu men-download dbi / jejak modul, dan kemudian memanggil pelacakan mode kontrol dan metode output tujuanjejak:
require "dbi/trace" .............. trace(mode, destination)
Modus Nilai dapat 0 (off), 1,2, atau 3, nilai tujuan harus menjadi objek IO. Nilai default adalah 2 dan stderr.
metode block
Ada cara untuk membuat pegangan. Metode ini dipanggil oleh blok kode. Keuntungan menggunakan blok kode dengan metode ini adalah bahwa mereka memberikan pegangan untuk blok sebagai argumen ketika blok diakhiri otomatis dihapus menangani. Berikut adalah beberapa contoh untuk membantu memahami konsep ini.
- DBI.connect: Metode ini menghasilkan pegangan basis data, dianjurkan pada akhirputuskanblok panggilan untuk memutuskan database.
- dbh.prepare: Metode ini menghasilkan pegangan pernyataan, menyarankan memanggilfinishdi ujung blok.Dalam blok, Anda harus memanggilmelaksanakanmetode untuk mengeksekusi pernyataan.
- dbh.execute: Metode ini mirip dengan dbh.prepare, tapi dbh.execute tidak perlu memanggil melaksanakan metode dalam blok.Sebuah menangani pernyataan secara otomatis dijalankan.
contoh 1
DBI.connect mungkin memiliki blok kode, lewat itu menangani database, dan pegangan secara otomatis akan memutuskan pada akhir blok.
dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", "testuser", "test123") do |dbh|
contoh 2
dbh.prepare mungkin memiliki blok kode, lewat pernyataan menangani, dan secara otomatis panggilan finish di ujung blok.
dbh.prepare("SHOW DATABASES") do |sth| sth.execute puts "Databases: " + sth.fetch_all.join(", ") end
contoh 3
dbh.execute mungkin memiliki blok kode, lewat pernyataan menangani, dan secara otomatis panggilan finish di ujung blok.
dbh.execute("SHOW DATABASES") do |sth| puts "Databases: " + sth.fetch_all.join(", ") end
Metode transaksiDBIjuga dapat diberikan dengan blok kode, yang di bagian atas telah dijelaskan sebelumnya.
fungsi driver-spesifik dan sifat
Mari driver database DBI memberikan fungsi tambahan database tertentu, fungsi-fungsi ini dapat dipanggil oleh setiap penggunafuncobjek metode Handle.
Gunakan[] = atau []metode untuk mengatur atau mendapatkan driver khusus atribut.
DBD :: Mysql mengimplementasikan fungsi berikut driver khusus:
Tidak. | Fungsi & Keterangan |
---|---|
1 | dbh.func (: createdb, DB_NAME) Membuat database baru. |
2 | dbh.func (: dropdb, DB_NAME) Untuk menghapus database. |
3 | dbh.func (: isi ulang) Reload operasi. |
4 | dbh.func (: shutdown) Mematikan server. |
5 | dbh.func (: insert_id) => Fixnum Mengembalikan nilai AUTO_INCREMENT terbaru dari sambungan. |
6 | dbh.func (: client_info) => String Mengembalikan MySQL informasi versi klien seperti yang diperlukan. |
7 | dbh.func (: client_version) => Fixnum Tergantung pada informasi versi kembali ke klien. Ini adalah: Mirip dengan client_info, tetapi akan kembali Fixnum, daripada kembali string. |
8 | dbh.func (: host_info) => String Mengembalikan informasi host. |
9 | dbh.func (: proto_info) => Fixnum Mengembalikan protokol yang digunakan untuk komunikasi. |
10 | dbh.func (: server_info) => String Mengembalikan informasi MySQL versi server berbasis. |
11 | dbh.func (: Stat) => STRING M > Mengembalikan keadaan saat ini database. |
12 | dbh.func (: thread_id) => Fixnum Mengembalikan ID thread saat ini. |
contoh
#!/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
Ini menghasilkan hasil sebagai berikut:
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