Latest web development tutorials

루비 데이터베이스 액세스 - DBI 자습서

이 장에서는 데이터베이스에 액세스하는 데 루비를 사용하는 방법을 보여줍니다.루비 DBI 모듈은데이터베이스 독립적 인 인터페이스는 루비 스크립트 펄 DBI 모듈과 유사합니다.

DBI, 즉 데이터베이스 루비 데이터베이스 독립적 인 인터페이스 대신에 독립적 인 인터페이스. 기본 데이터베이스와 루비 코드 사이의 DBI는 쉽게 데이터베이스 전환을 구현할 수있는 추상화 계층을 제공합니다. 또한, 방법, 변수 및 기준의 세트를 정의하는 데이터베이스 독립적 일치 데이터베이스 인터페이스를 제공한다.

DBI는 다음과 상호 작용할 수있다 :

  • ADO (ActiveX 데이터 개체)
  • DB2
  • Frontbase
  • 은 mSQL
  • MySQL의
  • ODBC
  • 신탁
  • OCI8 (오라클)
  • PostgreSQL의
  • 프록시 / 서버
  • SQLite는
  • SQLRelay

DBI 애플리케이션 아키텍처

배경에서 사용할 수있는 모든 데이터베이스의 DBI 독립적. 오라클, MySQL은, 인포믹스를 사용하든, 당신은 DBI를 사용할 수 있습니다. 다음 차트는 명확하게이 점을 보여줍니다.

루비 DBI 구조

루비 DBI 일반적인 아키텍처는 두 개의 층을 사용한다 :

  • 데이터베이스 인터페이스 (DBI) 층을 포함한다. 이 레이어는베이스 독립 관계없이 접근의 타입, 데이터베이스 서버를 사용하여, 공중 액세스 방법의 시리즈를 제공한다.
  • 데이터베이스 드라이버 (DBD) 층을 포함한다. 이 계층은 데이터베이스에 의존, 다른 드라이브는 다른 데이터베이스 엔진에 대한 액세스를 제공합니다. 다른 드라이브를 사용하여 MySQL은, PostgreSQL을, 각각 인터베이스, 오라클,,. 각 드라이버는 DBI 층으로부터의 요청을 해석 할 책임이 있으며, 이러한 요청은 데이터베이스 서버의 특정 유형에 대한 요청을 적용하도록 매핑된다.

설치

당신은 MySQL 데이터베이스에 액세스 할 루비 스크립트를 작성하려는 경우, 당신은 루비 MySQL의 모듈을 설치해야합니다.

MySQL의 개발 키트를 설치합니다

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

# Centos
yum install mysql-devel

맥 OS는 다음과 같은 코드를 추가, ~ / .bash_profile에 또는 ~ / .profile 파일을 수정해야합니다 :

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

또는 부드러운 연결을 사용 :

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

루비 젬은 DBI를 설치 사용하십시오 (권장)

2003 년 11 월 설립에 대해 젬은 루비 1.9 버전의 루비 표준 라이브러리의 일부가되었다. 더 자세한 내용은 볼 수 있습니다 : 루비 루비 젬

DBI와 DBD-mysql을 설치 보석을 사용합니다 :

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

사용 코드 설치 (1.9 미만의 루비 버전은이 방법을 사용합니다)

이 모듈은하는 DBD입니다 http://tmtm.org/downloads/mysql/ruby/를 다운로드합니다.

최신 패키지를 다운로드 한 후 디렉토리에 압축을 풀고 설치하려면 다음 명령을 실행합니다 :

% ruby extconf.rb

或者

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

或者

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

그런 다음 컴파일

% make

구하여 루비 / DBI 설치

당신은 다운로드하여 다음 링크에서 루비 DBI 모듈을 설치할 수 있습니다 :

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

설치를 시작하기 전에, 당신이 루트 권한을 가지고 있는지 확인하십시오. 이제 설치하려면 다음 단계를 설치 :

1 단계

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

직접 다른 압축 및 압축 해제에서.

2 단계

