Ruby dostępu do bazy danych - DBI Tutorial
Ten rozdział pokaże jak korzystać z Ruby, aby uzyskać dostęp do bazy danych. ModułRuby DBIzapewnia interfejs bazy danych niezależnych jest podobny do modułu Perl DBI skryptów Ruby.
DBI czyli Database niezależny interfejs, w imieniu interfejsu bazy niezależne Ruby. DBI między kodu Ruby z podstawowej bazy danych zapewnia warstwę abstrakcji, która pozwala na łatwe wdrożenie przełączenie bazy danych. To definiuje zestaw metod, zmiennych i norm, zapewnia spójny interfejs DATABASE niezależne.
DBI mogą wchodzić w interakcje z następującymi zasadami:
- ADO (ActiveX Data Objects)
- DB2
- FrontBase
- mSQL
- MySQL
- ODBC
- wyrocznia
- OCI8 (Oracle)
- PostgreSQL
- Proxy / serwer
- SQLite
- SQLRelay
DBI architektury aplikacji
DBI niezależne od jakiegokolwiek dostępnego w tle bazy. Czy używasz Oracle, MySQL, Informix, można użyć DBI. Poniższy wykres wyraźnie ilustruje ten punkt.
Ruby DBI ogólna architektura korzysta z dwóch warstw:
- Interfejs bazy danych (DBI) warstwy. Warstwa ta jest w bazie niezależne i zawiera szereg publicznej metody dostępu, za pomocą serwera bazy danych, bez względu na rodzaj podejścia.
- Kierowca Database (DBD) warstwy. Warstwa ta jest zależna od bazy danych, inny napęd zapewnia dostęp do różnych silników baz danych. MySQL, PostgreSQL, InterBase, Oracle, odpowiednio, za pomocą innego napędu. Każdy kierowca jest odpowiedzialny za interpretację wnioski z warstwy DBI, a te żądania są odwzorowywane stosuje się do wniosku o danym typie serwera bazy danych.
zainstalować
Jeśli chcesz pisać skrypty Ruby dostępu do bazy danych MySQL, trzeba zainstalować moduł Ruby MySQL.
Instalowanie MySQL Development Kit
# Ubuntu sudo apt-get install mysql-client sudo apt-get install libmysqlclient15-dev # Centos yum install mysql-devel
Mac OS, trzeba zmodyfikować ~ / .bash_profile lub plik ~ / .profile, dodaj następujący kod:
MYSQL=/usr/local/mysql/bin export PATH=$PATH:$MYSQL export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH
Albo użyć miękkiego połączenia:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Użyj RubyGems instalacji DBI (zalecane)
RubyGems o założona w listopadzie 2003 roku, stała się częścią biblioteki standardowej Ruby z Ruby 1.9 wersji. Więcej szczegółów można obejrzeć: Ruby RubyGems
Użyj gem install dBi i DBD-mysql:
sudo gem install dbi sudo gem install mysql sudo gem install dbd-mysql
Instalacja użyć kodu (wersja Ruby mniej niż 1,9 do korzystania z tej metody)
Moduł jest DBD z http://tmtm.org/downloads/mysql/ruby/~~HEAD=pobj pobrania.
Po pobraniu najnowszy pakiet, rozpakować do katalogu, należy wykonać następujące polecenie, aby zainstalować:
% ruby extconf.rb 或者 % ruby extconf.rb --with-mysql-dir=/usr/local/mysql 或者 % ruby extconf.rb --with-mysql-config
Następnie kompilacji:
% make
Uzyskać i zainstalować Ruby / DBI
Można pobrać i zainstalować moduł Ruby DBI z poniższego linku:
https://github.com/erikh/ruby-dbi |
Przed rozpoczęciem instalacji, upewnij się, że masz uprawnienia administratora. Teraz należy zainstalować następujące kroki, aby zainstalować:
Etap 1
git clone https://github.com/erikh/ruby-dbi.git
Lub bezpośrednio pod innym zip i rozpakować.
Etap 2
Podaj katalogruby-dBi-master,użyjsetup.rbskrypt konfiguracyjny w katalogu. Najczęstsze polecenia konfiguracyjne nie są przestrzegane dowolnymi parametrami parametrem konfiguracyjnym. Komenda domyślna konfiguracja, aby zainstalować wszystkie sterowniki.
$ ruby setup.rb config
Dokładniej, można użyć opcji --with do listy konkretną partię, którą chcesz użyć. Na przykład, jeśli chcesz skonfigurować główny moduł DBI i napęd warstwy MySQL DBD, wprowadź następujące polecenie:
$ ruby setup.rb config --with=dbi,dbd_mysql
etap 3,
Ostatnim krokiem jest utworzenie dysku, należy użyć następującego polecenia, aby zainstalować:
$ ruby setup.rb setup $ ruby setup.rb install
Database Connectivity
Załóżmy, że mamy do korzystania z bazy danych MySQL przed połączeniem się z bazą danych, należy upewnić się, że:
- Został utworzony testdb bazy danych.
- Został utworzony pracownika w tabeli z bazą danych TESTDB.
- Stół z FIRST_NAME pola, LAST_NAME, wieku, płci i dochodów.
- Ustaw ID użytkownika "tester" i hasło "test123", aby uzyskać dostęp testdb
- Już na komputerze zainstalowany prawidłowo Ruby modułu DBI.
- Widzieliście samouczek MySQL, zrozumienie podstawowej MySQL operacyjnego.
Poniżej przedstawiono przykłady baz danych MySQL związku "testdb" stanowi:
#!/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
Po uruchomieniu tego skryptu, przyniesie następujące rezultaty na komputerze z systemem Linux.
Server version: 5.0.45
Jeśli nawiązanie połączenia ze źródłem danych, zwróconym uchwyt bazy danych (uchwyt bazy danych), a zapisywane wpierśnicy do późniejszego wykorzystania lub dbhzostanie ustawiony nawartość zerową,e.err ie :: errstrzwróci kod błędu i błąd ciąg.
Wreszcie, przed zamknięciem tego programu, należy zamknąć połączenie z bazą danych, uwolnienie zasobów.
operacja INSERT
Gdy chcesz utworzyć rekord w tabeli bazy danych, należy użyć operacji INSERT.
Raz do połączenia z bazą danych, jesteśmy gotowi, aby utworzyć tabelę lub wstawić dane w tabeli, aby utworzyć metodę nagrywania przy użyciuzrobić lub przygotowaćiwykonaćmetodami.
Zastosowanie do instrukcja
Oświadczenie nie zwraca wierszezrobić poprzez wywołanie metody przetwarzania baz danych.Metoda ta przyjmuje parametr ciąg oświadczenie i zwraca liczbę wierszy dotkniętych instrukcji.
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 )" );
W podobny sposób możnawykonaćinstrukcjiINSERT,aby utworzyć rekordy do tabeli pracownika.
#!/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
Korzystanieprzygotowanieiwykonanie
Można użyć metodyprzygotowaniairealizacjiDBI do wykonania Ruby oświadczenia kod SQL.
Aby utworzyć płytę, co następuje:
- Przygotowana instrukcja SQL za pomocą instrukcji INSERT. W ten sposób można osiągnąć poprzez zastosowanie metodyprzygotowania.
- Wykonaj zapytanie SQL, zaznacz wszystkie wyniki z bazy danych. W ten sposób można osiągnąćza pomocą sposobu wykonania.
- Zwolnij uchwyt oświadczenie. Będzie to dokonane przez zastosowaniemety API.
- Jeśli wszystko pójdzie dobrze, topopełnić operację lub można wykonać wycofywanie transakcji.
Oto składnia tych dwóch metod:
sth = dbh.prepare(statement) sth.execute ... zero or more SQL operations ... sth.finish
Obie metody mogą być stosowane dowiązania wartości przejść SQL.Czasami wartości do wprowadzenia nie mogą zostać podane przed, w tym przypadku, stosuje się do wiązania wartości. Używaj znaku zapytania(?) Zamiast rzeczywistej wartości, wartość rzeczywista przejść przez execute () API.
Poniższy przykład tworzy dwa rekordy w tabeli Pracownik:
#!/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
Jeśli korzystasz z wielu INSERT, to najpierw przygotować sprawozdanie, a następnie wykonać kilka razy w pętli przez każdego cyklu, niż wymaga zrobić o wiele bardziej efektywnie.
operacji odczytu
Operacja odczytu na dowolnej bazy danych odnosi się do uzyskania użytecznych informacji z bazy danych.
Raz do połączenia z bazą danych, jesteśmy gotowi do zapytania do bazy danych. Możemy zastosować metodę lubsposób przygotowaniaiwykonaniametody, aby uzyskać wartości z tabeli bazy danych.
Pierwsze krok rejestrowane w następujący sposób:
- Na podstawie warunków wymaganych do przygotowania zapytań SQL. W ten sposób można osiągnąć poprzez zastosowanie metodyprzygotowania.
- Wykonaj zapytanie SQL, zaznacz wszystkie wyniki z bazy danych. W ten sposób można osiągnąćza pomocą sposobu wykonania.
- Je, aby otrzymać wyniki, i wysyła wynik. W ten sposób można osiągnąć dzięki zastosowaniupobierać metod.
- Zwolnij uchwyt oświadczenie. W ten sposób można osiągnąć poprzez zastosowanie sposobówwykończenia.
W poniższym przykładzie kwerendy wszystkich płac (wynagrodzenia) rejestrowane ponad 1000 od stołu pracownika.
#!/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
To daje następujące wyniki:
First Name: Mac, Last Name : Mohan Age: 20, Sex : M Salary :2000 First Name: John, Last Name : Poul Age: 25, Sex : M Salary :2300
Istnieje wiele metod, aby uzyskać rekordy z bazy danych, jeśli jesteś zainteresowany, można zobaczyć działanie Ruby DBI odczytu .
aktualizacja Operacja
Każde działanie w bazie UPDATE odnosi się do jednej lub więcej aktualizacji bazy istniejących rekordów. Poniższy przykład aktualizuje seks jest "M" dla wszystkich rekordów. Tutaj dodamy roku wszystkie mężczyźni wiekowych. Będzie można podzielić na trzy etapy:
- Na podstawie warunków wymaganych do przygotowania zapytań SQL. W ten sposób można osiągnąć poprzez zastosowanie metodyprzygotowania.
- Wykonaj zapytanie SQL, zaznacz wszystkie wyniki z bazy danych. W ten sposób można osiągnąćza pomocą sposobu wykonania.
- Zwolnij uchwyt oświadczenie. W ten sposób można osiągnąć poprzez zastosowanie sposobówwykończenia.
- Jeśli wszystko pójdzie dobrze, topopełnić operację lub można wykonać wycofywanie transakcji.
#!/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
operacja usuwania
Jeśli chcesz usunąć rekordy z bazy danych, należy użyć operacji usuwania. Poniższe przykłady usuwać wieku 20 lat w stosunku do wszystkich zapisów od pracownika. Etapy działania są następujące:
- Na podstawie warunków wymaganych do przygotowania zapytań SQL. W ten sposób można osiągnąć poprzez zastosowanie metodyprzygotowania.
- Wykonywanie zapytań SQL, usuń żądane rekordy z bazy danych. W ten sposób można osiągnąćza pomocą sposobu wykonania.
- Zwolnij uchwyt oświadczenie. W ten sposób można osiągnąć poprzez zastosowanie sposobówwykończenia.
- Jeśli wszystko pójdzie dobrze, topopełnić operację lub można wykonać wycofywanie transakcji.
#!/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
sprawy wykonawcze
Transakcja jest mechanizmem, w celu zapewnienia spójności transakcyjnej. Usługi powinny mieć cztery następujące atrybuty:
- Atomowość (niepodzielność): niepodzielność transakcji oznacza, że program jest zawarty w transakcji jako jednostki logicznej bazy danych do pracy, robi operacje modyfikacji danych albo wszystkie wykonane lub nie zrealizowane w ogóle.
- Spójność (Spójność): transakcja Spójność dotyczy transakcji zawartej przed i po wdrożeniu bazy danych musi być w stanie spójnym.Jeżeli stan bazy danych spełnia wszystkie ograniczenia integralności, mówią, że baza danych jest spójna.
- Izolacja (izolacji) izolowanie transakcja dotyczy jednoczesnych operacji są oddzielone od siebie, to znaczy w transakcji pracy i obsługi danych muszą być uszczelnione, to nie jest widoczne inne próby modyfikowania transakcji.
- Trwałe (trwałość): trwałość transakcji oznacza, że gdy system lub nośniki awaria, popełnione transakcji w celu zapewnienia, że aktualizacje nie mogą zostać utracone.Że po transakcji zobowiązuje się, zmienić swoje dane w bazie danych powinny być trwałe, znosić żadnej awarii systemu bazy danych. Trwałe zagwarantowane tworzenia kopii zapasowych i odzyskiwania danych.
DBI oferuje dwa sposoby na wykonanie transakcji. Jednym z nich jestzobowiązanialubwycofaniametody popełnienia lub wycofać transakcję. Istnieje również sposóbtransakcjamoże być wykorzystywane do realizacji transakcji. Następnie wprowadzić dwie proste metody realizacji transakcji:
metoda I
Pierwsza metoda wykorzystujezatwierdzanieiROLLBACKmetod DBI jawnie popełnienia lub anulować transakcję:
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
Sposób II
Druga metoda wykorzystuje metodętransakcji.Metoda ta jest stosunkowo prosta, ponieważ wymaga transakcja stanowi blok kodu zawierający oświadczenie. Metodatransakcjiwykonuje blok, a następnie blok jest wykonana pomyślnie, automatycznie wywołaćpopełnienialubwycofać:
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 operację
Zobowiązać się operacja została zakończona w celu identyfikacji zmian w bazie danych, a po tej operacji, wszystkie zmiany nie podlegają zwrotowi.
Oto prosty przykładzobowiązać wywołania metody.
dbh.commit
operacja ROLLBACK
Jeśli nie jesteś zadowolony z jednego lub kilku zmian, chcesz, aby całkowicie przywrócić te zmiany, należy użyć metodywycofywania.
Oto prosty przykładwycofania wywołania metody.
dbh.rollback
Odłącz bazę danych
Aby rozłączyć się z bazą danych, należy użyć API rozłączania.
dbh.disconnect
Jeśli użytkownik zamyka metodę rozłączania połączenia z bazą danych, DBI wycofuje wszystkie niekompletne transakcji. Jednak to nie opiera się na szczegółach realizacji którejkolwiek DBI, a aplikacja może być dobrym wyraźne wezwanie do popełnienia lub wycofać.
błąd przetwarzania
Istnieje wiele różnych źródeł błędów. Na przykład błędy składniowe w celu wykonania instrukcji SQL lub połączenie nie powiedzie się, czy jest kompletne zestawienie połączenia lub anulowanego uchwyt sprowadzić metodę.
Jeśli metoda DBI zawiedzie, DBI rzuci wyjątek. Metoda DBI mogą rzucić dowolny typ wyjątku, ale dwa najważniejsze klasy Wyjątkiem jestDBI :: InterfaceErroriDBI :: Databaseerror.
obiekty wyjątkiem tych klas sąErr,errstr trzy atrybuty istan,sub-tabela przedstawia liczbę błędów, opisową błędzie ciąg i standardowy kod błędu. Parametry określone w następujący sposób:
- err: zwraca błąd całkowitą, która miała miejsce zapisu, jeśli DBD nie obsługuje powrótzera.Na przykład, Oracle DBD Zwraca punkt komunikat o błędzie ORA-XXXX.
- errstr: Zwraca ciąg znaków reprezentujący błędu, który wystąpił.
- Stan: Zwraca kod błędu SQLSTATE miejsce.SQLSTATE jest pięć znaków długości łańcuch. Większość DBD nie obsługuje, zwróci nil.
W powyższym przykładzie, widziałeś następujący kod:
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
Aby uzyskać informacje debugowania o treści skryptu jest wykonywany, gdy skrypt zostanie wykonany, można włączyć śledzenie. Aby to zrobić, należy najpierw pobrać moduł dBi / śledzenia, a następnie zadzwonić do śledzenia tryb sterowania i sposobu wyjścia przeznaczeniaśledzenia:
require "dbi/trace" .............. trace(mode, destination)
Tryb wartość może być 0 (wyłączone), 1,2 lub 3, wartość przeznaczenia powinno być przedmiotem IO. Domyślne wartości to 2 i stderr.
metoda blok
Istnieją sposoby, aby utworzyć uchwytu. Metody te są wywoływane przez blok kodu. Zalety korzystania z bloków kodu za pomocą metody jest to, że dostarczają one uchwyt do bloku jako argument, gdy blok zostaje rozwiązana automatycznie usuwane uchwyt. Oto kilka przykładów, które pomogą zrozumieć tę koncepcję.
- DBI.connect: Metoda ta generuje uchwyt baz danych, jest zalecane w celurozłączeniapołączenia z bloku odłączania bazy danych.
- dbh.prepare: Metoda ta generuje uchwyt oświadczenie zaleca wywołaniewykończeniena końcu bloku.Wewnątrz bloku, należy wywołać metodęExecute wcelu wykonania instrukcji.
- dbh.execute: Sposób jest podobny do dbh.prepare, ale nie dbh.execute zadzwonić do wykonywania sposobu w tym polu.Uchwyt stwierdzenie jest wykonywane automatycznie.
Przykład 1
DBI.connect może blok kodu, przekazując mu uchwytu bazy danych, a uchwyt automatycznie odłączać na końcu bloku.
dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", "testuser", "test123") do |dbh|
Przykład 2
dbh.prepare może blok kodu, przechodząc uchwyt wyciągu oraz wywołuje automatycznie zakończyć na końcu bloku.
dbh.prepare("SHOW DATABASES") do |sth| sth.execute puts "Databases: " + sth.fetch_all.join(", ") end
Przykład 3
dbh.execute może blok kodu, przechodząc uchwyt wyciągu oraz wywołuje automatycznie zakończyć na końcu bloku.
dbh.execute("SHOW DATABASES") do |sth| puts "Databases: " + sth.fetch_all.join(", ") end
Sposób transakcjiDBImoże być również wyposażona w bloku kodu, co w powyższych sekcjach nie wyjaśniono powyżej.
Funkcje i właściwości specyficznych dla kierowcy
Niech sterownik bazy danych DBI zapewnia dodatkowe funkcje konkretnej bazy danych, funkcje te mogą być wywoływane przez jakąkolwiekfunkłatwy sposób Handle obiektu.
Użyj[] = lub [],aby ustawić metodę lub uzyskać atrybuty specyficzne sterowniki.
DBD :: mysql realizuje następujące funkcje określonego sterownika:
Nie. | Funkcja i opis |
---|---|
1 | dbh.func (: createdb, db_name) Utwórz nową bazę danych. |
2 | dbh.func (: dropdb, db_name) Aby usunąć bazę danych. |
3 | dbh.func (: reload) Odśwież operację. |
4 | dbh.func (: shutdown) Wyłącz serwer. |
5 | dbh.func (: insert_id) => Fixnum Zwraca ostatnią wartość AUTO_INCREMENT połączenia. |
6 | dbh.func (: client_info) => String Zwraca MySQL wersja klienta informacje wymagane. |
7 | dbh.func (: client_version) => Fixnum W zależności od informacji o wersji z powrotem do klienta. To jest: Podobny do client_info, ale powróci do Fixnum, zamiast wracać ciąg. |
8 | dbh.func (: host_info) => String Zwraca informacje hosta. |
9 | dbh.func (: proto_info) => Fixnum Zwraca protokołów wykorzystywanych do komunikacji. |
10 | dbh.func (: server_info) => String Zwraca informacje o wersji serwera MySQL w oparciu. |
11 | dbh.func (: stat) => Stringb > Zwraca aktualny stan danych. |
12 | dbh.func (: thread_id) => Fixnum Zwraca id bieżącego wątku. |
Przykłady
#!/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
To daje następujące wyniki:
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