English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 장에서는 Ruby로 데이터베이스에 접근하는 방법을 설명합니다.Ruby DBI 모듈은 Ruby 스크립트에 Perl DBI 모듈과 유사한 데이터베이스에 독립된 인터페이스를 제공합니다.
DBI는 Database independent interface로, Ruby가 데이터베이스에 독립된 인터페이스를 대표합니다. DBI는 Ruby 코드와 밑바탕 데이터베이스 간에 추상층을 제공하여 데이터베이스 전환을 간단하게 구현할 수 있게 합니다. 그것은 일련의 메서드, 변수 및 규범을 정의하여 데이터베이스에 독립된 일관된 데이터베이스 인터페이스를 제공합니다.
DBI는 다음과 상호작용할 수 있습니다:
ADO (ActiveX Data Objects)
DB2
Frontbase
mSQL
MySQL
ODBC
Oracle
OCI8 (Oracle)
PostgreSQL
Proxy/Server
SQLite
SQLRelay
DBI는 백그라운드에서 사용 가능한 모든 데이터베이스에 독립적입니다. Oracle, MySQL, Informix와 같은 어떤 데이터베이스를 사용하든지, DBI를 사용할 수 있습니다. 아래의 아키텍처 그래프는 이 점을 명확히 설명합니다.
Ruby DBI의 일반 아키텍처는 두 층을 사용합니다:
데이터베이스 인터페이스(DBI) 층. 이 층은 데이터베이스에 독립적이며, 다양한 공통 접근 방법을 제공합니다. 메서드의 사용은 데이터베이스 서버 유형에 관계없습니다.
데이터베이스 드라이버(DBD) 층. 이 층은 데이터베이스에 의존하며, 각 드라이버는 다른 데이터베이스 엔진에 대한 접근을 제공합니다. MySQL, PostgreSQL, InterBase, Oracle 등은 각각 다른 드라이버를 사용합니다. 각 드라이버는 DBI 층에서 오는 요청을 해석하고, 주어진 유형의 데이터베이스 서버에 맞는 요청으로 변환합니다.
MySQL 데이터베이스에 접근할 Ruby 스크립트를 작성하려면 먼저 Ruby MySQL 모듈을 설치해야 합니다.
# Ubuntu sudo apt-get install mysql-client sudo apt-get install libmysqlclient15-dev # CentOS yum install mysql-devel
Mac 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
RubyGems는大约创建于2003년11월, Ruby에서 1.9버전부터 Ruby 표준 라이브러리의 일부가 됨. 자세한 내용은 다음을 참조하세요:Ruby RubyGems
gem을 사용하여 dbi와 dbd 설치-mysql:
sudo gem install dbi sudo gem install mysql sudo gem install dbd-mysql
이 모듈은 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
Ruby 및 설치를 가져오세요/DBI
아래의 링크에서 다운로드하고 설치할 수 있는 Ruby DBI 모듈을 찾을 수 있습니다:
https://github.com/erikh/ruby-dbi
설치하기 전에, root 권한을 가지고 있는지 확인하십시오. 아래의 단계를 따라 설치합니다:
단계 1
git clone https://github.com/erikh/ruby-dbi.git
또는 직접 zip 패키지를 압축하고 解压합니다.
단계 2
디렉토리에 진입합니다 ruby-dbi-master디렉토리에서 사용합니다 setup.rb 스크립트를 사용하여 구성합니다. 가장 일반적인 구성 명령은 config 파라미터에 어떤 파라미터도 추가하지 않는 경우입니다. 이 명령은 기본적으로 모든 드라이버를 설치하는 것으로 설정됩니다.
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, AGE, SEX, INCOME 필드를 가진 테이블이 있습니다.
사용자 ID "testuser"와 비밀번호 "test"를 설정합니다123로 TESTDB에 접근합니다
Ruby 모듈 DBI가您的 기계에 올바르게 설치되었습니다.
MySQL 튜토리얼을 보고 MySQL 기본 작업을 이해했습니다.
MySQL 데이터베이스 "TESTDB"에 연결하는 예제를 보여줍니다:
#!/usr/bin/ruby -w require "dbi" begin # 연결 MySQL 서버 dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", "testuser", "test123) # 서버 버전 문자열을 가져오고 표시합니다 puts \ + row[0] rescue DBI::DatabaseError => e puts "오류가 발생했습니다" puts "오류 코드: #{e.err}" puts "오류 메시지: #{e.errstr}" ensure # 서버와의 연결을 해제 dbh.disconnect if dbh end
이 스크립트를 실행하면 Linux 머신에서 다음과 같은 결과가 발생합니다.
Server version: 5.0.45
如果建立连接时带有数据源,则返回数据库句柄(Database Handle),并保存到 dbh 中以便后续使用,否则 dbh 将被设置为 nil 值,e.err 와 e::errstr 分别返回错误代码和错误字符串。
最后,在退出这段程序之前,请确保关闭数据库连接,释放资源。
当您想要在数据库表中创建记录时,需要用到 INSERT 操作。
一旦建立了数据库连接,我们就可以准备使用 do 메서드 또는 prepare 와 execute 方法创建表或创建插入数据表中的记录。
不返回行的语句可通过调用 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 )");
同样地,您可以执行 SQL INSERT
#!/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 "오류가 발생했습니다" puts "오류 코드: #{e.err}" puts "오류 메시지: #{e.errstr}" dbh.rollback ensure # 서버와의 연결을 해제 dbh.disconnect if dbh end
您可以使用 DBI 的 prepare 와 execute 方法来执行 Ruby 代码中的 SQL 语句。
创建记录的步骤如下:
准备带有 INSERT 语句的 SQL 语句。这将通过使用 prepare 메서드를 사용하여 완료합니다.
SQL 쿼리를 실행하여 데이터베이스에서 모든 결과를 선택합니다. 이는 다음과 같이 사용됩니다: execute 메서드를 사용하여 완료합니다.
문장 처리 핸들러를 해제합니다. 이는 finish API 来完成。
만약 모든 것이 원활하게 진행된다면 commit 이 작업을 수행하지 않으면, 다음과 같이 rollback 거래 완료.
下面是使用这两种方法的语法:
sth = dbh.prepare(statement) sth.execute ... zero or more SQL operations ... sth.finish
这两种方法可用于传 bind 值给 SQL 语句。有时候被输入的值可能未事先给出,在这种情况下,则会用到绑定值。使用问号(?")代替实际值,实际值通过 execute() 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 "오류가 발생했습니다" puts "오류 코드: #{e.err}" puts "오류 메시지: #{e.errstr}" dbh.rollback ensure # 서버와의 연결을 해제 dbh.disconnect if dbh end
여러 개의 INSERT을 동시에 사용할 경우, do를 사용하여 반복적으로 호출하는 것보다 먼저 하나의 문장을 준비하고 반복으로 실행하는 것이 효율적입니다.
데이터베이스의 READ 작업은 데이터베이스에서 유용한 정보를 가져오는 것을 의미합니다.
데이터베이스 연결이 설정되면, 데이터베이스를 쿼리할 준비를 할 수 있습니다. 다음과 같이 사용할 수 있습니다: do 메서드 또는 prepare 와 execute 메서드로 데이터베이스 테이블에서 값을 가져옵니다.
레코드를 가져오는 단계는 다음과 같습니다:
필요한 조건에 따라 SQL 쿼리를 준비합니다. 이는 prepare 메서드를 사용하여 완료합니다.
SQL 쿼리를 실행하여 데이터베이스에서 모든 결과를 선택합니다. 이는 다음과 같이 사용됩니다: execute 메서드를 사용하여 완료합니다.
결과를 차례대로 가져오고 이를 출력합니다. 이는 다음과 같이 사용됩니다: fetch 메서드를 사용하여 완료합니다.
문장 처리 핸들러를 해제합니다. 이는 finish 메서드를 사용하여 완료합니다.
아래의 예제는 EMPLOYEE 테이블에서 모든 급여(salary)가 1000의 레코드.
#!/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 "오류가 발생했습니다" puts "오류 코드: #{e.err}" puts "오류 메시지: #{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
모든 데이터베이스의 UPDATE 작업은 데이터베이스 중 하나 또는 여러 개의 기존 레코드를 업데이트하는 것을 의미합니다. 아래의 예제는 SEX를 'M'으로 업데이트하는 모든 레코드를 업데이트합니다. 여기서는 모든 남성의 AGE를 한 살 늘리겠습니다. 이는 세 단계로 나뉘어집니다:
필요한 조건에 따라 SQL 쿼리를 준비합니다. 이는 prepare 메서드를 사용하여 완료합니다.
SQL 쿼리를 실행하여 데이터베이스에서 모든 결과를 선택합니다. 이는 다음과 같이 사용됩니다: execute 메서드를 사용하여 완료합니다.
문장 처리 핸들러를 해제합니다. 이는 finish 메서드를 사용하여 완료합니다.
만약 모든 것이 원활하게 진행된다면 commit 이 작업을 수행하지 않으면, 다음과 같이 rollback 거래 완료.
#!/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 "오류가 발생했습니다" puts "오류 코드: #{e.err}" puts "오류 메시지: #{e.errstr}" dbh.rollback ensure # 서버와의 연결을 해제 dbh.disconnect if dbh end
데이터베이스에서 기록을 제거하려면 DELETE 작업을 사용해야 합니다. 다음 예제는 AGE가 20의 모든 기록을 준비합니다. 이 작업의 단계는 다음과 같습니다:
필요한 조건에 따라 SQL 쿼리를 준비합니다. 이는 prepare 메서드를 사용하여 완료합니다.
SQL 쿼리를 실행하여 필요한 기록을 데이터베이스에서 제거합니다. 이는 execute 메서드를 사용하여 완료합니다.
문장 처리 핸들러를 해제합니다. 이는 finish 메서드를 사용하여 완료합니다.
만약 모든 것이 원활하게 진행된다면 commit 이 작업을 수행하지 않으면, 다음과 같이 rollback 거래 완료.
#!/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 "오류가 발생했습니다" puts "오류 코드: #{e.err}" puts "오류 메시지: #{e.errstr}" dbh.rollback ensure # 서버와의 연결을 해제 dbh.disconnect if dbh end
거래는 거래 일관성을 보장하는 메커니즘입니다. 거래는 다음 네 가지 속성을 가지어야 합니다:
원자성(Atomicity):거래의 원자성은 거래에 포함된 프로그램이 데이터베이스의 논리적 작업 단위로, 데이터에 대한 모든 변경 작업이 전체적으로 실행되거나 전혀 실행되지 않는다는 것을 의미합니다.
일관성(Consistency):거래의 일관성은 거래가 실행되기 전과 실행된 후 데이터베이스가 일관성 상태에 있어야 한다는 것을 의미합니다. 데이터베이스의 상태가 모든 완전성 제약 조건을 만족하면 데이터베이스는 일관성이 있다고 합니다.
분리성(Isolation):거래의 분리성은 동시에 실행되는 거래가 서로 분리되어 있음을 의미합니다. 즉, 하나의 거래 내의 작업 및 처리 중인 데이터는 다른 시도하는 수정 거래에 의해 볼 수 없도록 봉쇄되어야 합니다.
지속성(Durability):거래의 지속성은 시스템이나 매체가 고장 나면 제출된 거래의 업데이트가 손실되지 않도록 보장하는 것을 의미합니다. 즉, 거래가 제출되면 데이터베이스에서의 변경은 영구적이어야 하며, 어떤 데이터베이스 시스템의 고장에도 견딜 수 있어야 합니다. 지속성은 데이터베이스 백업 및 복구를 통해 보장됩니다.
DBI는 두 가지 거래 실행 메서드를 제공합니다. 하나는 commit 또는 rollback 메서드를 사용하여 거래를 제출하거나 취소합니다. 또 하나는 transaction 메서드를 사용하여 거래를 구현할 수 있습니다. 다음은 이 두 가지 간단한 거래 구현 방법을 소개합니다:
첫 번째 메서드는 DBI의 commit 와 rollback 명시적으로 거래를 제출하거나 취소하는 메서드를 사용합니다:
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
두 번째 메서드를 사용합니다 transaction 메서드. 이 메서드는 상대적으로 간단하며, 거래 문장을 구성하는 코드 블록을 포함해야 합니다.transaction 메서드 실행 블록이 있으며, 블록이 성공적으로 실행되었는지에 따라 자동으로 호출됩니다. commit 또는 rollback:
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
데이터베이스 연결을 끊으려면 disconnect API를 사용하십시오.
dbh.disconnect
사용자가 disconnect 메서드를 통해 데이터베이스 연결을 닫았다면, DBI는 모든 미완료된 트랜잭션을 롤백합니다. 그러나 DBI 구현의 세부 사항에 대한 의존성 없이, 애플리케이션이 명시적으로 commit이나 rollback을 호출할 수 있습니다.
다양한 오류 원인이 있습니다. 예를 들어, SQL 문장을 실행할 때 발생하는 문법 오류, 연결 실패, 또는 취소된 또는 완료된 문장 핸들에 대한 fetch 메서드 호출입니다.
DBI 메서드가 실패하면 DBI는 예외를 던집니다. DBI 메서드는 어떤 유형의 예외를 던질 수 있지만, 가장 중요한 두 가지 예외 클래스는 다음과 같습니다: DBI::InterfaceError 와 DBI::DatabaseError.
이러한 클래스의 Exception 객체는 다음과 같습니다: err입니다.errstr 와 state 세 가지 속성이 있습니다. 각각 오류 번호, 설명적인 오류 문자열, 표준 오류 코드를 대표합니다. 속성의 구체적인 설명은 다음과 같습니다:
err:발생한 오류의 정수 표현을 반환합니다. DBD가 지원하지 않으면 다음과 같이 반환합니다: nil예를 들어, Oracle DBD는 다음과 같이 반환합니다: ORA-XXXX 오류 메시지의 숫자 부분.
errstr:발생한 오류의 문자열 표현을 반환합니다.
state:발생한 오류의 SQLSTATE 코드를 반환합니다. SQLSTATE는 5자 길이의 문자열입니다. 대부분의 DBD는 이를 지원하지 않기 때문에 nil을 반환합니다.
위의 예제에서 아래의 코드를 본 것을 알 수 있습니다:
rescue DBI::DatabaseError => e puts "오류가 발생했습니다" puts "오류 코드: #{e.err}" puts "오류 메시지: #{e.errstr}" dbh.rollback ensure # 서버와의 연결을 해제 dbh.disconnect if dbh end
스크립트 실행 중 스크립트 실행 내용에 대한 디버깅 정보를 얻기 위해 트래킹을 활성화할 수 있습니다. 이를 위해 먼저 dbi를 다운로드해야 합니다./trace 모듈을 호출한 후, 컨트롤 트래킹 모드와 출력 목적지를 설정하는 trace 메서드:
require "dbi/trace" .............. trace(mode, destination)
mode의 값은 0(off) 또는1입니다.2 또는 3destination의 값은 IO 객체여야 합니다. 기본 값은 2 과 STDERR.
핸들 생성 방법이 여러 가지가 있습니다. 이러한 메서드는 코드 블록을 호출합니다. 메서드의 코드 블록을 사용하는 장점은, 코드 블록이 핸들로 매개변수를 제공하며, 블록이 종료될 때 핸들이 자동으로 제거된다는 것입니다. 다음은 이 개념을 이해하는 데 도움이 되는 몇 가지 예제입니다.
DBI.connect :메서드는 데이터베이스 핸들을 생성하며, 블록의 끝에서 호출하는 것이 좋습니다. disconnect 메서드를 통해 데이터베이스를 해제합니다.
dbh.prepare :메서드는 문장 핸들을 생성하며, 블록의 끝에서 호출하는 것이 좋습니다. finish블록 내에서는 execute 메서드를 통해 문장을 실행합니다.
dbh.execute :이 메서드는 dbh.prepare와 유사하지만, dbh.execute는 블록 내에서 execute 메서드를 호출할 필요가 없습니다. 문장 핸들은 자동으로 실행됩니다.
DBI.connect 코드 블록을 가질 수 있으며, 이는 그 안에 데이터베이스 핸들을 전달하고 블록의 끝에서 자동으로 핸들을 해제합니다.
dbh = DBI.connect("DBI:Mysql:TESTDB:localhost", "testuser", "test123),do |dbh|
dbh.prepare 코드 블록을 가질 수 있으며, 이는 그 안에 문장 핸들을 전달하고 블록의 끝에서 자동으로 finish를 호출합니다.
dbh.prepare("SHOW , DATABASES") do |sth| sth.execute puts "Databases: ", + sth.fetch_all.join(", ") end
dbh.execute 코드 블록을 가질 수 있으며, 이는 그 안에 문장 핸들을 전달하고 블록의 끝에서 자동으로 finish를 호출합니다.
dbh.execute("SHOW , DATABASES") do |sth| puts "Databases: ", + sth.fetch_all.join(", ") end
DBI transaction 메서드는 또한 코드 블록을 가질 수 있으며, 이는 이전 장에서 설명했습니다.
DBI는 데이터베이스 드라이버 프로그램이 특정 데이터베이스의 추가 기능 함수를 제공하며, 이 함수는 사용자가 어떤 Handle 객체를 통해도 호출할 수 있습니다. func 메서드를 사용하여 호출합니다。
메서드를 사용하여 호출합니다. []= 또는 [] 메서드는 특정 드라이버 프로그램의 속성을 설정하거나 가져옵니다.
DBD::Mysql은 다음 특정 드라이버 프로그램의 함수를 구현합니다:
순번 | 함수 및 설명 |
---|---|
1 | dbh.func(:createdb, db_name) 새로운 데이터베이스를 생성합니다. |
2 | dbh.func(:dropdb, db_name) 데이터베이스를 제거합니다. |
3 | dbh.func(:reload) 재로드 작업을 수행합니다. |
4 | dbh.func(:shutdown) 서버를 닫습니다. |
5 | dbh.func(:insert_id) => Fixnum 이 연결의 최근 AUTO_INCREMENT 값을 반환합니다. |
6 | dbh.func(:client_info) => String 버전에 따라 MySQL 클라이언트 정보를 반환합니다. |
7 | dbh.func(:client_version) => Fixnum 버전에 따라 클라이언트 정보를 반환합니다. 이는 :client_info와 유사하지만 문자열 대신 fixnum을 반환합니다. |
8 | dbh.func(:host_info) => String 호스트 정보를 반환합니다. |
9 | dbh.func(:proto_info) => Fixnum 통신에 사용되는 프로토콜을 반환합니다. |
10 | dbh.func(:server_info) => String 버전에 따라 MySQL 서버 정보를 반환합니다. |
11 | dbh.func(:stat) => Stringb> 데이터베이스의 현재 상태를 반환합니다. |
12 | dbh.func(:thread_id) => Fixnum 현재 스레드의 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 "오류가 발생했습니다" puts "오류 코드: #{e.err}" puts "오류 메시지: #{e.errstr}" ensure dbh.disconnect if dbh end
이것은 다음과 같은 결과를 생성합니다:
5.0.45 50045 localhost via UNIX 소켓 10 5.0.45 150621 uptime: 384981 스레드: 1 질문: 1101078 느리는 쿼리: 4 \ 열린: 324 테이블 비우기: 1 열린 테이블: 64 \ 초당 쿼리 평균: 2.860