디렉토리루비 DBI 마스터를입력디렉토리에setup.rb구성 스크립트를 사용합니다. 가장 일반적인 구성 명령은 임의의 파라미터 설정 매개 변수에 따라되지 않습니다. 기본 구성 명령은 모든 드라이버를 설치합니다.

$ ruby setup.rb config

보다 구체적으로는, 당신은 당신이 사용하려는 특정 부분을 나열 --with 옵션을 사용할 수 있습니다. 메인 DBI 모듈과 MySQL의 DBD 층 드라이브를 구성 할 경우, 예를 들어, 다음 명령을 입력 :

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

3 단계

마지막 단계는 설치하려면 다음 명령을 사용하여 드라이브를 만드는 것입니다 :

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

데이터베이스 연결

우리가 데이터베이스에 연결하기 전에 MySQL 데이터베이스를 사용하는 가정, 확인이 있는지 확인 :

  • 당신은 데이터베이스 TESTDB를 만들었습니다.
  • 당신은 TESTDB의 테이블 EMPLOYEE를 만들었습니다.
  • 필드 FIRST_NAME, LAST_NAME, 연령, 성별 및 소득이있는 테이블.
  • TESTDB에 액세스 할 수있는 설정 사용자 ID "testuser를"암호 "test123"
  • 이미 컴퓨터에 제대로 루비 모듈 DBI를 설치했습니다.
  • 당신은 기본 운영 MySQL의 이해, MySQL의 자습서를 보았다.

MySQL 데이터베이스 연결 "TESTDB"의의 예 :

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

이 스크립트를 실행하면 리눅스 시스템에서 다음과 같은 결과를 생성합니다.

Server version: 5.0.45

데이터 소스 반환 데이터베이스 핸들 (데이터베이스 핸들)과의 연결을 설정하고, 이후의 사용을위한DBH에 저장하거나, DBH는전무e.err전자로설정 될 경우:오류 코드와 에러를 반환errstr을문자열입니다.

마지막으로,이 프로그램을 종료하기 전에, 데이터베이스 연결, 자원의 석방을 닫아야합니다.

INSERT 작업

당신이 데이터베이스 테이블에서 레코드를 생성 할 때 INSERT 작업을 사용합니다.

데이터베이스 연결되면 우리 테이블을 생성하거나DO를 이용하여 기록 방법을 생성하기 위해 테이블에 데이터를 삽입하거나 준비방법을실행할준비가 된 것이다.

사용 문을

성명은 데이터베이스 처리방법을 호출하여 행을 반환하지 않습니다.이 방법은 문 문자열 매개 변수를 사용하여 문에 의해 영향을받는 행의 수를 반환합니다.

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

마찬가지로, 당신은 EMPLOYEE 테이블에 레코드를생성하는SQLINSERT문을 실행할 수 있습니다.

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

준비하고실행 사용

당신은 루비 코드 SQL 문을 실행하는 데 DBI의준비와실행 방법을 사용할 수 있습니다.

다음과 같이 레코드를 만들려면 :

  • INSERT 문에 준비된 SQL 문. 이 방법을준비를 사용하여 수행됩니다.
  • , SQL 쿼리를 실행하여 데이터베이스에서 모든 결과를 선택합니다.이것은 실행 방법을 이용하여 수행한다.
  • 명령문 핸들에서 손을 뗍니다. 이것은마무리 API를 사용하여 수행한다.
  • 모두가 잘된다면, 다음 작업을커밋하거나 트랜잭션 롤백을완료있습니다.

다음은이 두 가지 방법의 구문은 다음과 같습니다

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

두 방법은 SQL 문을 통과 할 값을결합하는데 사용될 수있다.경우에 입력되는 값은,이 경우 값을 결합하는 데 사용되는 사전에 부여 될 수 없다. 물음표를 사용(?) 대신 실제 값으로, 실제 값은 () API를 실행을 통해 전달합니다.

다음 예는 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

