Latest web development tutorials

Accès à la base Ruby - Tutorial DBI

Ce chapitre vous montrera comment utiliser Ruby pour accéder à la base de données. moduleRuby DBIfournit une interface de base de données indépendante est similaire au module Perl DBI pour les scripts Ruby.

DBI à savoir la base de données d'interface indépendante, au nom de l'interface de base de données indépendante Ruby. DBI entre le code Ruby avec la base de données sous-jacente fournit une couche d'abstraction qui vous permet d'implémenter facilement une commutation de base de données. Il définit un ensemble de méthodes, des variables et des normes, fournit une interface de base de données cohérente base de données indépendante.

DBI peut interagir avec les éléments suivants:

  • ADO (ActiveX Data Objects)
  • DB2
  • Frontbase
  • mSQL
  • MySQL
  • ODBC
  • oracle
  • OCI8 (Oracle)
  • PostgreSQL
  • Proxy / Server
  • SQLite
  • sqlrelay

architecture d'application DBI

DBI indépendante de toute base de données disponible en arrière-plan. Que vous utilisiez Oracle, MySQL, Informix, vous pouvez utiliser le DBI. Le tableau suivant illustre bien ce point.

l'architecture Ruby DBI

Ruby DBI architecture générale utilise deux couches:

  • Interface de base de données (DBI) de la couche. Cette couche est la base de données indépendante et fournit une série de méthode d'accès du public, en utilisant un serveur de base de données, quel que soit le type d'approche.
  • pilote de base de données (DBD) de la couche. Cette couche dépend de la base de données, un autre lecteur donne accès à des moteurs de bases de données différentes. MySQL, PostgreSQL, Interbase, Oracle, respectivement, en utilisant un autre lecteur. Chaque pilote est responsable de l'interprétation des requêtes de la couche DBI, et ces demandes sont mappés à appliquer à une demande d'un type donné de serveur de base de données.

installer

Si vous voulez écrire des scripts Ruby pour accéder à la base de données MySQL, vous devez installer le module Ruby MySQL.

Kit de développement Mysql Installer

# Ubuntu
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient15-dev

# Centos
yum install mysql-devel

Mac OS, vous devez modifier ~ / .bash_profile ou fichier ~ / .profile, ajoutez le code suivant:

MYSQL=/usr/local/mysql/bin
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

Ou utiliser la connexion douce:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Utilisez RubyGems installer DBI (recommandé)

RubyGems à propos fondée en Novembre 2003, est devenu une partie de la bibliothèque standard de Ruby Ruby version 1.9. Plus de détails peuvent être consultés: le Ruby RubyGems

Utilisez gem install dbi et dbd-mysql:

sudo gem install dbi
sudo gem install mysql
sudo gem install dbd-mysql

Installation Utilisez le code (version Ruby moins de 1,9 à utiliser cette méthode)

Le module est un DBD, de http://tmtm.org/downloads/mysql/ruby/ téléchargement.

Après avoir téléchargé le dernier paquet, décompressez dans le répertoire, exécutez la commande suivante pour installer:

% ruby extconf.rb

或者

% ruby extconf.rb --with-mysql-dir=/usr/local/mysql

或者

% ruby extconf.rb --with-mysql-config

Puis compiler:

% make

Obtenir et installer Ruby / DBI

Vous pouvez télécharger et installer le module Ruby DBI à partir du lien suivant:

https://github.com/erikh/ruby-dbi

Avant de commencer l'installation, assurez-vous d'avoir les privilèges root. Maintenant, installez les étapes suivantes pour installer:

Etape 1

git clone https://github.com/erikh/ruby-dbi.git

Ou directement sous un autre zip et unzip.

Etape 2

Entrez le répertoireruby-dbi-maître,utiliser un script de configurationsetup.rbdans le répertoire. Les commandes de configuration les plus courantes ne sont pas suivies par tous les paramètres paramètre de configuration. La commande de configuration par défaut pour installer tous les pilotes.

$ ruby setup.rb config

Plus précisément, vous pouvez utiliser l'option --with à la liste de la partie spécifique que vous souhaitez utiliser. Par exemple, si vous souhaitez configurer le module principal de DBI et la couche de route MySQL DBD, entrez la commande suivante:

$ ruby setup.rb config --with=dbi,dbd_mysql

Etape 3

La dernière étape consiste à créer le lecteur, utilisez la commande suivante pour installer:

$ ruby setup.rb setup
$ ruby setup.rb install

Database Connectivity

