C#結合SQLite數據庫使用方法

一、關于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("在數據庫中沒有找到指定內容");

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77021.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77021.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77021.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入解析 MySQL 中的日期時間函數:DATE_FORMAT 與時間查詢優化

深入解析 MySQL 中的日期時間函數&#xff1a;DATE_FORMAT 與時間查詢優化 在數據庫管理和應用開發中&#xff0c;日期和時間的處理是不可或缺的一部分。MySQL 提供了多種日期和時間函數來滿足不同的需求&#xff0c;其中DATE_FORMAT函數以其強大的日期格式化能力&#xff0c;…

如何深刻理解Reactor和Proactor

前言&#xff1a; 網絡框架的設計離不開 I/O 線程模型&#xff0c;線程模型的優劣直接決定了系統的吞吐量、可擴展性、安全性等。目前主流的網絡框架&#xff0c;在網絡 IO 處理層面幾乎都采用了I/O 多路復用方案(又以epoll為主)&#xff0c;這是服務端應對高并發的性能利器。 …

筆試專題(七)

文章目錄 乒乓球筐&#xff08;哈希&#xff09;題解代碼 組隊競賽題解代碼 刪除相鄰數字的最大分數&#xff08;線性dp&#xff09;題解代碼 乒乓球筐&#xff08;哈希&#xff09; 題目鏈接 題解 1. 兩個哈希表 先統計第一個字符串中的字符個數&#xff0c;再統計第二個字…

清晰易懂的 Flutter 卸載和清理教程

以下是為 Flutter 徹底卸載與清理教程&#xff0c;覆蓋 Windows、macOS、Linux 系統&#xff0c;步驟清晰無殘留&#xff0c;確保完全刪除 Flutter SDK、依賴工具及 IDE 配置。 一、通用步驟&#xff1a;確認 Flutter 安裝方式 Flutter 通常通過以下方式安裝&#xff1a; 手動…

關于反卷積

&#x1f9e0; 什么是反卷積&#xff1f; 反卷積&#xff08;Deconvolution&#xff09;&#xff0c;通常也稱為轉置卷積&#xff08;Transpose Convolution&#xff09;&#xff0c;是一種用于擴展輸入特征圖的操作&#xff0c;通常用于生成圖像或上采樣任務中。與標準卷積操…

【機器學習】ROC 曲線與 PR 曲線

目錄 一、混淆矩陣&#xff1a;分類評估的基礎 二. ROC 曲線 (Receiver Operating Characteristic Curve) 三. PR 曲線 (Precision-Recall Curve) 3.1 核心思想 4. 何時使用 ROC 曲線和 PR 曲線&#xff1f; 實驗結果 6. 總結 在機器學習的分類任務中&#xff0c;我們訓…

Python高階函數-map

map() 是 Python 內置的一個高階函數&#xff0c;它接收一個函數和一個可迭代對象作為參數&#xff0c;將函數依次作用在可迭代對象的每個元素上&#xff0c;并返回一個迭代器&#xff08;Python 3.x 中&#xff09;。 基本語法 map(function, iterable, ...)function: 應用于…

上海餐飲市場數據分析與可視化

上海作為中國的經濟中心和國際化大都市,其餐飲市場具有高度的多樣性和競爭性。隨著消費者需求的不斷變化,餐飲行業的從業者和投資者需要深入了解市場現狀和趨勢,以便制定更有效的商業策略。本文將通過數據分析和可視化技術,深入探討上海餐飲市場的現狀和趨勢,為餐飲從業者…

MySQL基礎 [五] - 表的增刪查改

目錄 Create&#xff08;insert&#xff09; Retrieve&#xff08;select&#xff09; where條件 ?編輯 NULL的查詢 結果排序(order by) 篩選分頁結果 (limit) Update Delete 刪除表 截斷表&#xff08;truncate&#xff09; 插入查詢結果&#xff08;insertselect&…

SQL:Primary Key(主鍵)和Foreign Key(外鍵)

目錄 1. Key&#xff08;鍵&#xff09; 2. Index&#xff08;索引&#xff09; 3.Key和Index的區別 4. Primary Key&#xff08;主鍵&#xff09; 5. Foreign Key&#xff08;外鍵&#xff09; 6.主鍵和外鍵的關系 溫馨提示&#xff1a; 閃電按鈕不同的執行功能 首先&…