여러 INSERT를 사용하는 경우, 먼저 문을 준비하고 훨씬 더 효율적으로 할 호출보다 각 사이클을 통해 루프에서 여러 번 실행합니다.

READ 작업

모든 데이터베이스에 대한 읽기 작업은 데이터베이스에서 유용한 정보를 얻을 의미한다.

데이터베이스 연결되면, 우리는 데이터베이스를 조회 할 준비가되었습니다. 우리는 방법을 사용하거나준비하고 데이터베이스 테이블에서 값을 얻을 방법을 실행않습니다.

다음 단계는 기록하기 :

  • SQL 쿼리의 제조에 요구되는 조건에 따라. 이 방법을준비를 사용하여 수행됩니다.
  • , SQL 쿼리를 실행하여 데이터베이스에서 모든 결과를 선택합니다.이것은 실행 방법을 이용하여 수행한다.
  • 하나 하나는 결과를 얻을, 그 결과를 출력합니다. 이 방법을가져 오기를 사용하여 수행됩니다.
  • 명령문 핸들에서 손을 뗍니다. 이것은마무리 방법의 사용을 통해 수행됩니다.

다음 예제 쿼리는 모든 임금 (급여)는 EMPLOYEE 테이블에서 1,000 명 이상을 기록했다.

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

이것은 다음과 같은 결과를

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

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

데이터베이스에서 레코드를 얻기 위해 많은 방법은 당신이 관심이 있다면, 당신은 볼 수 있습니다 루비 DBI 읽기 동작을 .

업데이트 작업

데이터베이스 갱신 동작은 하나 이상의 데이터베이스 갱신 기존 레코드를 말한다. 다음의 예는 SEX 모든 레코드에 대한 'M'입니다 업데이트합니다. 여기, 우리는 올해 모든 남성의 나이를 추가합니다. 그것은 세 단계로 구분됩니다

  • SQL 쿼리의 제조에 요구되는 조건에 따라. 이 방법을준비를 사용하여 수행됩니다.
  • , SQL 쿼리를 실행하여 데이터베이스에서 모든 결과를 선택합니다.이것은 실행 방법을 이용하여 수행한다.
  • 명령문 핸들에서 손을 뗍니다. 이것은마무리 방법의 사용을 통해 수행됩니다.
  • 모두가 잘된다면, 다음 작업을커밋하거나 트랜잭션 롤백을완료있습니다.
#!/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 작업

데이터베이스에서 레코드를 삭제할 때 DELETE 작업을 사용합니다. 다음 예는 EMPLOYEE의 모든 기록을 통해 AGE (20)을 삭제합니다. 다음과 같이 작업 단계는 다음과 같습니다

  • SQL 쿼리의 제조에 요구되는 조건에 따라. 이 방법을준비를 사용하여 수행됩니다.
  • , SQL 쿼리를 실행하여 데이터베이스에서 원하는 기록을 삭제합니다.이것은 실행 방법을 이용하여 수행한다.
  • 명령문 핸들에서 손을 뗍니다. 이것은마무리 방법의 사용을 통해 수행됩니다.
  • 모두가 잘된다면, 다음 작업을커밋하거나 트랜잭션 롤백을완료있습니다.
#!/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

행정 업무

트랜잭션은 트랜잭션 일관성을 보장하는 메커니즘이다. 서비스는 다음 네 가지 특성을가집니다 :

  • 자성 (자성) 트랜잭션 자성 프로그램은 소재 데이터베이스의 논리적 인 단위로 거래에 포함된다는 것을 의미하고, 그 데이터의 수정 작업을 수행하거나 모두 실행되거나 모두 실행되지 않는다.
  • 일관성 (일관성) 일관성 트랜잭션 전에 데이터베이스의 구현 일관성있는 상태에 있어야 후에 실행되는 트랜잭션을 말한다.데이터베이스의 상태가 모든 무결성 제약 조건을 만족하는 경우, 데이터베이스가 일관성이 말한다.
  • 절연 (절연) : 트랜잭션 격리는 트랜잭션을 수정하기 위해 다른 시도를 볼 수 없습니다, 봉쇄 할 수있다 운영 및 운영 데이터의 트랜잭션 내에서, 즉 서로 격리 된 동시 트랜잭션을 의미한다.
  • 영구 (내구성) 트랜잭션 내구성 시스템 또는 매체 장애, 업데이트가 손실되지 않도록하기 위해 트랜잭션을 커밋 때 것을 의미한다.트랜잭션이 커밋되면 즉, 데이터베이스의 데이터를 영구적으로 변경되어야하는 데이터베이스 시스템 장애를 견딜. 영구 데이터베이스 백업 및 복구 보장.

