C#結合SQLite數據庫使用方法及應用場景
一、關于SQLite
SQLite 是一個輕量級的嵌入式關系型數據庫管理系統(tǒng)(RDBMS)。與傳統(tǒng)的數據庫管理系統(tǒng)(如 MySQL、PostgreSQL 或 SQL Server)不同,SQLite 并不需要運行單獨的服務器進程,它的數據庫存儲在一個單一的文件中,因此被稱為“嵌入式數據庫”。SQLite 常常用于需要小型、快速且無需復雜配置的應用場景。
SQLite的特點:
1. 輕量級:
SQLite 是一個非常小的數據庫引擎,源代碼可以輕松集成到各種應用程序中,適合嵌入式系統(tǒng)和移動應用。其核心庫的大小通常只有幾百 KB。
2. 零配置:
與傳統(tǒng)的數據庫管理系統(tǒng)不同,SQLite 不需要配置服務器、網絡連接或管理員權限。它直接通過文件系統(tǒng)進行操作,創(chuàng)建一個單一的數據庫文件來存儲所有數據。
3. 跨平臺支持:
SQLite 是跨平臺的,可以在幾乎所有操作系統(tǒng)上運行,包括 Windows、Linux、macOS、iOS、Android 等。它使得開發(fā)者能夠在不同平臺間共享數據。
4. 文件存儲:
所有的數據存儲都在一個單一的文件中,這個文件通常很容易復制、備份和移動。
5. 支持標準SQL:
SQLite 支持 SQL-92 標準的大部分功能,包括查詢、事務、觸發(fā)器、索引等功能,使得開發(fā)者可以使用熟悉的 SQL 語法進行數據操作。
6. 事務性:
SQLite 支持事務,能夠確保數據庫的操作具有原子性、持久性、一致性和隔離性(ACID 特性)。即使在應用程序崩潰或斷電的情況下,數據也能夠保持一致性。
7. 無服務器:
SQLite 是一個無服務器數據庫,它直接嵌入到應用程序中。它不需要啟動獨立的數據庫服務器進程,因此啟動速度快,資源消耗小。
使用場景:
1. 移動應用:
因為 SQLite 輕便且不需要復雜配置,它非常適合用于移動設備(如 Android 和 iOS)的數據存儲。
2. 桌面應用:
在小型桌面應用中,SQLite 是一種理想的數據庫解決方案,尤其是那些不需要多個并發(fā)用戶的應用。
3. Web應用:
SQLite 也可以作為一些中小型網站的后端數據庫,尤其是在開發(fā)階段或低流量的網站中。
4. 物聯(lián)網(IoT)設備:
SQLite 常被用在物聯(lián)網設備中,作為嵌入式數據庫存儲數據。
總結:
SQLite 由于其高效、簡單、零配置、跨平臺的特性,在許多應用場景中都得到了廣泛的應用。它對于開發(fā)者來說是一款非常方便的工具,尤其適用于嵌入式系統(tǒng)、桌面軟件、移動應用等不需要復雜數據庫系統(tǒng)的場合。
二、常用的sql語句(CRUD)
*. 創(chuàng)建一個新的數據庫表
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT, -- 自動遞增的ID
name TEXT NOT NULL, -- 用戶名
age INTEGER NOT NULL -- 年齡
);1. 給數據庫中添加數據
插入數據
INSERT INTO "表名" (字段1,字段2,字段3...) VALUES(值1,值2,值3...);
插入多條數據
INSERT INTO "表名" (字段1,字段2,字段3...) VALUES(值1,值2,值3...),(值1,值2,值3...);
2. 刪除數據庫中的數據
刪除特定數據
DELETE FROM users WHERE id = 1;
刪除所有數據
DELETE FROM users;
3. 查找數據
查詢所有數據
SELECT * FROM users;
查詢特定列的數據
SELECT name, age FROM users;
查詢符合條件的數據
關系運算符
| 符號 | 含義 |
| > | 大于 |
| >= | 大于等于 |
| < | 小于 |
| <= | 小于等于 |
| !=或<> | 不等于 |
| ==或= | 等于 |
SELECT * FROM users WHERE age > 30;
查詢范圍運算
SELECT * FROM users WHERE age BETWEEN 1 AND 100;
// 如果表里有日期類型的數據的話 SELECT * FROM users WHERE date BETWEEN '1981-01-01' AND '1981-12-31';
模糊查詢
| 符號 | 含義 |
| _ | 匹配任意一個字符 |
| % | 匹配任意多個字符 |
SELECT * FROM users WHERE name LIKE '%er%'; SELECT * FROM users WHERE name LIKE '_e_';
查詢字段為空的內容
SELECT * FROM users WHERE age IS NULL; SELECT * FROM users WHERE age IS NOT NULL;
查詢單挑數據
SELECT * FROM users WHERE id = 1;
附加多個條件
SELECT * FROM users WHERE name = 'Peter' AND age > 20;
4. 更新數據
更新數據庫中某個字段的值為某個值
UPDATE users SET age = 26 WHERE id = 1;
5. 查詢排序
讓數據庫中一列或多列按照升序或者降序的順序排序。
| 名稱 | 含義 |
| ASC | 升序 |
| DESC | 降序 |
查詢表中所有信息按照age降序排列
SELECT * FROM users ORDER BY age DESC;
查詢表中所有信息按照age降序排列,如果age相同那么按照id升序排列
SELECT * FROM users ORDER BY age DESC,id ASC;
三、用C#代碼封裝SQLite數據庫的各個方法實現(xiàn)增刪改查
NuGet安裝 System.Data.SQLite組件

