一、關于SQLite
SQLite 是一個輕量級的嵌入式關系型數據庫管理系統(RDBMS)。與傳統的數據庫管理系統(如 MySQL、PostgreSQL 或 SQL Server)不同,SQLite 并不需要運行單獨的服務器進程,它的數據庫存儲在一個單一的文件中,因此被稱為“嵌入式數據庫”。SQLite 常常用于需要小型、快速且無需復雜配置的應用場景。
?SQLite的特點:
1. 輕量級:
? ?SQLite 是一個非常小的數據庫引擎,源代碼可以輕松集成到各種應用程序中,適合嵌入式系統和移動應用。其核心庫的大小通常只有幾百 KB。
2. 零配置:
? ?與傳統的數據庫管理系統不同,SQLite 不需要配置服務器、網絡連接或管理員權限。它直接通過文件系統進行操作,創建一個單一的數據庫文件來存儲所有數據。
3. 跨平臺支持:
? ?SQLite 是跨平臺的,可以在幾乎所有操作系統上運行,包括 Windows、Linux、macOS、iOS、Android 等。它使得開發者能夠在不同平臺間共享數據。
4. 文件存儲:
? ?所有的數據存儲都在一個單一的文件中,這個文件通常很容易復制、備份和移動。
5. 支持標準SQL:
? ?SQLite 支持 SQL-92 標準的大部分功能,包括查詢、事務、觸發器、索引等功能,使得開發者可以使用熟悉的 SQL 語法進行數據操作。
6. 事務性:
? ?SQLite 支持事務,能夠確保數據庫的操作具有原子性、持久性、一致性和隔離性(ACID 特性)。即使在應用程序崩潰或斷電的情況下,數據也能夠保持一致性。
7. 無服務器:
? ?SQLite 是一個無服務器數據庫,它直接嵌入到應用程序中。它不需要啟動獨立的數據庫服務器進程,因此啟動速度快,資源消耗小。
?使用場景:
1. 移動應用:
? ?因為 SQLite 輕便且不需要復雜配置,它非常適合用于移動設備(如 Android 和 iOS)的數據存儲。
2. 桌面應用:
? ?在小型桌面應用中,SQLite 是一種理想的數據庫解決方案,尤其是那些不需要多個并發用戶的應用。
3. Web應用:
? ?SQLite 也可以作為一些中小型網站的后端數據庫,尤其是在開發階段或低流量的網站中。
4. 物聯網(IoT)設備:
? ?SQLite 常被用在物聯網設備中,作為嵌入式數據庫存儲數據。
?總結:
SQLite 由于其高效、簡單、零配置、跨平臺的特性,在許多應用場景中都得到了廣泛的應用。它對于開發者來說是一款非常方便的工具,尤其適用于嵌入式系統、桌面軟件、移動應用等不需要復雜數據庫系統的場合。
?
二、常用的sql語句(CRUD)
*. 創建一個新的數據庫表
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 id = 1;
4. 更新數據?
### 更新數據庫中某個字段的值為某個值
UPDATE users SET age = 26 WHERE id = 1;
三、用C#代碼封裝SQLite數據庫的各個方法實現增刪改查
C#連接SQLite數據庫實現增刪改查
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>/// 通用方法:執行非查詢命令(增、刪、改)/// </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>/// 通用方法:執行查詢并返回結果/// </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);}}
}
創建數據庫對象,并進行調用增刪查改方法
創建數據庫對象
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("在數據庫中沒有找到指定內容");