Ruby 提供了多种方式与数据库交互,其中 DBI(Database Interface) 是一个通用接口库,类似于 Perl 的 DBI,使 Ruby 可以使用相同的 API 访问不同的数据库,如 MySQL、PostgreSQL、SQLite、Oracle 等。
📌 目录
- 🔹 什么是 DBI?
- 🔹 安装 DBI 和数据库驱动
- 🔹 连接数据库
- 🔹 执行 SQL 查询
- 🔹 处理查询结果
- 🔹 使用占位符(Prepared Statement)
- 🔹 插入、更新和删除数据
- 🔹 事务控制(Commit & Rollback)
- 🔹 关闭数据库连接
- 🔹 DBI 连接池
- 🔹 参考资料
🔹 什么是 DBI?
DBI(Database Interface)是 Ruby 提供的数据库访问 API,可以通过不同的数据库适配器(DBD,Database Driver)连接到 MySQL、PostgreSQL、SQLite 等数据库。DBI 主要包含:
- DBI:数据库接口库,提供通用 API。
- DBD(Database Driver):具体数据库驱动(如
DBD::MySQL
,DBD::Pg
)。
支持的数据库
数据库 | 驱动名称 |
---|---|
MySQL | DBD::MySQL |
PostgreSQL | DBD::Pg |
SQLite | DBD::SQLite3 |
Oracle | DBD::Oracle |
ODBC | DBD::ODBC |
🔹 安装 DBI 和数据库驱动
1. 安装 DBI
gem install dbi
2. 安装 MySQL 驱动
gem install dbd-mysql
3. 安装 PostgreSQL 驱动
gem install dbd-pg
4. 安装 SQLite 驱动
gem install sqlite3
gem install dbd-sqlite3
🔹 连接数据库
1. 连接 MySQL
require 'dbi'
begin
dbh = DBI.connect("DBI:Mysql:database_name:localhost", "username", "password")
puts "成功连接到 MySQL 数据库"
rescue DBI::DatabaseError => e
puts "数据库错误: #{e.err}"
ensure
dbh.disconnect if dbh
end
2. 连接 SQLite
dbh = DBI.connect("DBI:SQLite3:my_database.db")
3. 连接 PostgreSQL
dbh = DBI.connect("DBI:Pg:dbname=mydb;host=localhost", "user", "password")
🔹 执行 SQL 查询
1. 运行 SQL 语句
dbh.do("CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50))")
2. 插入数据
dbh.do("INSERT INTO users (id, name) VALUES (1, 'Alice')")
🔹 处理查询结果
sth = dbh.prepare("SELECT * FROM users")
sth.execute
sth.fetch do |row|
puts "ID: #{row[0]}, Name: #{row[1]}"
end
sth.finish
🔹 使用占位符(Prepared Statement)
sth = dbh.prepare("INSERT INTO users (id, name) VALUES (?, ?)")
sth.execute(2, "Bob")
sth.finish
🔹 插入、更新和删除数据
1. 插入
dbh.do("INSERT INTO users (id, name) VALUES (3, 'Charlie')")
2. 更新
dbh.do("UPDATE users SET name = 'David' WHERE id = 3")
3. 删除
dbh.do("DELETE FROM users WHERE id = 3")
🔹 事务控制(Commit & Rollback)
dbh.transaction do
dbh.do("INSERT INTO users (id, name) VALUES (4, 'Eve')")
dbh.commit # 提交事务
rescue DBI::DatabaseError
dbh.rollback # 回滚事务
end
🔹 关闭数据库连接
dbh.disconnect if dbh
🔹 DBI 连接池
为了优化数据库连接,可以使用连接池:
require 'dbi'
DBI.connect("DBI:Mysql:database_name:localhost", "user", "password") do |dbh|
dbh.do("SELECT * FROM users") # 自动关闭连接
end
🔹 参考资料
这份教程详细介绍了 Ruby DBI 的使用,涵盖 安装、连接数据库、查询、插入、更新、删除、事务 等核心操作。你可以根据你的数据库类型选择合适的 DBD 驱动。🚀
发表回复