C#連接SQLite數據庫實現(xiàn)增刪改查
namespace DB
{
public class DataBase
{
private readonly string _connectionString;
// 數據庫文件位置
private static readonly string databasePath = @"數據庫文件路徑";
public DataBase()
{
_connectionString = $"Data Source={databasePath};Version=3;";
}
/// <summary>
/// 打開數據庫連接
/// </summary>
/// <returns>SQLiteConnection 對象</returns>
private SQLiteConnection OpenConnection()
{
var connection = new SQLiteConnection(_connectionString);
connection.Open();
return connection;
}
/// <summary>
/// 通用方法:執(zhí)行非查詢命令(增、刪、改)
/// </summary>
/// <param name="query">SQL 查詢語句</param>
/// <param name="parameters">查詢參數</param>
/// <returns>受影響的行數</returns>
public int ExecuteNonQuery(string query, Dictionary<string, object> parameters = null)
{
using var connection = OpenConnection();
using var command = new SQLiteCommand(query, connection);
// 添加參數
if (parameters != null)
{
foreach (var param in parameters)
{
command.Parameters.AddWithValue(param.Key, param.Value);
}
}
return command.ExecuteNonQuery();
}
/// <summary>
/// 通用方法:執(zhí)行查詢并返回結果
/// </summary>
/// <param name="query">SQL 查詢語句</param>
/// <param name="parameters">查詢參數</param>
/// <returns>查詢結果 DataTable</returns>
public DataTable ExecuteQuery(string query, Dictionary<string, object> parameters = null)
{
using var connection = OpenConnection();
using var command = new SQLiteCommand(query, connection);
// 添加參數
if (parameters != null)
{
foreach (var param in parameters)
{
command.Parameters.AddWithValue(param.Key, param.Value);
}
}
using (var adapter = new SQLiteDataAdapter(command))
{
var dataTable = new DataTable();
adapter.Fill(dataTable);
return dataTable;
}
}
/// <summary>
/// 增加方法
/// </summary>
/// <param name="tableName"></param>
/// <param name="data"></param>
public void Insert(string tableName, Dictionary<string, object> data)
{
var columns = string.Join(", ", data.Keys);
var placeholders = string.Join(", ", data.Keys.Select(key => "@" + key));
var query = $"INSERT INTO {tableName} ({columns}) VALUES ({placeholders})";
ExecuteNonQuery(query, data);
}
/// <summary>
/// 刪除方法
/// </summary>
/// <param name="tableName"></param>
/// <param name="whereClause"></param>
/// <param name="parameters"></param>
public void Delete(string tableName, string whereClause, Dictionary<string, object> parameters)
{
var query = $"DELETE FROM {tableName} WHERE {whereClause}";
ExecuteNonQuery(query, parameters);
}
/// <summary>
/// 查詢方法
/// </summary>
/// <param name="tableName"></param>
/// <param name="whereClause"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public DataTable Select(string tableName, string whereClause = null, Dictionary<string, object> parameters = null)
{
var query = $"SELECT * FROM {tableName}";
if (!string.IsNullOrEmpty(whereClause))
{
query += $" WHERE {whereClause}";
}
return ExecuteQuery(query, parameters);
}
/// <summary>
/// 更新方法
/// </summary>
/// <param name="tableName"></param>
/// <param name="data"></param>
/// <param name="whereClause"></param>
/// <param name="parameters"></param>
public void Update(string tableName, Dictionary<string, object> data, string whereClause, Dictionary<string, object> parameters)
{
// var setClause = string.Join(", ", data.Keys, key => $"{key} = @{key}");
var setClause = string.Join(", ", data.Keys.Select(key => $"{key} = @{key}"));
var query = $"UPDATE {tableName} SET {setClause} WHERE {whereClause}";
// 合并參數
if (parameters == null)
{
parameters = new Dictionary<string, object>();
}
foreach (var param in data)
{
parameters[$"@{param.Key}"] = param.Value;
}
ExecuteNonQuery(query, parameters);
}
}
}創(chuàng)建數據庫對象,并進行調用增刪查改方法
創(chuàng)建數據庫對象
private static readonly DB sqlite = new();
添加數據
給數據庫中所有非null值進行賦值。
sqlite.Insert("tabel", new Dictionary<string, object> {
{"createTime",DateTime.Now },
{ "age",18},
{ "name","Peter"},
});刪除數據
刪除表中字段為name,并且name為Peter的一條數據。
sqlite.Delete("tabel", "name = @name",
new Dictionary<string, object> { { "@name","Peter" }
});查找數據
查找表中的name字段為Peter的全部信息
sqlite.Select("tabel","name = @name", new Dictionary<string, object>
{
{"name","Peter" }
});更新數據
將數據庫中name字段為Peter的數據中的age字段改為25.
sqlite.Update(new Dictionary<string, object> { { "age", 25 } },
"name = @name",
new Dictionary<string, object>{ { "@name","Peter"}
});四、獲取數據庫中查詢得到的全部數據
查詢返回的數據類型為DataTable類型。
DataTable dataTable = sqlite.Select("tabel","name = @name", new Dictionary<string, object>
{
{"name","Peter" }
});
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine(row["createTime"]);
Console.WriteLine(row["age"]);
Console.WriteLine(row["name"]);
}查詢當前條件在數據庫中是否有匹配的內容。
DataTable dataTable = sqlite.Select("tabel","name = @name", new Dictionary<string, object>
{
{"name","Peter" }
});
if(dataTable.Rows.Count==0) Console.WriteLine("在數據庫中沒有找到指定內容");到此這篇關于C#結合SQLite數據庫使用方法的文章就介紹到這了,更多相關c# sqlite數據庫使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C#如何實現(xiàn)對sql server數據庫的增刪改查
本文的主要內容是C#實現(xiàn)對sql server數據庫的增刪改查,示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2015-08-08

