使用 Visual Basic 在 SQLite 中处理图像
在 SQLite Visual Basic 教程的这一章中,我们将使用图像文件。 请注意,有些人反对将图像放入数据库。 在这里,我们只展示如何做。 我们不讨论天气技术问题是否将图像保存在数据库中。
sqlite> CREATE TABLE Images(Id INTEGER PRIMARY KEY, Data BLOB);
对于此示例,我们创建一个名为Images
的新表。 对于图像,我们使用BLOB
数据类型,代表二进制大对象。
插入图像
在第一个示例中,我们将图像插入 SQLite 数据库。
Option Strict On
Imports System.IO
Imports System.Data
Imports Mono.Data.Sqlite
Module Example
Sub Main()
Dim cs As String = "URI=file:test.db"
Using con As New SqliteConnection(cs)
con.Open()
Dim data As Byte()
Try
data = File.ReadAllBytes("woman.jpg")
Catch ex As Exception
Console.WriteLine(ex.ToString())
End Try
Dim cmd As New SqliteCommand(con)
cmd.CommandText = "INSERT INTO Images(Data) VALUES (@img)"
cmd.Prepare()
cmd.Parameters.Add("@img", DbType.Binary, data.Length)
cmd.Parameters("@img").Value = data
cmd.ExecuteNonQuery()
con.Close()
End Using
End Sub
End Module
我们从当前工作目录中读取图像,并将其写入 SQLite test.db
数据库的Images
表中。
Dim data As Byte()
图像数据将存储在字节数组中。
data = File.ReadAllBytes("woman.jpg")
ReadAllBytes()
方法打开一个二进制文件,将文件的内容读取到字节数组中,然后关闭该文件。
cmd.CommandText = "INSERT INTO Images(Data) VALUES (@img)"
cmd.Prepare()
我们准备一条 SQL 语句,用于将字节数组插入Images
表的Data
列中。
cmd.Parameters.Add("@img", DbType.Binary, data.Length)
cmd.Parameters("@img").Value = data
cmd.ExecuteNonQuery()
我们将二进制数据绑定到预备语句。 然后执行该语句。 该图像被写入数据库表。
读取图像
在本节中,我们将执行相反的操作。 我们将从数据库表中读取图像。
Option Strict On
Imports System.IO
Imports System.Data
Imports Mono.Data.Sqlite
Module Example
Sub Main()
Dim cs As String = "URI=file:test.db"
Using con As New SqliteConnection(cs)
con.Open()
Dim cmd As New SqliteCommand(con)
cmd.CommandText = "SELECT Data FROM Images WHERE Id=1"
Dim data As Byte() = cmd.ExecuteScalar()
Try
If data IsNot Nothing
File.WriteAllBytes("woman2.jpg", data)
Else
Console.WriteLine("Binary data not read")
End If
Catch ex As Exception
Console.WriteLine(ex.ToString())
End Try
con.Close()
End Using
End Sub
End Module
我们从Images
表中读取图像数据,并将其写入另一个文件woman2.jpg
中。
cmd.CommandText = "SELECT Data FROM Images WHERE Id=1"
该行从表中选择图像数据。
Dim data As Byte() = cmd.ExecuteScalar()
我们从数据库表中检索二进制数据。 数据存储在字节数组中。
If data IsNot Nothing
File.WriteAllBytes("woman2.jpg", data)
Else
Console.WriteLine("Binary data not read")
End If
WriteAllBytes()
方法创建一个新文件,将指定的字节数组写入该文件,然后关闭该文件。 如果目标文件已经存在,则将其覆盖。 当数据库表为空并运行此示例时,我们得到Nothing
。 因此,我们检查Nothing
值。
SQLite Visual Basic 教程的这一部分专门用于读取和写入图像。