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("在数据库中没有找到指定内容");