Ruby-Zugriff auf die Datenbank - DBI Tutorial
Dieses Kapitel zeigt Ihnen, wie Ruby verwenden die Datenbank zuzugreifen.Ruby-DBI- Modul bietet eine Datenbank-unabhängige Schnittstelle ist ähnlich wie Perl DBI - Modul für Ruby - Skripte.
DBI nämlich Datenbank-unabhängige Schnittstelle, im Namen der Ruby-Datenbank-unabhängige Schnittstelle. DBI zwischen Ruby-Code mit der zugrunde liegenden Datenbank bietet eine Abstraktionsschicht, die Ihnen erlaubt, eine Datenbank Umschaltung zu implementieren. Es definiert eine Reihe von Methoden, Variablen und Normen, bietet eine Datenbank-unabhängige konsistente Datenbank-Schnittstelle.
DBI kann mit den folgenden interagieren:
- ADO (ActiveX Data Objects)
- DB2
- Frontbase
- mSQL
- MySQL
- ODBC
- Orakel
- OCI8 (Oracle)
- PostgreSQL
- Proxy / Server
- SQLite
- sqlrelay
DBI Anwendungsarchitektur
DBI unabhängig von einer Datenbank im Hintergrund zur Verfügung. Egal, ob Sie mit Oracle, MySQL, Informix, können Sie die DBI verwenden. Die folgende Tabelle zeigt deutlich, diesen Punkt.
Ruby-DBI allgemeine Architektur verwendet zwei Schichten:
- Datenbank-Schnittstelle (DBI) Schicht. Diese Schicht ist datenbankunabhängig und bietet eine Reihe von öffentlichen Zugriffsmethode, einen Datenbankserver verwenden, unabhängig von der Art der Annäherung.
- Datenbanktreiber (DBD) Schicht. Diese Schicht ist auf der Datenbank abhängig ist, ein anderes Laufwerk ermöglicht den Zugriff auf verschiedene Datenbank-Engines. MySQL, PostgreSQL, Interbase, Oracle, jeweils ein anderes Laufwerk verwenden. Jeder Fahrer ist dafür verantwortlich, die Anfragen von der DBI-Schicht zu interpretieren, und diese Anfragen werden abgebildet auf eine Anfrage für eine bestimmte Art von Datenbank-Server zu übernehmen.
installieren
Wenn Sie Ruby-Skripte schreiben wollen die MySQL-Datenbank zugreifen zu können, müssen Sie Ruby-MySQL-Modul zu installieren.
Installieren Sie Mysql Development Kit
# Ubuntu sudo apt-get install mysql-client sudo apt-get install libmysqlclient15-dev # Centos yum install mysql-devel
Mac OS, müssen Sie ~ / .bash_profile oder ~ / .profile-Datei zu ändern, fügen Sie den folgenden Code:
MYSQL=/usr/local/mysql/bin export PATH=$PATH:$MYSQL export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH
Oder verwenden Sie die Soft-Verbindung:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Verwenden Sie RubyGems installieren DBI (empfohlen)
RubyGems etwa im November 2003 gegründet, wurde ein Teil der Ruby-Standard-Bibliothek von Ruby 1.9-Version. Weitere Details können angezeigt werden: die Ruby - RubyGems
Verwenden Sie gem install dbi und DBD-mysql:
sudo gem install dbi sudo gem install mysql sudo gem install dbd-mysql
Rabatt-Code Installation (Ruby-Version weniger als 1,9, diese Methode zu verwenden)
Das Modul ist ein DBD, von http://tmtm.org/downloads/mysql/ruby/ herunterladen.
Nach dem neuesten Paket herunterzuladen, das Verzeichnis zu entpacken in, führen Sie den folgenden Befehl zu installieren:
% ruby extconf.rb 或者 % ruby extconf.rb --with-mysql-dir=/usr/local/mysql 或者 % ruby extconf.rb --with-mysql-config
Dann kompilieren:
% make
Beziehen und installieren Sie das Rubin / DBI
Sie können die Ruby-DBI-Modul auf den folgenden Link herunterladen und installieren:
https://github.com/erikh/ruby-dbi |
Vor der Installation beginnen, stellen Sie sicher, dass Sie Root-Rechte verfügen. Installieren Sie jetzt die folgenden Schritte zu installieren:
Schritt 1
git clone https://github.com/erikh/ruby-dbi.git
Oder direkt unter einem anderen zip und unzip.
Schritt 2
Geben Sie das Verzeichnisruby-dbi-Masterverwendensetup.rbKonfigurationsskript im Verzeichnis. Die am häufigsten verwendeten Konfigurationsbefehle werden nicht durch irgendwelche Parameter Konfigurationsparameter gefolgt. Die Standardkonfiguration Befehl, um alle Treiber zu installieren.
$ ruby setup.rb config
Genauer gesagt, können Sie die --with-Option verwenden, um die spezifischen Teil, den Sie verwenden möchten, aufzulisten. Zum Beispiel, wenn Sie das Haupt DBI-Modul und die MySQL-DBD Layer-Laufwerk, geben Sie den folgenden Befehl konfigurieren möchten:
$ ruby setup.rb config --with=dbi,dbd_mysql
Schritt 3
Der letzte Schritt ist es, das Laufwerk zu erstellen, den folgenden Befehl verwenden zu installieren:
$ ruby setup.rb setup $ ruby setup.rb install
Database Connectivity
Angenommen, wir die MySQL-Datenbank verwenden, bevor mit der Datenbank verbinden, stellen Sie sicher, dass:
- Sie haben eine Datenbank TESTDB erstellt.
- Sie haben auf die Tabelle EMPLOYEE in TESTDB erstellt.
- Die Tabelle mit einem Feld FIRST_NAME, LAST_NAME, Alter, Geschlecht und Einkommen.
- Stellen Sie Benutzer-ID "Testuser" und das Passwort "test123" zu TESTDB zugreifen
- Bereits auf dem Rechner installiert richtig DBI Ruby-Modul.
- Sie haben MySQL Tutorial gesehen, die zugrunde liegenden Betriebs MySQL zu verstehen.
Die folgenden sind Beispiele für MySQL Datenbank-Verbindung "TESTDB" von:
#!/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
Wenn Sie dieses Skript ausführen, werden die folgenden Ergebnisse auf einer Linux-Maschine produzieren.
Server version: 5.0.45
Wenn Sie eine Verbindung mit einer Datenquelle herzustellen, die zurückgegebene Datenbank - Handle (Datenbank - Handle), und an denDBH für die spätere Verwendung gespeichert oder dbhwird auf Null -Wert,e.err undeeingestellt werden:: errstrden Fehlercode und Fehler zurück String.
Schließlich, bevor Sie dieses Programm zu beenden, müssen Sie die Datenbankverbindung, die Freigabe von Ressourcen zu schließen.
INSERT-Operation
Wenn Sie einen Datensatz in einer Datenbanktabelle erstellen möchten, müssen Sie INSERT-Operation zu verwenden.
Sobald eine Datenbankverbindung, sind wir bereit , einen Tisch oder Einfügen von Daten in der Tabelle zu erstellen , ein Aufzeichnungsverfahren unter Verwendung einesdo zu erstellen oder erstellenund Methodenausführen.
Verwenden Sie Erklärung
Die Anweisung zurückgeben Reihen nicht durch Datenbankverarbeitung Methoden aufrufentun.Bei dieser Methode wird eine Erklärung String-Parameter und gibt die Anzahl der Zeilen, die von der Anweisung betroffen.
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 )" );
In ähnlicher Weise können SieeineSQL - AnweisungINSERTzu erstellen Datensätze in der Tabelle EMPLOYEE auszuführen.
#!/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
MitVorbereitungundDurchführung
Sie können die Nutzung von DBIvorbereitenundausführenMethode Ruby - Code SQL - Anweisungen auszuführen.
So erstellen Sie einen Datensatz wie folgt:
- Vorbereitete SQL-Anweisung mit der INSERT-Anweisung. Dies wird durch den Einsatzvorbereiten Verfahren erreicht werden.
- Führen Sie SQL-Abfrage, wählen Sie alle Ergebnisse aus der Datenbank. Dies wird unter Verwendungdes Verfahrens auszuführen, erreicht werden.
- Lassen Sie die Statement-Handle. Dies wird durch die Verwendung vonZiel - APIdurchgeführtwerden.
- Wenn alles gut geht, dannbegehen die Operation, oder Sie können die Transaktion Rollback abzuschließen.
Hier ist die Syntax dieser beiden Methoden:
sth = dbh.prepare(statement) sth.execute ... zero or more SQL operations ... sth.finish
Beide Methoden können verwendet werden , um einen Wert zubinden , SQL - Anweisungen zu übergeben.Manchmal wird der eingegebene Wert nicht im voraus angegeben werden, in diesem Fall verwendet wird, Werte zu binden. Verwenden Sie ein Fragezeichen(?) Statt des tatsächlichen Wertes, der tatsächliche Wert , um durch execute () API.
Das folgende Beispiel erstellt zwei Datensätze in der Tabelle 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
Wenn Sie mehrere INSERT verwenden, dann bereiten Sie zunächst eine Erklärung, und dann mehrmals in einer Schleife durch jeden Zyklus ausgeführt werden, als es viel effizienter Anrufe tun.
LESE-Operation
LESE-Operation auf jeder Datenbank bezieht sich nützliche Informationen aus der Datenbank zu erhalten.
Sobald eine Datenbankverbindung, sind wir bereit, die Datenbank abzufragen. Wir können eine Methode verwenden , oderSie erstellenundausführenMethode , um den Wert aus einer Datenbanktabelle zu erhalten.
Lassen Sie sich Schritt aufgezeichnet, wie folgt:
- Basierend auf den Bedingungen für die Herstellung von SQL-Abfragen erforderlich. Dies wird durch den Einsatzvorbereiten Verfahren erreicht werden.
- Führen Sie SQL-Abfrage, wählen Sie alle Ergebnisse aus der Datenbank. Dies wird unter Verwendungdes Verfahrens auszuführen, erreicht werden.
- Einer nach dem anderen Ergebnisse zu erhalten, und gibt die Ergebnisse. Dies wird vonAbrufverfahren durch den Einsatz erreicht werden.
- Lassen Sie die Statement-Handle. Dies wird durch die Verwendung vonFinish Verfahren erreicht werden.
Das folgende Beispiel Abfrage alle Lohn (Gehalt) erfasst mehr als 1.000 aus der Tabelle 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
Daraus ergeben sich die folgenden Ergebnisse:
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 viele Methoden Datensätze aus der Datenbank zu erhalten, wenn Sie daran interessiert sind, können Sie sehen Ruby - DBI beim Lesen .
Update-Operation
Jede Datenbank UPDATE-Operation bezieht sich auf eine oder mehrere Datenbank-Update vorhandene Datensätze. Das folgende Beispiel aktualisiert SEX für alle Datensätze 'M' ist. Hier werden wir ein Jahr lang alle Männer AGE hinzuzufügen. Es wird in drei Schritte unterteilt werden:
- Basierend auf den Bedingungen für die Herstellung von SQL-Abfragen erforderlich. Dies wird durch den Einsatzvorbereiten Verfahren erreicht werden.
- Führen Sie SQL-Abfrage, wählen Sie alle Ergebnisse aus der Datenbank. Dies wird unter Verwendungdes Verfahrens auszuführen, erreicht werden.
- Lassen Sie die Statement-Handle. Dies wird durch die Verwendung vonFinish Verfahren erreicht werden.
- Wenn alles gut geht, dannbegehen die Operation, oder Sie können die Transaktion Rollback abzuschließen.
#!/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
DELETE-Operation
Wenn Sie Datensätze aus der Datenbank löschen möchten, müssen Sie die DELETE-Operation zu verwenden. Die folgenden Beispiele AGE 20 über alle Datensätze aus der EMPLOYEE löschen. Die Arbeitsschritte sind wie folgt:
- Basierend auf den Bedingungen für die Herstellung von SQL-Abfragen erforderlich. Dies wird durch den Einsatzvorbereiten Verfahren erreicht werden.
- Ausführen von SQL-Abfragen, löschen Sie die gewünschten Datensätze aus der Datenbank. Dies wird unter Verwendungdes Verfahrens auszuführen, erreicht werden.
- Lassen Sie die Statement-Handle. Dies wird durch die Verwendung vonFinish Verfahren erreicht werden.
- Wenn alles gut geht, dannbegehen die Operation, oder Sie können die Transaktion Rollback abzuschließen.
#!/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
Executive-Angelegenheiten
Eine Transaktion ist ein Mechanismus zur Transaktionskonsistenz zu gewährleisten. Die Dienste sollten die folgenden vier Attribute aufweisen:
- Atomicity (Unteilbarkeit): Unteilbarkeit der Transaktion bedeutet , dass das Programm in der Transaktion als eine logische Arbeitseinheit Datenbank enthalten ist, es macht die Datenänderungsoperationen entweder alle ausgeführt oder gar nicht ausgeführt.
- Konsistenz (Konsistenz): Konsistenz Transaktion bezieht sich auf eine Transaktion durchgeführt vor und nach der Implementierung der Datenbank in einen konsistenten Zustand sein muß.Wenn der Zustand der Datenbank alle Integritätsbedingungen erfüllt, sagen die Datenbank konsistent ist.
- Isolation (Isolation): Transaktionsisolations bezieht sich auf die gleichzeitige Transaktionen sind voneinander getrennt, das heißt, innerhalb einer Transaktion von Betrieb und Betriebsdaten werden zu abgeriegelt, es ist nicht andere Versuche gesehen , die Transaktion zu ändern.
- Persistent (Haltbarkeit): Transaktion Haltbarkeit bedeutet , dass , wenn ein System oder Datenträgerfehler, Geschäfte abgeschlossen , um sicherzustellen , dass Updates nicht verloren gehen kann.Dass einmal eine Transaktion festgeschrieben, ändern die Daten in der Datenbank dauerhaft sein sollte, jede Datenbank Systemausfall ertragen. Persistent von Datenbank-Backup und Recovery garantiert.
DBI bietet zwei Möglichkeiten, um die Transaktion durchzuführen. Eine davon ist dieCommitoderRollback- Methoden zu begehen oder die Transaktion rückgängig zu machen . Es gibt auch einTransaktionsverfahrenverwendet werden kann , um die Transaktion zu implementieren. Als nächstes stellen wir zwei einfache Methode Transaktionen der Umsetzung:
Verfahren I
Die erste Methode verwendet DBI MethodenCommitundRollback, um explizit die Transaktion fest oder stornieren:
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
Methode II
Die zweite Methode verwendet dasTransaktionsverfahren.Dieses Verfahren ist relativ einfach, da es sich um eine Transaktion stellt einen Codeblock enthält Anweisung erfordert.Transaktionsverfahrenführt den Block, und dann wird der Block erfolgreich ausgeführt wird , automatischbegehenaufrufen oderRollback:
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 Betrieb
Commit wird eine Operation abgeschlossen ist, die Datenbankänderungen zu identifizieren, und nach dieser Operation werden alle Veränderungen sind nicht erzielbar.
Hier ist ein einfaches Beispiel Methodenaufruf zubegehen.
dbh.commit
ROLLBACK-Operation
Wenn Sie nicht zufrieden sind mit einem oder ein paar Änderungen, wollen Sie vollständig diese Änderungen wiederherzustellen, dieRollback - Methode verwenden.
Hier ist ein einfaches Beispiel für dieRollback - Methode aufrufen.
dbh.rollback
Trennen Sie die Datenbank
Um aus der Datenbank zu trennen, verwenden Sie die Disconnect-API.
dbh.disconnect
Wenn der Benutzer die Datenbankverbindung trennen Methode schließt, rollt DBI alle unvollständigen Transaktionen zurück. Allerdings verlässt sich nicht auf die Details der Implementierung aller DBI und Ihre Anwendung kann eine gute expliziten Aufruf oder zurückzusetzen sein.
Verarbeitungsfehler
Es gibt viele verschiedene Fehlerquellen. Zum Beispiel Syntaxfehler bei der Implementierung der SQL-Anweisung oder die Verbindung fehlschlägt, oder ist eine vollständige Erklärung oder eine abgebrochene Griff Anrufe Methode holen.
Wenn ein DBI-Methode fehlschlägt, wird DBI eine Ausnahme werfen. DBI Verfahren kann jede Art von Ausnahme auslösen, aber die beiden wichtigsten Ausnahmeklasse istDBI :: InterfaceErrorundDBI :: Database.
Exception - Objekte dieser Klassen sinderr,errstr drei Attribute undStaat,Unter Tabelle stellt die Fehlernummer, einen beschreibenden Fehlerstring und einen Standard - Fehlercode. Attribut wie folgt angegeben:
- err: gibt einen Integer - Fehler , die Notation aufgetreten ist , wenn DBD die Rückkehr vonNullnichtunterstützt.Beispielsweise gibt Oracle DBD Abschnitt ORA-XXXXFehlermeldung.
- errstr: Gibt eine Stringdarstellung des Fehlers, der aufgetreten ist .
- Zustand: Gibt den SQLSTATE - Fehlercode aufgetreten.SQLSTATE ist ein Fünf-Zeichenkettenlänge. Die meisten der DBD es nicht unterstützt, wird es Null zurück.
In dem obigen Beispiel, haben Sie den folgenden Code zu sehen:
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
Debug-Informationen über den Inhalt des Skripts erhalten ausgeführt wird, wenn das Skript ausgeführt wird, können Sie die Ablaufverfolgung. Um dies zu tun, müssen Sie zuerst die dbi / Trace - Modul herunterladen, und rufen Sie dann Tracking - Steuerungsmodus undAusgabezielkurveMethode:
require "dbi/trace" .............. trace(mode, destination)
Wertmodus kann 0 (AUS), 1,2 oder 3 ist, der Wert des Ziel sollte ein IO-Objekt sein. Die Standardwerte sind 2 und STDERR.
Blockmethode
Es gibt Möglichkeiten, einen Griff zu erstellen. Diese Methoden werden durch Codeblock aufgerufen. Vorteile der Verwendung von Codeblöcken mit dem Verfahren ist, dass sie einen Handgriff für den Block als Argument zur Verfügung stellen, wenn der Block automatisch gelöscht Griff beendet. Hier sind einige Beispiele zu helfen, dieses Konzept zu verstehen.
- DBI.connect: Diese Methode ein Datenbank - Handle erzeugt, wird es am Ende des Blocks Anruftrennenempfohlen , um die Datenbank zu trennen.
- dbh.prepare: Diese Methode erzeugt ein Statement - Handle, empfiehltZielam Ende des Blocks aufgerufen wird .Innerhalb eines Blocks müssen Sie die Methodeausführenrufen Sie die Anweisung auszuführen.
- dbh.execute: Diese Methode ist ähnlich wie dbh.prepare, aber dbh.execute müssen nicht Methode innerhalb des Blocks ausführen aufrufen.Ein Statement-Handle wird automatisch ausgeführt.
Beispiel 1
DBI.connect kann einen Code - Block haben, ist es die Datenbank - Handle vorbei, und der Griff am Ende des Blocks automatisch zu trennen.
dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", "testuser", "test123") do |dbh|
Beispiel 2
dbh.prepare kann einen Codeblock haben, das Statement - Handle vorbei und ruft automatisch Finish am Ende des Blocks.
dbh.prepare("SHOW DATABASES") do |sth| sth.execute puts "Databases: " + sth.fetch_all.join(", ") end
Beispiel 3
dbh.execute kann einen Codeblock haben, das Statement - Handle vorbei und ruft automatisch Finish am Ende des Blocks.
dbh.execute("SHOW DATABASES") do |sth| puts "Databases: " + sth.fetch_all.join(", ") end
DBITransaktionsverfahren kann auch mit einem Code - Block vorgesehen sein, die in den obigen Abschnitten zuvor erläutert wurden.
Treiber-spezifische Funktionen und Eigenschaften
Lassen Sie DBI - Datenbanktreiber Zusatzfunktionen spezifische Datenbank bereitstellt, können diese Funktionen von jedem BenutzerfuncMethode Handle - Objekt aufgerufen werden.
Verwenden Sie[] = oder []Verfahren einzustellen oder Attribute spezifischen Treibern.
DBD :: Mysql implementiert die Funktion einen bestimmten Fahrer folgende:
Nein. | Funktion & Beschreibung |
---|---|
1 | dbh.func (: createdb, db_name) Erstellen Sie eine neue Datenbank. |
2 | dbh.func (: dropdb, db_name) Um eine Datenbank zu löschen. |
3 | dbh.func (: reload) Reload Betrieb. |
4 | dbh.func (: shutdown) Fahren Sie den Server herunter. |
5 | dbh.func (: insert_id) => Fixnum Gibt den letzten AUTO_INCREMENT Wert der Verbindung. |
6 | dbh.func (: client_info) => String Gibt den MySQL-Client-Version erforderlichen Informationen an. |
7 | dbh.func (: client_version) => Fixnum Je nach Versionsinformationen zurück an den Client. Dies ist: Ähnlich client_info, aber es wird eine Fixnum zurückkehren, anstatt einen String zurück. |
8 | dbh.func (: host_info) => String Gibt die Host-Informationen. |
9 | dbh.func (: proto_info) => Fixnum Gibt die Protokolle für die Kommunikation verwendet. |
10 | dbh.func (: server_info) => String Gibt den MySQL-Server-Version Informationen. |
11 | dbh.func (: stat) => stringB > Gibt den aktuellen Status der Datenbank. |
12 | dbh.func (: thread_id) => Fixnum Gibt den aktuellen Thread-ID. |
Beispiele
#!/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
Daraus ergeben sich die folgenden Ergebnisse:
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