Supposons que nous utilisons la base de données MySQL avant la connexion à la base de données, assurez-vous que:

  • Vous avez créé un TESTDB de base de données.
  • Vous avez créé l'EMPLOYÉ de table dans TESTDB.
  • La table avec un champ FIRST_NAME, LAST_NAME, âge, sexe et REVENU.
  • Set ID d'utilisateur "testuser" et le mot "test123" pour accéder à TESTDB
  • Déjà sur votre machine correctement installé Ruby module DBI.
  • Vous avez vu MySQL tutoriel, la compréhension du MySQL d'exploitation sous-jacent.

Les exemples de connexion de base de données MySQL "TESTDB" des suivants sont:

#!/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

Lorsque vous exécutez ce script, produira les résultats suivants sur une machine Linux.

Server version: 5.0.45

Si vous établissez une connexion avec une source de données, la poignée de base de données retourné (poignée de base de données), et enregistré à laDHP pour une utilisation ultérieure, ou DHPsera fixé à unevaleur nulle,e.err ete :: errstrretourner le code d'erreur et l' erreur chaîne.

Enfin, avant de quitter ce programme, assurez-vous de fermer la connexion de base de données, la libération des ressources.

opération INSERT

Lorsque vous voulez créer un enregistrement dans une table de base de données, vous devez utiliser INSERT.

Une fois la connexion de base de données, nous sommes prêts à créer une table ou d' insérer des données dans la table pour créer une méthode d'enregistrement en utilisant undo ou prépareretexécuterdes méthodes.

Utiliser faire la déclaration

La déclaration ne renvoie pas de lignes en appelantfaire des méthodes de traitement de base de données.Cette méthode prend un paramètre de chaîne de requête et retourne le nombre de lignes affectées par l'instruction.

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 )" );

De même, vous pouvez exécuteruneinstruction SQLINSERTpour créer des enregistrements dans la table 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

Utilisation deprépareret d'exécuter

Vous pouvez utiliserprépareretexécuterla méthode de DBI pour exécuter Ruby déclarations du code SQL.

Pour créer un enregistrement comme suit:

  • instruction SQL préparée avec l'instruction INSERT. Ceci sera accompli grâce à l'utilisation méthodepréparer.
  • Exécuter la requête SQL, sélectionnez tous les résultats de la base de données. Ceci sera réalisé en utilisantla méthode d' exécution.
  • Relâchez la poignée de déclaration. Ceci sera accompli grâce à l'utilisation de l'API d'arrivée.
  • Si tout va bien, l'opération devalidation, ou vous pouvez compléter la restaurationde latransaction.

Voici la syntaxe de ces deux méthodes:

sth = dbh.prepare(statement)
sth.execute
   ... zero or more SQL operations ...
sth.finish

Les deux méthodes peuvent être utilisées pourlier une valeur à transmettre des instructions SQL.Parfois, la valeur est entrée ne peut être donnée à l'avance, dans ce cas, est utilisé pour lier les valeurs. Utilisez un point d' interrogation(?) Au lieu de la valeur réelle, la valeur réelle de passer à travers l' exécution () API.

L'exemple suivant crée deux enregistrements de la table 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

Si vous utilisez INSERT multiple, puis d'abord préparer une déclaration, puis exécuter plusieurs fois dans une boucle à travers chaque cycle qu'il appelle faire beaucoup plus efficacement.

opération READ

opération de lecture sur une base de données se réfère à obtenir des informations utiles à partir de la base de données.

Une fois la connexion de base de données, nous sommes prêts à interroger la base de données. Nous pouvons utiliser une méthode oune prépareretexécuterla méthode pour obtenir la valeur d'une table de base de données.

Obtenir étape enregistrée comme suit:

  • Sur la base des conditions requises pour la préparation des requêtes SQL. Ceci sera accompli grâce à l'utilisation méthodepréparer.
  • Exécuter la requête SQL, sélectionnez tous les résultats de la base de données. Ceci sera réalisé en utilisantla méthode d' exécution.
  • Un par un pour obtenir des résultats, et délivre les résultats. Ceci sera accompli par l'utilisation dechercher des méthodes.
  • Relâchez la poignée de déclaration. Ceci sera accompli par l'utilisation de procédésde finition.

L'exemple de requête suivant tous les salaires (salaire) a enregistré plus de 1000 de la table 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

On obtient les résultats suivants:

First Name: Mac, Last Name : Mohan
Age: 20, Sex : M
Salary :2000

First Name: John, Last Name : Poul
Age: 25, Sex : M
Salary :2300

Il existe de nombreuses méthodes pour obtenir les enregistrements de la base de données, si vous êtes intéressé, vous pouvez voir Ruby DBI opération de lecture .

Mise à jour de l'opération

