Hướng dẫn Ruby / DBI
Chương này hướng dẫn bạn cách truy cập cơ sở dữ liệu bằng Ruby. Các của Ruby DBI mô-đun cung cấp một giao diện cơ sở dữ liệu độc lập cho Ruby script tương tự như của các module Perl DBI.
DBI là viết tắt của Database Independent Interface for Ruby, có nghĩa là DBI cung cấp một lớp trừu tượng giữa mã Ruby và cơ sở dữ liệu bên dưới, cho phép bạn chuyển đổi triển khai cơ sở dữ liệu thực sự dễ dàng. Nó định nghĩa một tập hợp các phương thức, biến và quy ước cung cấp giao diện cơ sở dữ liệu nhất quán, độc lập với cơ sở dữ liệu thực tế đang được sử dụng.
DBI có thể giao tiếp với những điều sau:
- ADO (Đối tượng dữ liệu ActiveX)
- DB2
- Frontbase
- mSQL
- MySQL
- ODBC
- Oracle
- OCI8 (Oracle)
- PostgreSQL
- Proxy/Server
- SQLite
- SQLRelay
Kiến trúc của một ứng dụng DBI
DBI độc lập với bất kỳ cơ sở dữ liệu nào có sẵn trong phần phụ trợ. Bạn có thể sử dụng DBI cho dù bạn đang làm việc với Oracle, MySQL hay Informix, v.v. Điều này rõ ràng từ sơ đồ kiến trúc sau đây.
Kiến trúc chung cho Ruby DBI sử dụng hai lớp:
Lớp giao diện cơ sở dữ liệu (DBI). Lớp này độc lập với cơ sở dữ liệu và cung cấp một tập hợp các phương pháp truy cập phổ biến được sử dụng theo cùng một cách bất kể loại máy chủ cơ sở dữ liệu mà bạn đang giao tiếp.
Lớp trình điều khiển cơ sở dữ liệu (DBD). Lớp này phụ thuộc vào cơ sở dữ liệu; các trình điều khiển khác nhau cung cấp quyền truy cập vào các công cụ cơ sở dữ liệu khác nhau. Có một trình điều khiển cho MySQL, một trình điều khiển khác cho PostgreSQL, một trình điều khiển khác cho InterBase, một trình điều khiển khác cho Oracle, v.v. Mỗi trình điều khiển diễn giải các yêu cầu từ lớp DBI và ánh xạ chúng thành các yêu cầu thích hợp cho một loại máy chủ cơ sở dữ liệu nhất định.
Điều kiện tiên quyết
Nếu bạn muốn viết các kịch bản Ruby để truy cập cơ sở dữ liệu MySQL, bạn cần phải cài đặt mô-đun Ruby MySQL.
Mô-đun này hoạt động như một DBD như đã giải thích ở trên và có thể được tải xuống từ https://www.tmtm.org/en/mysql/ruby/
Lấy và cài đặt Ruby / DBI
Bạn có thể tải xuống và cài đặt mô-đun Ruby DBI từ vị trí sau:
https://imgur.com/NFEuWe4/embed
Trước khi bắt đầu cài đặt này, hãy đảm bảo rằng bạn có đặc quyền root. Bây giờ, hãy làm theo các bước dưới đây -
Bước 1
$ tar zxf dbi-0.2.0.tar.gz
Bước 2
Vào thư mục phân phối dbi-0.2.0 và cấu hình nó bằng cách sử dụng tập lệnh setup.rb trong thư mục đó. Lệnh cấu hình chung nhất trông giống như thế này, không có đối số nào theo sau đối số config. Lệnh này cấu hình bản phân phối để cài đặt tất cả các trình điều khiển theo mặc định.
$ ruby setup.rb config
Để cụ thể hơn, hãy cung cấp tùy chọn - với tùy chọn liệt kê các phần cụ thể của bản phân phối mà bạn muốn sử dụng. Ví dụ: để chỉ định cấu hình mô-đun DBI chính và trình điều khiển cấp MySQL DBD, hãy phát hành lệnh sau:
$ ruby setup.rb config --with = dbi,dbd_mysql
Bước 3
Bước cuối cùng là xây dựng trình điều khiển và cài đặt nó bằng các lệnh sau:
$ ruby setup.rb setup
$ ruby setup.rb install
Kết nối cơ sở dữ liệu
Giả sử chúng ta sẽ làm việc với cơ sở dữ liệu MySQL, trước khi kết nối với cơ sở dữ liệu, hãy đảm bảo những điều sau:
Bạn đã tạo một cơ sở dữ liệu TESTDB.
Bạn đã tạo EMPLOYEE trong TESTDB.
Bảng này có các trường FIRST_NAME, LAST_NAME, AGE, SEX và INCOME.
ID người dùng "testuser" và mật khẩu "test123" được đặt để truy cập TESTDB.
Ruby Module DBI được cài đặt đúng cách trên máy của bạn.
Bạn đã xem qua hướng dẫn MySQL để hiểu Cơ bản về MySQL.
Sau đây là ví dụ về kết nối với cơ sở dữ liệu MySQL "TESTDB"
#!/usr/bin/ruby -w
require "dbi"
begin
# connect to the MySQL server
dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", "testuser", "test123")
# get server version string and display it
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
# disconnect from server
dbh.disconnect if dbh
end
Trong khi chạy tập lệnh này, nó tạo ra kết quả sau trên máy Linux của chúng tôi.
Server version: 5.0.45
Nếu kết nối được thiết lập với nguồn dữ liệu, thì Xử lý cơ sở dữ liệu sẽ được trả về và lưu vào dbh để sử dụng tiếp theo cách khác dbhđược đặt thành giá trị nil và mã lỗi trả về e.err và e :: errstr và một chuỗi lỗi tương ứng.
Cuối cùng, trước khi xuất bản, hãy đảm bảo rằng kết nối cơ sở dữ liệu đã đóng và tài nguyên được giải phóng.
INSERT hoạt động
Thao tác INSERT là bắt buộc khi bạn muốn tạo bản ghi của mình vào bảng cơ sở dữ liệu.
Khi kết nối cơ sở dữ liệu được thiết lập, chúng tôi sẵn sàng tạo bảng hoặc bản ghi vào bảng cơ sở dữ liệu bằng cách sử dụng do phương pháp hoặc prepare và execute phương pháp.
Sử dụng do Statement
Các câu lệnh không trả về hàng có thể được đưa ra bằng cách gọi dophương pháp xử lý cơ sở dữ liệu. Phương thức này nhận một đối số chuỗi câu lệnh và trả về số lượng hàng bị ảnh hưởng bởi câu lệnh.
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 )" );
Tương tự, bạn có thể thực hiện câu lệnh SQL INSERT để tạo bản ghi vào bảng NHÂN VIÊN.
#!/usr/bin/ruby -w
require "dbi"
begin
# connect to the MySQL server
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
# disconnect from server
dbh.disconnect if dbh
end
Sử dụng chuẩn bị và thực thi
Bạn có thể sử dụng các phương thức chuẩn bị và thực thi của lớp DBI để thực thi câu lệnh SQL thông qua mã Ruby.
Việc tạo bản ghi thực hiện theo các bước sau:
Chuẩn bị câu lệnh SQL với câu lệnh INSERT. Điều này sẽ được thực hiện bằng cách sử dụngprepare phương pháp.
Thực thi truy vấn SQL để chọn tất cả các kết quả từ cơ sở dữ liệu. Điều này sẽ được thực hiện bằng cách sử dụngexecute phương pháp.
Xử lý Báo cáo phát hành. Điều này sẽ được thực hiện bằng cách sử dụngfinish API
Nếu mọi thứ suôn sẻ, thì commit hoạt động này nếu không bạn có thể rollback giao dịch hoàn tất.
Sau đây là cú pháp để sử dụng hai phương pháp này:
sth = dbh.prepare(statement)
sth.execute
... zero or more SQL operations ...
sth.finish
Hai phương pháp này có thể được sử dụng để vượt qua bindgiá trị cho câu lệnh SQL. Có thể có trường hợp khi các giá trị cần nhập không được cung cấp trước. Trong trường hợp này, các giá trị ràng buộc được sử dụng. Một dấu chấm hỏi (?) được sử dụng thay cho các giá trị thực và sau đó các giá trị thực tế được chuyển qua API execute ().
Dưới đây là ví dụ để tạo hai bản ghi trong bảng EMPLOYEE -
#!/usr/bin/ruby -w
require "dbi"
begin
# connect to the MySQL server
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
# disconnect from server
dbh.disconnect if dbh
end
Nếu có nhiều INSERT cùng một lúc, thì việc chuẩn bị một câu lệnh trước và sau đó thực thi nó nhiều lần trong một vòng lặp sẽ hiệu quả hơn việc gọi thực hiện mỗi lần trong vòng lặp.
ĐỌC hoạt động
ĐỌC Hoạt động trên bất kỳ cơ sở dữ liệu nào có nghĩa là lấy một số thông tin hữu ích từ cơ sở dữ liệu.
Khi kết nối cơ sở dữ liệu của chúng tôi được thiết lập, chúng tôi đã sẵn sàng thực hiện truy vấn vào cơ sở dữ liệu này. Chúng ta có thể sử dụngdo phương pháp hoặc prepare và execute các phương thức để tìm nạp các giá trị từ một bảng cơ sở dữ liệu.
Tìm nạp bản ghi thực hiện các bước sau:
Chuẩn bị truy vấn SQL dựa trên các điều kiện bắt buộc. Điều này sẽ được thực hiện bằng cách sử dụngprepare phương pháp.
Thực thi truy vấn SQL để chọn tất cả các kết quả từ cơ sở dữ liệu. Điều này sẽ được thực hiện bằng cách sử dụngexecute phương pháp.
Tìm nạp tất cả các kết quả một và in các kết quả đó. Điều này sẽ được thực hiện bằng cách sử dụngfetch phương pháp.
Xử lý Báo cáo phát hành. Điều này sẽ được thực hiện bằng cách sử dụngfinish phương pháp.
Sau đây là thủ tục để truy vấn tất cả các bản ghi từ bảng NHÂN VIÊN có mức lương hơn 1000.
#!/usr/bin/ruby -w
require "dbi"
begin
# connect to the MySQL server
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
# disconnect from server
dbh.disconnect if dbh
end
Điều này sẽ tạo ra kết quả sau:
First Name: Mac, Last Name : Mohan
Age: 20, Sex : M
Salary :2000
First Name: John, Last Name : Poul
Age: 25, Sex : M
Salary :2300
Có nhiều phương pháp rút gọn hơn để tìm nạp các bản ghi từ cơ sở dữ liệu. Nếu bạn quan tâm, hãy chuyển qua Tìm nạp kết quả, nếu không hãy chuyển sang phần tiếp theo.
Cập nhật hoạt động
CẬP NHẬT Hoạt động trên bất kỳ cơ sở dữ liệu nào có nghĩa là cập nhật một hoặc nhiều bản ghi đã có sẵn trong cơ sở dữ liệu. Sau đây là thủ tục để cập nhật tất cả các bản ghi có SEX là 'M'. Ở đây, chúng tôi sẽ tăng TUỔI của tất cả nam giới thêm một năm. Điều này sẽ thực hiện ba bước -
Chuẩn bị truy vấn SQL dựa trên các điều kiện bắt buộc. Điều này sẽ được thực hiện bằng cách sử dụngprepare phương pháp.
Thực thi truy vấn SQL để chọn tất cả các kết quả từ cơ sở dữ liệu. Điều này sẽ được thực hiện bằng cách sử dụngexecute phương pháp.
Xử lý Báo cáo phát hành. Điều này sẽ được thực hiện bằng cách sử dụngfinish phương pháp.
Nếu mọi thứ suôn sẻ thì commit hoạt động này nếu không bạn có thể rollback giao dịch hoàn tất.
#!/usr/bin/ruby -w
require "dbi"
begin
# connect to the MySQL server
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
# disconnect from server
dbh.disconnect if dbh
end
Thao tác DELETE
Thao tác DELETE là bắt buộc khi bạn muốn xóa một số bản ghi khỏi cơ sở dữ liệu của mình. Sau đây là quy trình để xóa tất cả các bản ghi khỏi NHÂN VIÊN có TUỔI trên 20. Thao tác này sẽ thực hiện theo các bước sau.
Chuẩn bị truy vấn SQL dựa trên các điều kiện bắt buộc. Điều này sẽ được thực hiện bằng cách sử dụngprepare phương pháp.
Thực thi truy vấn SQL để xóa các bản ghi được yêu cầu khỏi cơ sở dữ liệu. Điều này sẽ được thực hiện bằng cách sử dụngexecute phương pháp.
Xử lý Báo cáo phát hành. Điều này sẽ được thực hiện bằng cách sử dụngfinish phương pháp.
Nếu mọi thứ suôn sẻ thì commit hoạt động này nếu không bạn có thể rollback giao dịch hoàn tất.
#!/usr/bin/ruby -w
require "dbi"
begin
# connect to the MySQL server
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
# disconnect from server
dbh.disconnect if dbh
end
Thực hiện giao dịch
Giao dịch là một cơ chế đảm bảo tính nhất quán của dữ liệu. Các giao dịch phải có bốn thuộc tính sau:
Atomicity - Giao dịch hoàn tất hoặc không có gì xảy ra.
Consistency - Một giao dịch phải bắt đầu ở trạng thái nhất quán và rời khỏi hệ thống là trạng thái nhất quán.
Isolation - Kết quả trung gian của một giao dịch không được hiển thị bên ngoài giao dịch hiện tại.
Durability - Sau khi giao dịch được cam kết, các tác động sẽ tồn tại dai dẳng, ngay cả sau khi hệ thống bị lỗi.
DBI cung cấp hai phương pháp để cam kết hoặc khôi phục một giao dịch. Có một phương thức nữa được gọi là giao dịch có thể được sử dụng để thực hiện các giao dịch. Có hai cách tiếp cận đơn giản để thực hiện các giao dịch -
Tiếp cận tôi
Cách tiếp cận đầu tiên sử dụng các phương thức cam kết và khôi phục của DBI để cam kết hoặc hủy giao dịch một cách rõ ràng -
dbh['AutoCommit'] = false # Set auto commit to 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
Phương pháp tiếp cận II
Cách tiếp cận thứ hai sử dụng phương pháp giao dịch . Điều này đơn giản hơn, vì nó cần một khối mã chứa các câu lệnh tạo nên giao dịch. Các giao dịch phương pháp thực hiện các khối, sau đó gọi cam kết hoặc rollback tự động, tuỳ thuộc vào việc các khối thành công hay thất bại -
dbh['AutoCommit'] = false # Set auto commit to 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
Hoạt động CAM KẾT
Cam kết là hoạt động đưa ra tín hiệu xanh cho cơ sở dữ liệu để hoàn thiện các thay đổi và sau hoạt động này, không thể hoàn nguyên thay đổi nào.
Đây là một ví dụ đơn giản để gọi commit phương pháp.
dbh.commit
Hoạt động ROLLBACK
Nếu bạn không hài lòng với một hoặc nhiều thay đổi và bạn muốn hoàn nguyên những thay đổi đó hoàn toàn, thì hãy sử dụng rollback phương pháp.
Đây là một ví dụ đơn giản để gọi rollback phương pháp.
dbh.rollback
Ngắt kết nối cơ sở dữ liệu
Để ngắt kết nối Cơ sở dữ liệu, hãy sử dụng API ngắt kết nối.
dbh.disconnect
Nếu người dùng đóng kết nối với cơ sở dữ liệu bằng phương pháp ngắt kết nối, thì bất kỳ giao dịch chưa thanh toán nào sẽ được DBI khôi phục. Tuy nhiên, thay vì phụ thuộc vào bất kỳ chi tiết triển khai nào của DBI, ứng dụng của bạn tốt hơn nên gọi cam kết hoặc khôi phục một cách rõ ràng.
Xử lý lỗi
Có nhiều nguồn sai sót. Một vài ví dụ là lỗi cú pháp trong câu lệnh SQL được thực thi, lỗi kết nối hoặc gọi phương thức tìm nạp cho một xử lý câu lệnh đã bị hủy hoặc đã hoàn thành.
Nếu một phương pháp DBI không thành công, DBI sẽ đưa ra một ngoại lệ. Các phương thức DBI có thể nêu ra bất kỳ loại ngoại lệ nào nhưng hai lớp ngoại lệ quan trọng nhất là DBI :: InterfaceError và DBI :: DatabaseError .
Các đối tượng ngoại lệ của các lớp này có ba thuộc tính được đặt tên là err , errstr và state , đại diện cho số lỗi, chuỗi lỗi mô tả và mã lỗi chuẩn. Các thuộc tính được giải thích bên dưới -
err- Trả về biểu diễn số nguyên của lỗi đã xảy ra hoặc số không nếu điều này không được DBD hỗ trợ. Ví dụ: Oracle DBD trả về phần số của thông báo lỗi ORA-XXXX .
errstr - Trả về một biểu diễn chuỗi của lỗi đã xảy ra.
state- Trả về mã SQLSTATE của lỗi đã xảy ra. SQLSTATE là một chuỗi dài năm ký tự. Hầu hết các DBD không hỗ trợ điều này và thay vào đó trả về nil.
Bạn đã thấy đoạn mã sau ở trên trong hầu hết các ví dụ -
rescue DBI::DatabaseError => e
puts "An error occurred"
puts "Error code: #{e.err}"
puts "Error message: #{e.errstr}"
dbh.rollback
ensure
# disconnect from server
dbh.disconnect if dbh
end
Để nhận thông tin gỡ lỗi về những gì tập lệnh của bạn đang làm khi nó thực thi, bạn có thể bật tính năng theo dõi. Để làm điều này, trước tiên bạn phải tải mô-đun dbi / trace và sau đó gọi phương thức theo dõi điều khiển chế độ theo dõi và điểm đến đầu ra -
require "dbi/trace"
..............
trace(mode, destination)
Giá trị chế độ có thể là 0 (tắt), 1, 2 hoặc 3 và đích phải là một đối tượng IO. Các giá trị mặc định tương ứng là 2 và STDERR.
Khối mã với các phương thức
Có một số phương pháp tạo xử lý. Các phương thức này có thể được gọi bằng một khối mã. Ưu điểm của việc sử dụng khối mã cùng với các phương thức là chúng cung cấp xử lý cho khối mã làm tham số của nó và tự động dọn dẹp xử lý khi khối kết thúc. Có rất ít ví dụ để hiểu khái niệm này.
DBI.connect- Phương thức này tạo ra một xử lý cơ sở dữ liệu và bạn nên gọi ngắt kết nối ở cuối khối để ngắt kết nối cơ sở dữ liệu.
dbh.prepare- Phương thức này tạo ra một câu lệnh xử lý và nên kết thúc ở cuối khối. Trong khối, bạn phải gọi thực hiện phương pháp để thực hiện báo cáo kết quả.
dbh.execute- Phương thức này cũng tương tự ngoại trừ việc chúng ta không cần gọi thực thi trong khối. Xử lý câu lệnh được thực hiện tự động.
ví dụ 1
DBI.connect có thể lấy một khối mã, chuyển xử lý cơ sở dữ liệu cho nó và tự động ngắt kết nối xử lý ở cuối khối như sau.
dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", "testuser", "test123") do |dbh|
Ví dụ 2
dbh.prepare có thể lấy một khối mã, chuyển xử lý câu lệnh cho nó và tự động gọi kết thúc ở cuối khối như sau.
dbh.prepare("SHOW DATABASES") do |sth|
sth.execute
puts "Databases: " + sth.fetch_all.join(", ")
end
Ví dụ 3
dbh.execute có thể lấy một khối mã, chuyển lệnh xử lý cho nó và tự động gọi kết thúc ở cuối khối như sau:
dbh.execute("SHOW DATABASES") do |sth|
puts "Databases: " + sth.fetch_all.join(", ")
end
Phương thức giao dịch DBI cũng sử dụng một khối mã đã được mô tả ở trên.
Các chức năng và thuộc tính dành riêng cho trình điều khiển
DBI cho phép trình điều khiển cơ sở dữ liệu cung cấp các hàm bổ sung dành riêng cho cơ sở dữ liệu, người dùng có thể gọi hàm này thông qua phương thức func của bất kỳ đối tượng Handle nào.
Các thuộc tính dành riêng cho trình điều khiển được hỗ trợ và có thể được đặt hoặc nhận bằng cách sử dụng []= hoặc là [] các phương pháp.
Sr.No. | Chức năng & Mô tả |
---|---|
1 | dbh.func(:createdb, db_name) Tạo một cơ sở dữ liệu mới. |
2 | dbh.func(:dropdb, db_name) Đánh rơi cơ sở dữ liệu. |
3 | dbh.func(:reload) Thực hiện thao tác tải lại. |
4 | dbh.func(:shutdown) Tắt máy chủ. |
5 | dbh.func(:insert_id) => Fixnum Trả về giá trị AUTO_INCREMENT gần đây nhất cho kết nối. |
6 | dbh.func(:client_info) => String Trả về thông tin máy khách MySQL theo phiên bản. |
7 | dbh.func(:client_version) => Fixnum Trả về thông tin khách hàng về phiên bản. Nó tương tự như: client_info nhưng nó trả về một fixnum thay vì sting. |
số 8 | dbh.func(:host_info) => String Trả về thông tin máy chủ. |
9 | dbh.func(:proto_info) => Fixnum Trả về giao thức đang được sử dụng cho giao tiếp. |
10 | dbh.func(:server_info) => String Trả về thông tin máy chủ MySQL theo phiên bản. |
11 | dbh.func(:stat) => String Trả về trạng thái hiện tại của cơ sở dữ liệu. |
12 | dbh.func(:thread_id) => Fixnum Trả về ID chủ đề hiện tại. |
Thí dụ
#!/usr/bin/ruby
require "dbi"
begin
# connect to the MySQL server
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
Điều này sẽ tạo ra kết quả sau:
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