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, ...] عدد السطر. |
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 م 参数 للمتدخل:
القيم | الوصف |
---|---|
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 "Statement has no result set" printf "Number of rows affected: %d\n", sth.rows else puts "Statement has a result set" rows = sth.fetch_all printf "Number of rows: %d\n", rows.size printf "Number of columns: %d\n", sth.column_names.size sth.column_info.each_with_index do |info, i| printf "--- \t\t\t\tColumn \d \t\t\t\t(%s) \t\t\t---\n", i, info["name"] printf "sql_type: \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t%s\n", info["sql_type"] printf "type_name: \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t%s\n", info["type_name"] printf "precision: \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t%s\n", info["precision"] printf "scale: \t\t\t\t\t\t\t\t\t\t\t\t\t\t%s\n", info["scale"] printf "nullable: \t\t\t\t\t\t\t\t\t\t\t\t\t%s\n", info["nullable"] printf "indexed: \t\t\t\t\t\t\t\t\t\t\t\t%s\n", info["indexed"] printf "primary: \t\t\t\t\t\t\t\t\t\t\t%s\n", info["primary"] printf "unique: \t\t\t\t\t\t\t\t\t\t%s\n", info["unique"] printf "mysql_type: \t\t\t\t\t\t\t\t%s\n", info["mysql_type"] printf "mysql_type_name: \t%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 # Disconnect from the server dbh.disconnect if dbh end
This will produce the following results:
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 --- Column 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 --- Column 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 --- Column 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 --- Column 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