Ruby / DBI-Tutorial
In diesem Kapitel erfahren Sie, wie Sie mit Ruby auf eine Datenbank zugreifen. Das Ruby DBI- Modul bietet eine datenbankunabhängige Schnittstelle für Ruby-Skripte, die der des Perl DBI-Moduls ähnelt.
DBI steht für Database Independent Interface for Ruby. Dies bedeutet, dass DBI eine Abstraktionsschicht zwischen dem Ruby-Code und der zugrunde liegenden Datenbank bereitstellt, sodass Sie die Datenbankimplementierungen ganz einfach wechseln können. Es definiert eine Reihe von Methoden, Variablen und Konventionen, die unabhängig von der tatsächlich verwendeten Datenbank eine konsistente Datenbankschnittstelle bieten.
DBI kann mit folgenden Schnittstellen arbeiten:
- ADO (ActiveX-Datenobjekte)
- DB2
- Frontbase
- mSQL
- MySQL
- ODBC
- Oracle
- OCI8 (Oracle)
- PostgreSQL
- Proxy/Server
- SQLite
- SQLRelay
Architektur einer DBI-Anwendung
DBI ist unabhängig von jeder im Backend verfügbaren Datenbank. Sie können DBI verwenden, unabhängig davon, ob Sie mit Oracle, MySQL oder Informix usw. arbeiten. Dies geht aus dem folgenden Architekturdiagramm hervor.
Die allgemeine Architektur für Ruby DBI verwendet zwei Ebenen:
Die Datenbankschnittstellenschicht (DBI). Diese Schicht ist datenbankunabhängig und bietet eine Reihe allgemeiner Zugriffsmethoden, die unabhängig vom Typ des Datenbankservers, mit dem Sie kommunizieren, auf dieselbe Weise verwendet werden.
Die DBD-Schicht (Database Driver). Diese Schicht ist datenbankabhängig. Verschiedene Treiber bieten Zugriff auf verschiedene Datenbank-Engines. Es gibt einen Treiber für MySQL, einen anderen für PostgreSQL, einen anderen für InterBase, einen anderen für Oracle und so weiter. Jeder Treiber interpretiert Anforderungen von der DBI-Schicht und ordnet sie Anforderungen zu, die für einen bestimmten Typ von Datenbankserver geeignet sind.
Voraussetzungen
Wenn Sie Ruby-Skripte schreiben möchten, um auf MySQL-Datenbanken zuzugreifen, muss das Ruby MySQL-Modul installiert sein.
Dieses Modul fungiert wie oben erläutert als DBD und kann von heruntergeladen werden https://www.tmtm.org/en/mysql/ruby/
Beziehen und Installieren von Ruby / DBI
Sie können das Ruby DBI-Modul von folgendem Speicherort herunterladen und installieren:
https://imgur.com/NFEuWe4/embed
Stellen Sie vor dem Starten dieser Installation sicher, dass Sie über das Root-Recht verfügen. Befolgen Sie nun die unten angegebenen Schritte -
Schritt 1
$ tar zxf dbi-0.2.0.tar.gz
Schritt 2
Gehen Sie in das Verteilungsverzeichnis dbi-0.2.0 und konfigurieren Sie es mit dem Skript setup.rb in diesem Verzeichnis. Der allgemeinste Konfigurationsbefehl sieht folgendermaßen aus, ohne dass dem Konfigurationsargument Argumente folgen. Dieser Befehl konfiguriert die Distribution so, dass standardmäßig alle Treiber installiert werden.
$ ruby setup.rb config
Um genauer zu sein, geben Sie die Option --with an, mit der die bestimmten Teile der Distribution aufgelistet werden, die Sie verwenden möchten. Geben Sie beispielsweise den folgenden Befehl aus, um nur das Haupt-DBI-Modul und den MySQL-Treiber auf DBD-Ebene zu konfigurieren:
$ ruby setup.rb config --with = dbi,dbd_mysql
Schritt 3
Der letzte Schritt besteht darin, den Treiber zu erstellen und mit den folgenden Befehlen zu installieren:
$ ruby setup.rb setup
$ ruby setup.rb install
Datenbankverbindung
Angenommen, wir arbeiten mit der MySQL-Datenbank, bevor Sie eine Verbindung zu einer Datenbank herstellen, stellen Sie Folgendes sicher:
Sie haben eine Datenbank TESTDB erstellt.
Sie haben EMPLOYEE in TESTDB erstellt.
Diese Tabelle enthält die Felder FIRST_NAME, LAST_NAME, AGE, SEX und INCOME.
Die Benutzer-ID "testuser" und das Kennwort "test123" sind für den Zugriff auf TESTDB festgelegt.
Ruby Module DBI ist ordnungsgemäß auf Ihrem Computer installiert.
Sie haben das MySQL-Tutorial durchgearbeitet, um die MySQL-Grundlagen zu verstehen.
Das folgende Beispiel zeigt die Verbindung mit der MySQL-Datenbank "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
Während dieses Skripts ausgeführt wird, wird auf unserem Linux-Computer das folgende Ergebnis erzielt.
Server version: 5.0.45
Wenn eine Verbindung mit der Datenquelle hergestellt wird, wird ein Datenbankhandle zurückgegeben und in gespeichert dbh zur weiteren Verwendung sonst dbhwird auf Null gesetzt und e.err und e :: errstr geben einen Fehlercode bzw. eine Fehlerzeichenfolge zurück.
Stellen Sie schließlich sicher, dass die Datenbankverbindung geschlossen und die Ressourcen freigegeben sind, bevor Sie sie veröffentlichen.
INSERT-Betrieb
Die INSERT-Operation ist erforderlich, wenn Sie Ihre Datensätze in einer Datenbanktabelle erstellen möchten.
Sobald eine Datenbankverbindung hergestellt ist, können wir mithilfe von Tabellen oder Datensätzen in die Datenbanktabellen erstellen do Methode oder prepare und execute Methode.
Do-Anweisung verwenden
Anweisungen, die keine Zeilen zurückgeben, können durch Aufrufen von ausgegeben werden doDatenbankhandle-Methode. Diese Methode verwendet ein Anweisungszeichenfolgenargument und gibt die Anzahl der von der Anweisung betroffenen Zeilen zurück.
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 )" );
Ebenso können Sie die SQL INSERT- Anweisung ausführen , um einen Datensatz in der EMPLOYEE-Tabelle zu erstellen.
#!/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
Mit vorbereiten und ausführen
Sie können Vorbereitungs- und Ausführungsmethoden der DBI-Klasse verwenden, um die SQL-Anweisung über Ruby-Code auszuführen.
Die Datensatzerstellung umfasst die folgenden Schritte:
SQL-Anweisung mit INSERT-Anweisung vorbereiten. Dies erfolgt mit demprepare Methode.
Ausführen einer SQL-Abfrage, um alle Ergebnisse aus der Datenbank auszuwählen. Dies erfolgt mit demexecute Methode.
Anweisungshandle freigeben. Dies erfolgt mitfinish API
Wenn alles gut geht, dann commit diese Operation können Sie sonst rollback die vollständige Transaktion.
Im Folgenden finden Sie die Syntax zur Verwendung dieser beiden Methoden:
sth = dbh.prepare(statement)
sth.execute
... zero or more SQL operations ...
sth.finish
Diese beiden Methoden können zum Bestehen verwendet werden bindWerte zu SQL-Anweisungen. Es kann vorkommen, dass die einzugebenden Werte nicht im Voraus angegeben werden. In einem solchen Fall werden Bindungswerte verwendet. Ein Fragezeichen (?) wird anstelle der tatsächlichen Werte verwendet und dann werden die tatsächlichen Werte über die API execute () übergeben.
Im Folgenden finden Sie ein Beispiel zum Erstellen von zwei Datensätzen in der Tabelle 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
Wenn mehrere INSERTs gleichzeitig vorhanden sind, ist es effizienter, zuerst eine Anweisung vorzubereiten und dann innerhalb einer Schleife mehrmals auszuführen, als jedes Mal durch die Schleife aufzurufen.
LESEN Betrieb
READ Operation für eine beliebige Datenbank bedeutet, einige nützliche Informationen aus der Datenbank abzurufen.
Sobald unsere Datenbankverbindung hergestellt ist, können wir eine Abfrage in diese Datenbank durchführen. Wir können entweder verwendendo Methode oder prepare und execute Methoden zum Abrufen von Werten aus einer Datenbanktabelle.
Das Abrufen von Datensätzen erfolgt in folgenden Schritten:
Vorbereiten der SQL-Abfrage basierend auf den erforderlichen Bedingungen. Dies erfolgt mit demprepare Methode.
Ausführen einer SQL-Abfrage, um alle Ergebnisse aus der Datenbank auszuwählen. Dies erfolgt mit demexecute Methode.
Abrufen aller Ergebnisse nacheinander und Drucken dieser Ergebnisse. Dies erfolgt mit demfetch Methode.
Anweisungshandle freigeben. Dies erfolgt mit demfinish Methode.
Im Folgenden wird beschrieben, wie alle Datensätze aus der EMPLOYEE-Tabelle mit einem Gehalt von mehr als 1000 abgefragt werden.
#!/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
Dies führt zu folgendem Ergebnis:
First Name: Mac, Last Name : Mohan
Age: 20, Sex : M
Salary :2000
First Name: John, Last Name : Poul
Age: 25, Sex : M
Salary :2300
Es gibt weitere Verknüpfungsmethoden zum Abrufen von Datensätzen aus der Datenbank. Wenn Sie interessiert sind, gehen Sie durch das Abrufen des Ergebnisses, andernfalls fahren Sie mit dem nächsten Abschnitt fort.
Vorgang aktualisieren
UPDATE Operation für eine beliebige Datenbank bedeutet, einen oder mehrere Datensätze zu aktualisieren, die bereits in der Datenbank verfügbar sind. Im Folgenden wird beschrieben, wie alle Datensätze mit SEX als 'M' aktualisiert werden. Hier werden wir das ALTER aller Männchen um ein Jahr erhöhen. Dies dauert drei Schritte -
Vorbereiten der SQL-Abfrage basierend auf den erforderlichen Bedingungen. Dies erfolgt mit demprepare Methode.
Ausführen einer SQL-Abfrage, um alle Ergebnisse aus der Datenbank auszuwählen. Dies erfolgt mit demexecute Methode.
Anweisungshandle freigeben. Dies erfolgt mit demfinish Methode.
Wenn alles gut geht, dann commit diese Operation können Sie sonst rollback die vollständige Transaktion.
#!/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
DELETE-Betrieb
Der Vorgang LÖSCHEN ist erforderlich, wenn Sie einige Datensätze aus Ihrer Datenbank löschen möchten. Im Folgenden wird beschrieben, wie Sie alle Datensätze aus EMPLOYEE löschen, wenn das Alter mehr als 20 Jahre beträgt. Dieser Vorgang führt die folgenden Schritte aus.
Vorbereiten der SQL-Abfrage basierend auf den erforderlichen Bedingungen. Dies erfolgt mit demprepare Methode.
Ausführen einer SQL-Abfrage zum Löschen der erforderlichen Datensätze aus der Datenbank. Dies erfolgt mit demexecute Methode.
Anweisungshandle freigeben. Dies erfolgt mit demfinish Methode.
Wenn alles gut geht, dann commit diese Operation können Sie sonst rollback die vollständige Transaktion.
#!/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
Transaktionen durchführen
Transaktionen sind ein Mechanismus, der die Datenkonsistenz gewährleistet. Transaktionen sollten die folgenden vier Eigenschaften haben:
Atomicity - Entweder wird eine Transaktion abgeschlossen oder es passiert überhaupt nichts.
Consistency - Eine Transaktion muss in einem konsistenten Zustand beginnen und das System in einem konsistenten Zustand verlassen.
Isolation - Zwischenergebnisse einer Transaktion sind außerhalb der aktuellen Transaktion nicht sichtbar.
Durability - Sobald eine Transaktion festgeschrieben wurde, bleiben die Auswirkungen auch nach einem Systemausfall bestehen.
Das DBI bietet zwei Methoden zum Festschreiben oder Zurücksetzen einer Transaktion. Es gibt eine weitere Methode namens Transaktion, mit der Transaktionen implementiert werden können. Es gibt zwei einfache Ansätze zur Implementierung von Transaktionen:
Ansatz I.
Der erste Ansatz verwendet die Commit- und Rollback- Methoden von DBI, um die Transaktion explizit festzuschreiben oder abzubrechen.
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
Ansatz II
Der zweite Ansatz verwendet die Transaktionsmethode . Dies ist einfacher, da ein Codeblock erforderlich ist, der die Anweisungen enthält, aus denen die Transaktion besteht. Die Transaktionsmethode führt den Block aus und ruft dann automatisch ein Commit oder Rollback auf , je nachdem, ob der Block erfolgreich ist oder fehlschlägt.
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
COMMIT-Betrieb
Commit ist die Operation, die der Datenbank ein grünes Signal gibt, um die Änderungen abzuschließen. Nach dieser Operation kann keine Änderung zurückgesetzt werden.
Hier ist ein einfaches Beispiel, um das aufzurufen commit Methode.
dbh.commit
ROLLBACK-Betrieb
Wenn Sie mit einer oder mehreren Änderungen nicht zufrieden sind und diese Änderungen vollständig zurücksetzen möchten, verwenden Sie die Option rollback Methode.
Hier ist ein einfaches Beispiel, um das aufzurufen rollback Methode.
dbh.rollback
Datenbank trennen
Verwenden Sie zum Trennen der Datenbankverbindung die API zum Trennen der Verbindung.
dbh.disconnect
Wenn die Verbindung zu einer Datenbank vom Benutzer mit der Trennungsmethode geschlossen wird, werden alle ausstehenden Transaktionen vom DBI zurückgesetzt. Anstatt jedoch von den Implementierungsdetails des DBI abhängig zu sein, ist es besser, wenn Ihre Anwendung das Commit oder Rollback explizit aufruft.
Fehler behandeln
Es gibt viele Fehlerquellen. Einige Beispiele sind ein Syntaxfehler in einer ausgeführten SQL-Anweisung, ein Verbindungsfehler oder das Aufrufen der Abrufmethode für ein bereits abgebrochenes oder abgeschlossenes Anweisungshandle.
Wenn eine DBI-Methode fehlschlägt, löst DBI eine Ausnahme aus. DBI-Methoden können verschiedene Ausnahmetypen auslösen, die beiden wichtigsten Ausnahmeklassen sind jedoch DBI :: InterfaceError und DBI :: DatabaseError .
Ausnahmeobjekte dieser Klassen haben drei Attribute mit den Namen err , errstr und state , die die Fehlernummer, eine beschreibende Fehlerzeichenfolge und einen Standardfehlercode darstellen. Die Attribute werden unten erklärt -
err- Gibt eine ganzzahlige Darstellung des aufgetretenen Fehlers oder Null zurück, wenn dies von der DBD nicht unterstützt wird. Die Oracle-DBD gibt beispielsweise den numerischen Teil einer ORA-XXXX- Fehlermeldung zurück.
errstr - Gibt eine Zeichenfolgendarstellung des aufgetretenen Fehlers zurück.
state- Gibt den SQLSTATE-Code des aufgetretenen Fehlers zurück. Der SQLSTATE ist eine fünf Zeichen lange Zeichenfolge. Die meisten DBDs unterstützen dies nicht und geben stattdessen nil zurück.
In den meisten Beispielen haben Sie den folgenden Code gesehen:
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
Um Debugging-Informationen darüber zu erhalten, was Ihr Skript während der Ausführung tut, können Sie die Ablaufverfolgung aktivieren. Dazu müssen Sie zuerst das Modul dbi / trace laden und dann die Trace- Methode aufrufen , die den Trace-Modus und das Ausgabeziel steuert.
require "dbi/trace"
..............
trace(mode, destination)
Der Moduswert kann 0 (aus), 1, 2 oder 3 sein, und das Ziel sollte ein E / A-Objekt sein. Die Standardwerte sind 2 bzw. STDERR.
Codeblöcke mit Methoden
Es gibt einige Methoden, die Handles erstellen. Diese Methoden können mit einem Codeblock aufgerufen werden. Der Vorteil der Verwendung von Codeblöcken zusammen mit Methoden besteht darin, dass sie das Handle für den Codeblock als Parameter bereitstellen und das Handle automatisch bereinigen, wenn der Block beendet wird. Es gibt nur wenige Beispiele, um das Konzept zu verstehen.
DBI.connect- Diese Methode generiert ein Datenbankhandle. Es wird empfohlen, die Trennung am Ende des Blocks aufzurufen , um die Datenbank zu trennen.
dbh.prepare- Diese Methode generiert ein Anweisungshandle und es wird empfohlen, am Ende des Blocks fertig zu werden. Innerhalb des Blocks müssen Sie die Methode execute aufrufen , um die Anweisung auszuführen.
dbh.execute- Diese Methode ist ähnlich, außer dass wir nicht die Ausführung innerhalb des Blocks aufrufen müssen. Das Anweisungshandle wird automatisch ausgeführt.
Beispiel 1
DBI.connect kann einen Codeblock nehmen, das Datenbankhandle an ihn übergeben und das Handle am Ende des Blocks automatisch wie folgt trennen.
dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", "testuser", "test123") do |dbh|
Beispiel 2
dbh.prepare kann einen Codeblock nehmen, übergibt das Anweisungshandle an ihn und ruft am Ende des Blocks automatisch den Abschluss wie folgt auf.
dbh.prepare("SHOW DATABASES") do |sth|
sth.execute
puts "Databases: " + sth.fetch_all.join(", ")
end
Beispiel 3
dbh.execute kann einen Codeblock nehmen, übergibt das Anweisungshandle an ihn und ruft am Ende des Blocks automatisch den Abschluss wie folgt auf:
dbh.execute("SHOW DATABASES") do |sth|
puts "Databases: " + sth.fetch_all.join(", ")
end
Die DBI- Transaktionsmethode verwendet auch einen Codeblock, der oben beschrieben wurde.
Treiberspezifische Funktionen und Attribute
Mit dem DBI können die Datenbanktreiber zusätzliche datenbankspezifische Funktionen bereitstellen, die vom Benutzer über die func- Methode eines beliebigen Handle-Objekts aufgerufen werden können .
Treiberspezifische Attribute werden unterstützt und können mithilfe von festgelegt oder abgerufen werden []= oder [] Methoden.
Sr.Nr. | Funktionen & Beschreibung |
---|---|
1 | dbh.func(:createdb, db_name) Erstellt eine neue Datenbank. |
2 | dbh.func(:dropdb, db_name) Löscht eine Datenbank. |
3 | dbh.func(:reload) Führt einen Neuladevorgang durch. |
4 | dbh.func(:shutdown) Fährt den Server herunter. |
5 | dbh.func(:insert_id) => Fixnum Gibt den neuesten AUTO_INCREMENT-Wert für eine Verbindung zurück. |
6 | dbh.func(:client_info) => String Gibt MySQL-Client-Informationen in Bezug auf die Version zurück. |
7 | dbh.func(:client_version) => Fixnum Gibt Clientinformationen in Bezug auf die Version zurück. Es ist ähnlich wie: client_info, gibt jedoch eine Fixnummer anstelle von sting zurück. |
8 | dbh.func(:host_info) => String Gibt Hostinformationen zurück. |
9 | dbh.func(:proto_info) => Fixnum Gibt das Protokoll zurück, das für die Kommunikation verwendet wird. |
10 | dbh.func(:server_info) => String Gibt MySQL-Serverinformationen in Bezug auf die Version zurück. |
11 | dbh.func(:stat) => String Gibt den aktuellen Status der Datenbank zurück. |
12 | dbh.func(:thread_id) => Fixnum Gibt die aktuelle Thread-ID zurück. |
Beispiel
#!/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
Dies führt zu folgendem Ergebnis:
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