DBI는 트랜잭션을 수행하는 두 가지 방법을 제공합니다. 하나는 커밋 또는 트랜잭션을 롤백 할 수있는커밋또는롤백방법이다. 또한 거기되는거래방법은 트랜잭션을 실행하기 위해 사용될 수있다. 다음에 우리는 트랜잭션을 구현하는 두 가지 간단한 방법을 소개합니다 :

방법 I

첫 번째 방법은 명시 적으로 커밋 또는 트랜잭션을 취소 DBI의커밋과롤백 방법을 사용합니다 :

   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

방법 II

두 번째 방법은거래방법을 사용한다. 이 트랜잭션이 문을 포함한 코드 블록을 구성하는 필요하기 때문에이 방법은 비교적 간단하다. 자동커밋또는롤백호출처리 방법은,블록을 실행하고, 그 블록이 성공적으로 실행된다:

   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

커밋이 동작은 데이터베이스 변경을 식별 완료되고,이 동작 후에, 모든 변화는 회수되지 않는다.

다음은 간단한 예제는 메소드 호출을커밋합니다.

     dbh.commit

ROLLBACK 작업

당신은 하나 또는 몇 변화에 만족하지 않는 경우, 당신은 완전히 이러한 변경을 복원롤백 방법을 사용하고 싶습니다.

여기에롤백 (rollback) 메서드 호출의 간단한 예입니다.

     dbh.rollback

데이터베이스를 분리

데이터베이스 연결을 해제하려면 해제 API를 사용합니다.

    dbh.disconnect

사용자가 데이터베이스 연결 해제 방법을 닫을 경우, DBI 모두 완료되지 않은 트랜잭션을 롤백합니다. 그러나, 어떤 DBI의 구현 정보에 의존하지 않고, 응용 프로그램이 커밋 또는 롤백 할 수있는 좋은 명시 적으로 호출 할 수 있습니다.

처리 오류

오류의 다양한 소스가 있습니다. 예를 들어, 구문 SQL 문의 구현에 오류 또는 연결이 실패하거나 완전한 문장 또는 취소 된 핸들 호출 방법을 가져.

DBI 방법이 실패 할 경우, DBI 예외가 발생합니다. DBI 방법은 예외의 모든 유형을 발생시킬 수 있지만, 가장 중요한 예외 클래스DBI :: InterfaceErrorDBI :: DatabaseError의 것이다.

이러한 클래스의 예외 객체가ERR,errstr에 세 가지 속성과상태이며,서브 테이블에 오류 번호, 설명 오류 문자열 및 표준 오류 코드를 나타냅니다. 다음과 같이 지정 속성 :

  • ERR : DBD이전무의반환을 지원하지 않는 경우, 표기법을 발생 정수 오류를반환합니다.예를 들어, 오라클 DBD 섹션 ORA-XXXX 오류메시지를 반환합니다.
  • errstr을 : 발생한 오류의 캐릭터 라인 표현을 돌려줍니다.
  • 상태는 다음 SQLSTATE 오류 코드가 발생 돌려줍니다.SQLSTATE는 다섯 문자열의 길이입니다. 의 DBD의 대부분을 지원하지 않습니다, 그것은 전무를 반환합니다.

위의 예에서, 당신은 다음과 같은 코드를 본 적이 :

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