Toute opération base de données UPDATE se réfère à une ou plusieurs mises à jour de base de données des enregistrements existants. L'exemple suivant met à jour SEX est 'M' pour tous les enregistrements. Ici, nous allons ajouter une année, tous les mâles AGE. Il sera divisé en trois étapes:

  • Sur la base des conditions requises pour la préparation des requêtes SQL. Ceci sera accompli grâce à l'utilisation méthodepréparer.
  • Exécuter la requête SQL, sélectionnez tous les résultats de la base de données. Ceci sera réalisé en utilisantla méthode d' exécution.
  • Relâchez la poignée de déclaration. Ceci sera accompli par l'utilisation de procédésde finition.
  • Si tout va bien, l'opération devalidation, ou vous pouvez compléter la restaurationde latransaction.
#!/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

opération DELETE

Lorsque vous souhaitez supprimer des enregistrements de la base de données, vous devez utiliser l'opération DELETE. Les exemples suivants supprimer AGE 20 sur tous les enregistrements de l'employé. Les étapes de fonctionnement sont les suivantes:

  • Sur la base des conditions requises pour la préparation des requêtes SQL. Ceci sera accompli grâce à l'utilisation méthodepréparer.
  • Exécuter des requêtes SQL, supprimer les enregistrements souhaités à partir de la base de données. Ceci sera réalisé en utilisantla méthode d' exécution.
  • Relâchez la poignée de déclaration. Ceci sera accompli par l'utilisation de procédésde finition.
  • Si tout va bien, l'opération devalidation, ou vous pouvez compléter la restaurationde latransaction.
#!/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

Affaires exécutives

Une transaction est un mécanisme pour assurer la cohérence des transactions. Les services devraient avoir les quatre attributs suivants:

  • Atomicité (atomicité): atomicité de la transaction signifie que le programme est inclus dans la transaction comme une unité logique de base de données de travail, il fait les opérations de modification de données soit toutes exécutées ou non à tous.
  • Cohérence (Cohérence): transaction de cohérence se réfère à une transaction exécutée avant et après la mise en œuvre de la base de données doit être dans un état cohérent.Si l'état de la base de données répond à toutes les contraintes d'intégrité, dire la base de données est conforme.
  • Isolation (Isolation): isolation de la transaction se réfère aux transactions concurrentes sont isolées les unes des autres, qui est, dans une transaction de données de fonctionnement et d' exploitation sont à étancher, on ne voit pas d' autres tentatives pour modifier la transaction.
  • signifie transaction durabilité que lorsqu'un système ou l' échec des médias, a commis des opérations pour assurer que les mises à jour ne peuvent pas êtreperdus: persistants (durabilité).Qu'une fois la transaction est validée, modifiez ses données dans la base de données devrait être permanente, supporter toute défaillance du système de base de données. Persistent garanti par la sauvegarde de base de données et de récupération.

DBI offre deux façons d'effectuer la transaction. On est les méthodesvaliderouannulerpour valider ou annuler la transaction. Il y a également un procédéde transactionpeut être utilisé pour implémenter la transaction. Ensuite, nous introduisons deux méthode simple de mise en œuvre des opérations:

procédé I

La première méthode utilisevalidationet d'annulationdes méthodes de DBI pour commettre ou annuler la transaction explicitement:

   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

procédé II

La deuxième méthode utilise le procédéde transaction.Cette méthode est relativement simple, car elle nécessite une opération constitue un bloc de code déclaration contenant. méthodede transactionexécute le bloc, puis le bloc est exécuté avec succès, invoquer automatiquementcommitourollback:

   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 opération

Commit est une opération a été achevée afin d'identifier les changements de base de données, et après cette opération, tous les changements ne sont pas récupérables.

Voici un exemple simplecommit invocation de méthode.

     dbh.commit

opération ROLLBACK

Si vous n'êtes pas satisfait avec un ou quelques changements, vous voulez restaurer complètement ces changements, utilisez la méthodede restauration.

Voici un exemple simple de la méthoderollback appel.

     dbh.rollback

Déconnectez la base de données

Pour vous déconnecter de la base de données, utilisez l'API de déconnexion.

    dbh.disconnect

Si l'utilisateur ferme la méthode de déconnexion de connexion de base de données, DBI annule toutes les transactions incomplètes. Cependant, il ne repose pas sur les détails de tout DBI de mise en œuvre, et votre application peut être un bon appel explicite à valider ou annuler.

Erreur de traitement

Il existe de nombreuses sources d'erreur différents. Par exemple, les erreurs de syntaxe dans la mise en œuvre de l'instruction SQL ou la connexion échoue, ou est une déclaration complète ou un appel de poignée annulées méthode de récupération.

Si une méthode DBI échoue, DBI lancera une exception. méthode DBI peut jeter tout type d'exception, mais les deux plus importantes classe d'exception estDBI :: InterfaceErroretDBI :: DatabaseError.

