English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
DBI는 데이터베이스에서 레코드를 가져오는 다양한 방법을 제공합니다. 가정하면 dbh 는 데이터베이스 핸들입니다:sth 는 문장 핸들입니다:
순번 | 메서드 및 설명 |
---|---|
1 | db.select_one( stmt, *bindvars ) => aRow | nil 가진 bindvars 파라미터 태그 앞에 바인딩된 stmt 문장. 결과 집합이 비어 있으면 반환 nil。 |
2 | db.select_all( stmt, *bindvars ) => [aRow, ...] | nil db.select_all( stmt, *bindvars ){ |aRow| aBlock } 가진 bindvars 파라미터 태그 앞에 바인딩된 stmt 문장. 블록을 포함하지 않은 이 메서드를 호출하면 모든 행을 포함한 배열을 반환합니다. 블록이 주어지면 각 행에 대해 이 메서드가 호출됩니다. |
3 | sth.fetch => aRow | nil 반환다음 행데이터가 없으면 반환 nil。 |
4 | sth.fetch { |aRow| aBlock } 주어진 블록을 결과 집합의 남은 행에 대해 호출합니다. |
5 | sth.fetch_all => [aRow, ...] 배열에 저장된 결과 집합의 모든 남은 행을 반환 |
6 | sth.fetch_many( count ) => [aRow, ...] 배열 [aRow, ...]에 저장된 아래 행을 반환 count 행. |
7 | sth.fetch_scroll( direction, offset=1 ) => aRow | nil 반환 direction 매개변수와 offset 지정된 행. SQL_FETCH_ABSOLUTE와 SQL_FETCH_RELATIVE를 제외한 다른 메서드는 매개변수를 버립니다. offset。direction 가능한 매개변수 값은 아래 표를 참조하십시오. |
8 | sth.column_names => anArray 열의 이름을 반환 |
9 | column_info => [ aColumnInfo, ... ] DBI::ColumnInfo 객체의 배열을 반환합니다. 각 객체는 특정 열에 대한 정보를 저장하고, 열의 이름, 타입, 정밀도 등 추가 정보를 포함합니다. |
10 | sth.rows => rpc 실행 문장이 처리한 행 수를 반환 Count없으면 반환 nil。 |
11 | sth.fetchable? => true | false 행을 얻을 수 있다면 반환 true아니면 반환 false。 |
12 | sth.cancel 자원을 소유하는 결과 집합을 해제합니다. 이 메서드를 호출한 후에는 행을 얻을 수 없으며, 다시 호출하지 않으면 됩니다. execute。 |
13 | sth.finish 준비 문장이 사용하는 자원을 해제합니다. 이 메서드를 호출한 후에는 대상 객체에서 다른 추가 작업 메서드를 호출할 수 없습니다. |
다음 값이 사용될 수 있습니다. fetch_scroll 메서드의 direction 매개변수:
상수 | 설명 |
---|---|
DBI::SQL_FETCH_FIRST | 첫 번째 행을 가져옵니다. |
DBI::SQL_FETCH_LAST | 마지막 행을 가져옵니다. |
DBI::SQL_FETCH_NEXT | 다음 행을 가져옵니다. |
DBI::SQL_FETCH_PRIOR | 이전 행을 가져옵니다. |
DBI::SQL_FETCH_ABSOLUTE | 위치에서 이 위치까지의 행을 가져옵니다. |
DBI::SQL_FETCH_RELATIVE | 현재 행에서 이 위치까지의 행을 가져옵니다. |
아래의 예제는 문장의 메타데이터를 얻는 방법을 보여줍니다. 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) if sth.column_names.size == 0 then puts "문장이 결과 집합을 가지지 않음" printf "영향을 받은 행 수: %d\n", sth.rows else puts "문장이 결과 집합을 가짐" rows = sth.fetch_all printf "행 수: %d\n", rows.size printf "칼럼 수: %d\n", sth.column_names.size sth.column_info.each_with_index do |info, i| printf ""--- 칼럼 %d (%s) ---\n, i, info["name"] printf "sql_type: %s\n", info["sql_type"] printf "type_name: %s\n", info["type_name"] printf "precision: %s\n", info["precision"] printf "scale: %s\n", info["scale"] printf "nullable: %s\n", info["nullable"] printf "indexed: %s\n", info["indexed"] printf "primary: %s\n", info["primary"] printf "unique: %s\n", info["unique"] printf "mysql_type: %s\n", info["mysql_type"] printf "mysql_type_name: %s\n", info["mysql_type_name"] printf "mysql_length: %s\n", info["mysql_length"] printf "mysql_max_length: %s\n", info["mysql_max_length"] printf "mysql_flags: %s\n", info["mysql_flags"] end 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
这将产生以下结果:
Statement has a result set Number of rows: 5 Number of columns: 5 --- Column 0 (FIRST_NAME) --- sql_type: 12 type_name: VARCHAR precision: 20 scale: 0 nullable: true indexed: false primary: false unique: false mysql_type: 254 mysql_type_name: VARCHAR mysql_length: 20 mysql_max_length: 4 mysql_flags: 0 --- 칼럼 1 (LAST_NAME) --- sql_type: 12 type_name: VARCHAR precision: 20 scale: 0 nullable: true indexed: false primary: false unique: false mysql_type: 254 mysql_type_name: VARCHAR mysql_length: 20 mysql_max_length: 5 mysql_flags: 0 --- 칼럼 2 (AGE) --- sql_type: 4 type_name: INTEGER precision: 11 scale: 0 nullable: true indexed: false primary: false unique: false mysql_type: 3 mysql_type_name: INT mysql_length: 11 mysql_max_length: 2 mysql_flags: 32768 --- 칼럼 3 (SEX) --- sql_type: 12 type_name: VARCHAR precision: 1 scale: 0 nullable: true indexed: false primary: false unique: false mysql_type: 254 mysql_type_name: VARCHAR mysql_length: 1 mysql_max_length: 1 mysql_flags: 0 --- 칼럼 4 (INCOME) --- sql_type: 6 type_name: FLOAT precision: 12 scale: 31 nullable: true indexed: false primary: false unique: false mysql_type: 4 mysql_type_name: FLOAT mysql_length: 12 mysql_max_length: 4 mysql_flags: 32768