本章将向您展示如何连接到数据库以及如何对数据库做一些简单的事情。
开始之前
SQLite 附带sqlite3
命令行实用程序。 它可用于对数据库发出 SQL 命令。 现在,我们将使用sqlite3
命令行工具创建一个新数据库。
我们为sqlite3
工具提供了一个参数。 test.db
是数据库名称。 它是我们磁盘上的单个文件。 如果存在,则将其打开。 如果不是,则创建它。
.tables
命令提供了 test.db 数据库中的表列表。 当前没有表。 .exit
命令终止sqlite3
命令行工具的交互式会话。 ls
Unix 命令显示当前工作目录的内容。 我们可以看到test.db
文件。 所有数据将存储在该单个文件中。
sqlite-ruby
接口用于使用 Ruby 语言与 SQLite 数据库进行交互。
上面的命令将模块安装在基于 Debian 的 Linux 系统上。
第一步是创建一个Database
对象。 Database
类封装了到 SQLite 数据库的单个连接。 使用close
方法关闭数据库对象。
new
方法创建一个新的数据库对象,该对象将打开给定的dbname
文件。 如果该文件不存在,则将尽可能创建它。 默认情况下,新数据库将结果行作为数组返回。 open
方法打开给定文件中包含的数据库。
如果我们为文件名提供特殊字符串:memory:
,则可以创建一个内存数据库。
版本
在第一个代码示例中,我们将获得 SQLite 数据库的版本。
在上面的 Ruby 脚本中,我们创建了一个新的内存数据库。 我们执行一条 SQL 语句,该语句返回 SQLite 数据库的版本。
我们使用sqlite3
Ruby 模块连接到 SQLite 数据库。
我们创建一个新的数据库对象。 Database 类封装了到 SQLite 数据库的单个连接。 数据库在内存中创建。 因此它不是永久的。
我们将db
对象的get_first_value
方法调用。 它执行 SQL 语句并获得结果集第一行的第一个值。
我们检查错误。 这很重要,因为使用数据库容易出错。
最后,我们释放资源。
输出可能类似于上面。
插入数据
我们将创建一个Cars
表并在其中插入几行。
上面的脚本创建一个Cars
表,并将 8 行插入到该表中。
我们连接到test.db
数据库。
execute
方法执行给定的 SQL 语句。 如果尚不存在新的 Cars 表,则会创建该表。
这两行将两辆车插入桌子。 请注意,默认情况下,我们处于 自动提交模式,其中对表的所有更改均立即生效。
我们使用sqlite3
工具验证写入的数据。 首先,我们修改数据在控制台中的显示方式。 我们使用列模式并打开标题。
这是我们已写入Cars
表的数据。
最后插入的行 ID
有时我们需要确定最后插入的行的 ID。 我们使用last_insert_row_id
方法找到它。
我们在内存中创建一个Friends
表。 Id
自动递增。
在 SQLite 中,INTEGER PRIMARY KEY
列自动增加。 还有一个AUTOINCREMENT
关键字。 在INTEGER PRIMARY KEY AUTOINCREMENT
中使用时,会使用稍微不同的算法来创建Id
。
这五个 SQL 语句将五行插入到Friends
表中。
使用last_insert_row_id
方法,我们获得最后插入的行Id
。
我们看到了脚本的输出。
取得数据
在本章的最后一个示例中,我们获取一些数据。 有关数据获取的更多信息将在“查询”一章中进行讨论。
在示例中,我们从Cars
表中获取 5 行。
我们准备要使用prepare
方法执行的 SQL 语句。 该方法返回一个语句对象。 然后,使用execute
方法执行 SQL 语句。 它返回一个结果集。 ResutlSet
对象是查询返回的数据上的简单光标。
使用each
方法,我们遍历结果集中的数据。 在每个循环中,它返回一行。 该行是一个字段数组。 这些字段用空白连接起来形成一条线。
这是fetch.rb
脚本的输出。