🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 处理图像 > 原文: [http://zetcode.com/db/sqliteruimg/](http://zetcode.com/db/sqliteruimg/) 在 SQLite Ruby 教程的这一章中,我们将使用图像文件。 请注意,有些人反对将图像放入数据库。 在这里,我们只展示如何做。 我们不讨论是否将图像保存在数据库中的技术问题。 ```ruby sqlite> CREATE TABLE Images(Id INTEGER PRIMARY KEY, Data BLOB); ``` 对于此示例,我们创建一个名为`Images`的新表。 对于图像,我们使用`BLOB`数据类型,代表二进制大对象。 ## 插入图像 在第一个示例中,我们将图像插入 SQLite 数据库。 ```ruby #!/usr/bin/ruby require 'sqlite3' begin fin = File.open "woman.jpg" , "rb" img = fin.read rescue SystemCallError => e puts e ensure fin.close if fin end begin db = SQLite3::Database.open 'test.db' blob = SQLite3::Blob.new img db.execute "INSERT INTO Images VALUES(1, ?)", blob rescue SQLite3::Exception => e puts "Exception occurred" puts e ensure db.close if db end ``` 我们从当前工作目录中读取图像,并将其写入 SQLite `test.db`数据库的`Images`表中。 ```ruby fin = File.open "woman.jpg" , "rb" img = fin.read ``` 我们打开并阅读 JPG 图像。 `read`方法以字符串形式返回数据。 ```ruby blob = SQLite3::Blob.new img ``` 我们创建`SQLite3::Blob`类的实例。 它用于处理二进制数据。 ```ruby db.execute "INSERT INTO Images VALUES(1, ?)", blob ``` 图像被写入数据库。 ## 读取图像 在本节中,我们将执行相反的操作。 我们将从数据库表中读取图像。 ```ruby #!/usr/bin/ruby require 'sqlite3' begin db = SQLite3::Database.open 'test.db' data = db.get_first_value "SELECT Data FROM Images LIMIT 1" f = File.new "woman2.jpg", "wb" f.write data rescue SQLite3::Exception, SystemCallError => e puts "Exception occurred" puts e ensure f.close if f db.close if db end ``` 我们从图像表中读取图像数据,并将其写入另一个文件,我们将其称为`woman2.jpg`。 ```ruby data = db.get_first_value "SELECT Data FROM Images LIMIT 1" ``` 该行从表中选择图像数据。 ```ruby f = File.new "woman2.jpg", "wb" f.write data ``` 我们打开一个新的图像文件,并将检索到的数据写入该文件。 然后我们关闭文件。 SQLite Ruby 教程的这一部分专门用于读取和写入图像。