Ruby DBI Read 操作

DBI 提供了一些从数据库获取记录的不同方法。假设 dbh 是一个数据库句柄,sth 是一个语句句柄:

序号方法 & 描述

1db.select_one( stmt, *bindvars ) => aRow | nil

执行带有 bindvars 绑定在参数标记前的 stmt 语句。返回第一行,如果结果集为空则返回 nil。

2db.select_all( stmt, *bindvars ) => [aRow, ...] | nil

db.select_all( stmt, *bindvars ){ |aRow| aBlock }

执行带有 bindvars 绑定在参数标记前的 stmt 语句。调用不带有块的该方法,返回一个包含所有行的数组。如果给出了一个块,则会为每行调用该方法。

3sth.fetch => aRow | nil

返回下一行。如果在结果中没有下一行,则返回 nil。

4sth.fetch { |aRow| aBlock }

为结果集中剩余的行调用给定的块。

5sth.fetch_all => [aRow, ...]

返回保存在数组中的结果集的所有剩余的行。

6sth.fetch_many( count ) => [aRow, ...]

返回保存在 [aRow, ...] 数组中的往下第 count 行。

7sth.fetch_scroll( direction, offset=1 ) => aRow | nil

返回 direction 参数和 offset 指定的行。除了 SQL_FETCH_ABSOLUTE 和 SQL_FETCH_RELATIVE,其他方法都会丢弃参数 offset。direction 参数可能的值,请查看下面的表格。

8sth.column_names => anArray

返回列的名称。

9column_info => [ aColumnInfo, ... ]

返回 DBI::ColumnInfo 对象的数组。每个对象存储有关某个列的信息,并包含该列的名称、类型、精度等其他更多的信息。

10sth.rows => rpc

返回执行语句处理的行数 Count,如果不存在则返回 nil。

11sth.fetchable? => true | false

如果可能获取行,则返回 true,否则返回 false。

12sth.cancel

释放结果集所占有的资源。在调用该方法后,您就不能在获取行了,除非再次调用 execute。

13sth.finish

释放准备语句所占有的资源。在调用该方法后,您就不能在该对象上调用其他进一步操作的方法了。

direction 参数

下面的值可用于 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 "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 "--- Column %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

--- 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

ruby dbi mysql_Ruby DBI Read 操作 | 菜鸟教程相关推荐

  1. Ruby 数据库访问 - DBI

    Ruby DBI 模块为 Ruby 脚本提供了类似于 Perl DBI 模块的独立于数据库的接口. DBI 即 Database independent interface,代表了 Ruby 独立于数 ...

  2. 菜鸟教程python3 mysql_python基础教程使用Python操作MySQL的小技巧

    1.获取插入数据的主键id import pymysql database = pymysql.connect( host="127.0.0.1", port=3306, user ...

  3. Django学习笔记 ORM操作 From菜鸟教程

    # -*- coding: utf-8 -*- #获取数据的多种操作from django.http import HttpResponsefrom TestModel.models import T ...

  4. (面试必备)软件测试人员必备Linux命令操作(根据菜鸟教程整理更易查阅)

    菜鸟教程地址:http://www.runoob.com/linux/linux-command-manual.html 本文根据菜鸟教程整理比较常见的命令,更方便平时的查阅. 命令:cat cat ...

  5. 菜鸟教程 之 JavaScript 教程

    From:菜鸟教程 JavaScript:https://www.runoob.com/ W3School JavaScript 教程:http://www.w3school.com.cn/js/in ...

  6. ruby mysql 占位符_ruby操作常用数据库

    使用Ruby DBI模块 目录 Ruby DBI模块为ruby程序访问数据库提供了一个与数据库无关的接口,就像perl的DBI模块一样.这篇文章将讲述如何编写基于DBI的ruby程序.这篇文章是对DB ...

  7. python scrapy菜鸟教程_scrapy学习笔记(一)快速入门

    安装Scrapy Scrapy是一个高级的Python爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫数据保存到csv.json等文件中. 首先我们安装Scrapy. pip install sc ...

  8. 菜鸟教程python3-Python数据分析,学习路径拆解及资源推荐

    原标题:Python数据分析,学习路径拆解及资源推荐 关于Python数据分析,其实网上能够找到的学习资源很多,主要分为两类: 一类是提供各种资源的推荐,比如书单.教程.以及学习的先后顺序: 另一类是 ...

  9. python菜鸟教程字典-Python3 字典

    Python3 字典 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格 ...

最新文章

  1. MinGW 和 MSVC 下,使用 FILE 类型的一个奇怪的问题
  2. TP框架中同时使用“or”和“and”
  3. java小程序死机_求解,刚写的小程序,一运行我机器就死机
  4. 【.NET】Repeater控件简单的数据绑定(有bool,日期,序号)
  5. android mvp简书,Android_MVP学习
  6. 16位的数字高字节和低字节_显示掩盖较低和较高的16位数字半字节| 8086微处理器...
  7. 移除inline-block间隙
  8. 关于GIT的万年坑你还在踩吗?答应我别傻了
  9. Sql Server 2005“该用户与可信的SQL SERVER 连接无关联”解决方法
  10. 【树叶识别】基于matlab BP神经网络树叶类别【含Matlab源码 799期】
  11. junos的配置文件备份和恢复
  12. [转载]使用 Abbot 框架自动化测试 Eclipse 插件的用户界面,第 1 部分
  13. matlab 单相整流电路,基于MATLAB的单相桥式整流电路研究
  14. APP测试工具-Doraemonkit使用
  15. 关于ABA问题(隔壁老王问题)
  16. @Secured注解验证无法通过的问题
  17. ShortCuts的使用
  18. Jetson NX设置nvme固态硬盘为系统盘
  19. 吴恩达机器学习课程笔记(英文授课) Lv.1 新手村(回归)
  20. 国外问卷调查为什么这么热门?

热门文章

  1. 神调侃!程序员必学推荐系统,我比女朋友更了解你!
  2. @程序员,快来 Get 常用的 Linux 命令和技巧!
  3. 如何从技术上“绞杀”盗链者?
  4. “独裁者”Google:开发者别无他选!| 极客头条
  5. 杨超越吧编程大赛;拼多多刷单?苹果新员工一半没本科学历 | 极客头条
  6. 智能时代“云”主沉浮
  7. 万万没想到,区块链将提升无人驾驶安全性!
  8. 动荡的 Java 今年将有哪些新变化?
  9. 独断专行站在互联网创业风口下的 00 后 CEO,没有钱该如何继续?
  10. ======第四章存储器管理======