objets d'exception de ces classes sonterr,errstr trois attributs et de l'état,sous-tableau représente le numéro d'erreur, une chaîne d'erreur descriptif et un code d'erreur standard. Attribut spécifié comme suit:

  • err: renvoie une erreur d'entier qui a eu lieu la notation, si DBD ne supporte pas le retour dezéro.Par exemple, Oracle DBD Retourne section message d'erreur ORA-XXXX.
  • errstr: Renvoie une représentation de chaîne de l'erreur survenue.
  • Etat: Retourne le code d'erreur SQLSTATE est survenue.SQLSTATE est une longueur de chaîne de cinq caractères. La plupart des DBD ne le supporte pas, il sera de retour à zéro.

Dans l'exemple ci-dessus, vous avez vu le code suivant:

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

Pour obtenir des informations de débogage sur le contenu du script est exécuté lorsque le script est exécuté, vous pouvez activer le traçage. Pour ce faire, vous devez d' abord télécharger le module dbi / trace, et ensuite appeler le suivi de mode de commande et la méthode de sortie destinationde trace:

require "dbi/trace"
..............

trace(mode, destination)

mode de valeur peut être 0 (désactivé), 1,2, ou 3, la valeur de la destination doit être un objet IO. Les valeurs par défaut sont 2 et STDERR.

méthode des blocs

Il existe des moyens pour créer une poignée. Ces méthodes sont invoquées par le bloc de code. Les avantages de l'utilisation de blocs de code avec la méthode est qu'elles fournissent une poignée pour le bloc comme un argument lorsque le bloc est terminé poignée effacée automatiquement. Voici quelques exemples pour aider à comprendre ce concept.

  • DBI.connect: Cette méthode génère une poignée de base de données, il est recommandé à la fin de l'appel de blocdéconnexionpour déconnecter la base de données.
  • dbh.prepare: Cette méthode génère un descripteur d'instruction, recommande d' appelerarrivéeà la fin du bloc.Dans un bloc, vous devez appeler la méthode d'exécutionpour exécuter l'instruction.
  • dbh.execute: Cette méthode est similaire à dbh.prepare, mais dbh.execute pas besoin d'appeler méthode execute dans le bloc.Une poignée de déclaration est automatiquement exécutée.

exemple 1

DBI.connect peut avoir un bloc de code, en lui passant la poignée de base de données, et la poignée se déconnectera automatiquement à la fin du bloc.

dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", 
                  "testuser", "test123") do |dbh|

exemple 2

dbh.prepare peut avoir un bloc de code, en passant le descripteur d'instruction, et appelle automatiquement arrivée à la fin du bloc.

dbh.prepare("SHOW DATABASES") do |sth|
       sth.execute
       puts "Databases: " + sth.fetch_all.join(", ")
end

exemple 3

dbh.execute peut avoir un bloc de code, en passant le descripteur d'instruction, et appelle automatiquement arrivée à la fin du bloc.

dbh.execute("SHOW DATABASES") do |sth|
   puts "Databases: " + sth.fetch_all.join(", ")
end

méthode de transactionDBIpeut également être muni d'un bloc de code, qui , dans les sections ci - dessus ont expliqué précédemment.

fonctions et propriétés spécifiques aux pilotes

Laissez pilote de base de données DBI fournit des fonctions supplémentaires base de données spécifique, ces fonctions peuvent être appelées par un objet quelconque méthode de poignée utilisateurfonc.

Utilisez[] = ouméthode[]pour définir ou obtenir des pilotes spécifiques attributs.

DBD :: Mysql implémente la fonction suivante un pilote spécifique:

Non. Fonction & Description
1 dbh.func (: createdb, db_name)
Créer une nouvelle base de données.
2 dbh.func (: dropdb, db_name)
Pour supprimer une base de données.
3 dbh.func (: reload)
Recharger opération.
4 dbh.func (: shutdown)
Arrêtez le serveur.
5 dbh.func (: insert_id) => Fixnum
Renvoie la valeur AUTO_INCREMENT récente de la connexion.
6 dbh.func (: client_info) => Chaîne
Renvoie MySQL informations de version du client au besoin.
7 dbh.func (: client_version) => Fixnum
Selon les informations de version au client. Ceci est: Similaire à client_info, mais il retournera un fixnum, plutôt que de retourner une chaîne.
8 dbh.func (: host_info) => Chaîne
Renvoie les informations d'hôte.
9 dbh.func (: proto_info) => Fixnum
Renvoie les protocoles utilisés pour la communication.
10 dbh.func (: server_info) => Chaîne
Renvoie les informations de version du serveur MySQL base.
11 dbh.func (: stat) => chaineB >
Renvoie l'état actuel de la base de données.
12 dbh.func (: thread_id) => Fixnum
Retourne l'identifiant du thread courant.

Exemples

#!/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

On obtient les résultats suivants:

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