스크립트가 실행될 때, 사용자가 추적 할 수 있도록 수행되는 스크립트의 내용에 대한 디버그 정보를 획득한다. 이 작업을 수행하려면 먼저 DBI / 추적 모듈을 다운로드 한 다음 제어 모드와 출력 위치추적 방법을추적 호출해야합니다 :

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

trace(mode, destination)

모드 값 0 (OFF), 1, 2, 또는 3, 대상의 값이 IO 객체되어야 할 수있다. 디폴트 값은 2 STDERR이다.

차단 방법

핸들을 만들 수있는 방법이 있습니다. 이러한 방법은 코드 블록이 호출됩니다. 상기 방법으로 코드 블록을 사용하는 장점은, 블록이 자동으로 해제 핸들을 종료 인수로 블록에 대한 핸들을 제공한다는 것이다. 다음은이 개념을 이해하는 데 도움이되는 몇 가지 예입니다.

  • DBI.connect :이 방법은 데이터베이스 핸들을 생성하여, 그것은 데이터베이스를 분리 블록 통화단절의끝에서 권장된다.
  • dbh.prepare :이 방법은 블록의 끝에서마무리를호출 권장 명령문 핸들을 생성합니다.블록 내에서 문을 실행할 수있는실행방법을 호출해야합니다.
  • dbh.execute :이 방법은 dbh.prepare 유사하지만 블록 내에서 메소드를 실행 호출 할 필요는 없습니다 dbh.execute.명령문 핸들이 자동으로 실행됩니다.

예 1

DBI.connect 그것을 데이터베이스 핸들을 통과 코드 블록을 가질 수 있고, 손잡이는 자동적으로 블록의 끝에서 분리된다.

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

예 2

dbh.prepare는 문 손잡이를 전달하는 코드 블록을 가지고 있고, 자동 블록의 끝 마무리를 호출 할 수있다.

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

예 3

dbh.execute는 문 손잡이를 전달하는 코드 블록을 가지고 있고, 자동 블록의 끝 마무리를 호출 할 수있다.

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

DBI 거래방법은 또한 상기 부분에서 앞서 설명한 않은 코드 블록으로 제공 될 수있다.

드라이버 별 기능 및 특성

DBI 데이터베이스 드라이버가 추가 기능을 특정 데이터베이스를 제공하자,이 기능은 사용자의FUNC방법 핸들 객체에 의해 호출 할 수 있습니다.

설정 또는 속성을 특정 드라이버를 얻으려면[] = 또는 []방법을 사용합니다.

DBD :: mysql을 특정 드라이버 다음과 같은 기능을 구현합니다

아니오. 기능 및 설명
(1) dbh.func (: CREATEDB, DB_NAME)
새 데이터베이스를 만듭니다.
dbh.func (: dropdb의, DB_NAME)
데이터베이스를 삭제합니다.
3 dbh.func (: 다시로드)
작업을 다시로드합니다.
4 dbh.func (: 종료)
서버를 종료합니다.
(5) dbh.func (: INSERT_ID) => Fixnum이라는
연결의 최근의 AUTO_INCREMENT 값을 돌려줍니다.
6 dbh.func (: CLIENT_INFO) => 문자열
필요에 따라 MySQL의 클라이언트 버전 정보를 돌려줍니다.
(7) dbh.func (: client_version) => Fixnum이라는
다시 클라이언트 버전 정보에 따라. CLIENT_INFO 유사하지만, 오히려 문자열을 반환보다는 Fixnum이라는를 반환합니다 때문입니다.
8 dbh.func (: host_info) => 문자열
호스트 정보를 반환합니다.
9 dbh.func (: proto_info) => Fixnum이라는
통신에 사용되는 프로토콜을 돌려줍니다.
(10) dbh.func (: server_info) => 문자열
기반의 MySQL 서버 버전 정보를 돌려줍니다.
(11) dbh.func (: 합계) => Stringb >
데이터베이스의 현재 상태를 리턴한다.
(12) dbh.func (: thread_id) => Fixnum이라는
현재의 thread의 ID를 돌려줍니다.

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

이것은 다음과 같은 결과를

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