2025年- H1-Lc109-160. 相交列表--java版

1.題目描述 2.思路 “雙指針切換鏈表頭” 思路一&#xff1a;雙指針路徑對齊 while (pA ! pB) { pA (pA null) ? headB : pA.next; pB (pB null) ? headA : pB.next; } 讓兩個指針走相同的總路徑長度&#xff01; 設&#xff1a; 鏈表 A 獨有部分長度是 lenA 鏈表 B …

PyTorch 深度學習 || 6. Transformer | Ch6.3 Transformer 簡單案例

1. 簡單案例 這個代碼是一個簡單的 Transformer 模型的實現,這個例子展示了一個基本的序列到序列(seq2seq)任務,比如將一個數字序列轉換為另一個數字序列。可以用于學習和理解 Transformer 的基本結構和工作原理。 import torch import torch.nn as nn import math# 位置…

基礎算法篇(4)(藍橋杯常考點)—數據結構(進階)

前言 這期將會講到基礎算法篇里面的數據結構&#xff08;進階&#xff09;&#xff0c;主要包括單調棧&#xff0c;單調隊列&#xff0c;并查集&#xff0c;擴展域并查集&#xff0c;帶權并查集&#xff0c;字符串哈希&#xff0c;Trie樹。 數據結構(進階&#xff09;正文 單…

【AI學習】初步了解Gradio

Gradio 是一個開源的 Python 庫&#xff0c;專注于快速構建交互式 Web 界面&#xff0c;特別適用于機器學習模型、數據科學項目或任意 Python 函數的演示與部署。它通過極簡的代碼實現前后端一體化&#xff0c;無需前端開發經驗即可創建功能豐富的應用。以下是 Gradio 的核心特…

Overleaf 論文提交 Arxiv

Contents References 清除 Overleaf 中所有編譯 error&#xff0c;并且保證 main.tex 文件在 project 最上層參考文件 .bib 轉 .bbl. project 編譯成功后可以在 Overleaf 的 Recompile 按鈕右側找到 “Logs and output files”&#xff0c;點進去之后右下角可以點開 “Other lo…

【Android Audio】Parameter Framework - pfw

Parameter Framework - Android AudioPolicy Engine 使用 libengineconfigurable.so 來取締默認安卓音頻引擎 libenginedefault.so&#xff0c;因為默認安卓音頻引擎是通過代碼來決定策略&#xff0c;然而 libengineconfigurable 采用讀取pfw類型的文件來實現音頻策略配置。 …

服務器虛擬化技術深度解析:醫藥流通行業IT架構優化指南

一、服務器虛擬化的定義與原理 &#xff08;一&#xff09;技術定義&#xff1a;從物理到虛擬的資源重構 服務器虛擬化是通過軟件層&#xff08;Hypervisor&#xff09;將物理服務器的CPU、內存、存儲、網絡等硬件資源抽象為邏輯資源池&#xff0c;分割成多個相互隔離的虛擬機…

babel-runtime 如何縮小打包體積

&#x1f916; 作者簡介&#xff1a;水煮白菜王&#xff0c;一位前端勸退師 &#x1f47b; &#x1f440; 文章專欄&#xff1a; 前端專欄 &#xff0c;記錄一下平時在博客寫作中&#xff0c;總結出的一些開發技巧和知識歸納總結?。 感謝支持&#x1f495;&#x1f495;&#…

劍指Offer(數據結構與算法面試題精講)C++版——day7

劍指Offer&#xff08;數據結構與算法面試題精講&#xff09;C版——day7 題目一&#xff1a;最多刪除一個字符得到回文題目二&#xff1a;回文子字符串的個數題目三&#xff1a;刪除倒數第k個節點 題目一&#xff1a;最多刪除一個字符得到回文 這里我們可以在經典的字符串回文…

2025年常見滲透測試面試題(題目+回答)

網絡安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 常見面試題 一、滲透測試經歷與技術復盤 二、高頻漏洞類型與攻防體系 三、滲透工具鏈與技術特性 四、…