Ruby 数据库访问 - DBI 教程
Ruby 的数据库访问方式非常丰富,其中最常用的一种是 DBI(Database Independent Interface)。
DBI 是一个标准的 Ruby 库,是一个数据库独立的接口,可以通过一个 API(应用程序接口)访问不同的数据库。使用 DBI 可以很方便地连接到 MySQL、PostgreSQL、Oracle、SQLite、SQL Server 等数据库,不需要对底层数据库进行特定的处理。
下面是一个简单的 DBI 连接 MySQL 数据库的示例:
require 'dbi'
# 设置数据源名称
dsn = "DBI:mysql:database=test;host=localhost;port=3306"
# 连接数据库
dbh = DBI.connect(dsn, "root", "password")
# 查询数据库
sth = dbh.prepare("SELECT * FROM users")
sth.execute
# 遍历结果集
sth.fetch do |row|
puts row.inspect
end
# 关闭连接
sth.finish
dbh.disconnect
首先需要使用 require 'dbi'
引入 DBI 库。然后定义 dsn
变量,该变量是连接 MySQL 数据库的数据源名称,其中包括数据库名称、主机地址、端口等信息。
然后使用 DBI.connect(dsn, "root", "password")
连接到数据库,其中第一个参数是数据源名称,后面两个参数是连接到数据库所需要的用户名和密码。
接着,使用 dbh.prepare
准备查询语句,然后使用 execute
执行。然后遍历结果集并打印每行数据,最后使用 finish
关闭查询结果集,使用 disconnect
关闭数据库连接。
在 DBI 中还有一些常用的方法,例如 dbh.do
可以执行无返回结果的 SQL 语句,dbh.tables
可以列出数据库中的所有表名,dbh.columns(table)
可以列出指定表的所有字段名。
此外,还可以使用 DBI 中的预处理语句,例如 dbh.prepare("INSERT INTO users(name, email) VALUES(?, ?)")
,使用 ?
占位符来在执行时填充实际的值,可以防止 SQL 注入攻击。
DBI 还支持事务处理,例如:
dbh['AutoCommit'] = false # 关闭自动提交
dbh.transaction do |dbh|
# 向数据库插入数据等操作
end
当然,以上只是 DBI 基本操作的示例,DBI 还有很多高级特性和数据库驱动程序,可以满足各种复杂的数据访问需求。