Latest web development tutorials

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-Architektur

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