SQLite是一個極其輕量化的數據庫系統,它使用起來非常簡單,無需安裝和配置服務器,程序直接從磁盤的數據庫文件上讀取數據即可。特別適合手機應用或小型的桌面軟件使用。下面來詳細介紹如何使用SQLite。在環境變量的系統變量中的path里添加一個路徑:D:\SQLite,即sqlite3.exe文件所在的路徑。添加環境變量后,在命令行里輸入:sqlite3,出現如下圖所示的提示,說有配置成功。雖然不需要借助其它工具也可以在命令行里直接使用sqlite,但是這種操作方式不怎么友好,特別是對于初學者。目前有許多輔助工具使得操作sqlite更為方便,例如SQLiteSpy、sqlcipher等等。如果需要這些工具,可以自行百度搜索獲取。使用SQLiteSpy可以很方便地創建一個數據庫,如下圖所示,點擊Fileànew Database就會彈出選擇數據庫保存的文件夾和名稱的對話框,選擇路徑,并輸入數據庫名稱,例如mydatabase.db,確定后就已經在指定位置創建好一個數據庫。如果要創建一個數據表,則在右側的文本框里輸入SQL語句,然后選擇菜單Execute-->Execute SQL即可。如下圖所示:在visual studio中的nuget程序包管理中搜索并安裝Microsoft.Data.Sqlite.Core。使用下面的代碼訪問上面數據庫中的example數據表 string query = "SELECT * FROM example";
string connectionString = $"Data Source=D:\\SQLite\\testDatabase.db";
var connection = new SqliteConnection(connectionString);
connection.Open();
using (var command = new SqliteCommand(query, connection))
{
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
string name = reader.GetString(1); // 或者使用reader["data"]
Console.WriteLine($"Name: {name}");
}
}
}
connection.Close();
}
通過上面的操作,我們已經實現了數據庫的創建和讀寫,但是還有一個最重要的問題——安全。用上面的操作方法創建出來的數據庫不需要密碼就可以查看所有數據,這對于重要的數據顯然是不安全的,那應該如何給sqlite數據庫加密呢?首先要在Visual studio中的nuget中安裝sqlcipher。安裝好sqlcipher后,找到項目目錄下的packages\SQLitePCLRaw.lib.e_sqlcipher.2.1.10\runtimes文件夾,在runtimes文件夾里,有多個子文件夾,需要根據自己電腦的操作系統選擇相應文件夾里的e_sqlcipher.dll文件,復制該文件到程序運行的文件夾中去(例如,調試時對應的運行文件夾是bin\debug)。接下來,用C#代碼創建一個帶密碼的空白數據庫文件,然后把已有的未加密的數據庫的數據全部搬遷到這個帶密碼的空白數據庫文件中。以下面這個方法實現: public void CreateEncryptedDatabase(string plaintextDbPath, string encryptedDbPath, string encryptionKey)
{
//創建一個新的加密數據庫文件
using (var connection = new SqliteConnection(new SqliteConnectionStringBuilder()
{
DataSource = encryptedDbPath,
Password = encryptionKey
}.ToString()))
{
connection.Open();
//此處可添加數據庫的其余操作
connection.Close();
}
// 連接到原來沒有密碼的數據庫,并導出數據到加密的數據庫中去
using (var connection = new SqliteConnection(new SqliteConnectionStringBuilder()
{
DataSource = plaintextDbPath
}.ToString()))
{
connection.Open();
using (var command = new SqliteCommand($"ATTACH DATABASE '{encryptedDbPath}' AS encrypted KEY '{encryptionKey}';" +
$"SELECT sqlcipher_export('encrypted');" +
$"DETACH DATABASE encrypted;", connection))
{
command.ExecuteNonQuery();
}
connection.Close();
}
}
通過上面這個方法,就創建出了一個帶密碼的sqlite數據庫文件。訪問這個數據庫時,可用下面這段示例代碼: public void read(string encryptedDbPath, string encryptionKey)
{
string query = "SELECT * FROM example"; // 替換your_table_name為你的表名
using (var connection = new SqliteConnection(new SqliteConnectionStringBuilder()
{
DataSource = encryptedDbPath,
Password = encryptionKey
}.ToString()))
{
connection.Open();
using (var command = new SqliteCommand(query, connection))
{
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
string name = reader.GetString(1); // 或者使用reader["data"]
Console.WriteLine($"Name: {name}");
}
}
}
connection.Close();
}
}
至此,使用SQLite創建、訪問和加密數據庫的工作就全部完成了。
該文章在 2025/1/26 9:40:53 編輯過