SQLite
什么是
一个轻量级的嵌入式关系型数据库管理系统.
基本特性
- 嵌入式数据库 : 不需要单独的服务器进程数据库直接存储在单个磁盘文件中
- 零配置 :无需安装或管理直接使用
- 跨平台:支持所有主流操作系统
- 单文件数据库:整个数据库存储在一个单独的文件中,便于携带和备份
技术特点
- 支持标准的SQL语法
- 事务处理
- 支持最大140TB的数据库
- 自包含
- 公共领域开源
应用场景
- 移动应用
- 桌面应用程序
- 嵌入式设备物联网
- 小型网站
- 应用程序本地缓存
在C#中使用SQLite
安装SQLite
通过NuGet安装SQLite
ash
Install-Package SYstem.Data.SQLite
基本数据操作
创建数据库和连接
using System.Data.SQLite //引用库
//创建或连接到数据库(如不存在会自动创建)
string connectionString = "Data Source = mydatabase.db;Version = 3;";
SQLiteConnection Connection = new SQLiteConnection(connectString);
try
{
connection.Open();//连接数据库
//数据库操作...
}
finally
{
connection.Close();//断开数据库
}
创建表
/* @: 表示是一个逐字字符串,可以跨多行且不需要转义 "\n"
create TABLE if not exists : sql语句 如果不存在则创建表
Users 是名
表的结构定义:
id 字段名; integer : 整数类型; primary key : 设为主键;autoincrement : 自动递增;
name 字段名; text : 文本类型 ; not null : 不能为空.
email 字段名 ; unique : 列值唯一.
age 字段名 ; integer 整数类型;没有约束,可空可重复.
*/
string createTableSql = @"
CREATE TABLE IF NOT EXISTS Users(
Id INTEGER PRIMARY KEY AUTOINCREMENT,
Name TEXT NOT NULL,
Email TEXT UNIQUE NOT NULL,
Age INTEGER
)";
//using作用:确保命令对象会被正确释放
using (SQLiteCommand command = new SQLitecommand(creatTableSql,connection)) //创建command对象,传入sql语句和数据库连接
{ //执行不返回结果的sql命令(create,Install,update等)
command.ExecuteNonQuery();
}
CRUD操作
插入数据
// 创建sql语句: insert 插入; into users :指向 users表; (...)指定的列名;values(...)使用参数化查询值;
string insertsql = "INSERT INTO Users(Name,Email,Age) VALUES (@name,@emil,@age)";
//创建command对象,关联sql语句和数据库连接
using (SQLiteCommand command = new SQLiteCommand(insertSql, connection))
{
//添加参数值,参数化查询,可以放置SQL注入
command.Parameters.AddWithValue("@name","张三");
command.Parameters.AddWithValue("@email","WJ@WJcode.cn");
command.Parameters.AddWithValue("@age","18");
//执行命令并获取结果
int rowsAffected = command.ExecuteNonQuery(); //执行不返回结果集的sql命令
//输出到控制台
Console.WriteLine($"插入了 {rowsAffected} 行数据")
}
查询数据
//创建sql语句 : select 查询; * from Users 指定 *(表示所有)数据库的表 where age 如果 age字段名 > 传入的值
string querySql = "SELECT * FROM Users WHERE Age > @minAge";
//创建对象,关联SQL语句和数据库连接
using (SQLiteCommand command = new SQLiteCommand (querySql, connection))
{
//设置查询参数
command.Parameters.AddWithValue("@minAge",17);
//执行查询结果并返回结果集到 DateReader对象
using (SQLiteDataReader reader = command.EXecuteReader())
{ //遍历结果ji
while (reader.Read())
{
Console.WriteLine($"ID:{reader["id"]},姓名:{reader["Name"]},邮箱:{reader["Email"]},年龄:{reader["Age"]}")
}
}
}
更改数据
//创建sql语句 : UPDATE Users更新表 set age 设置age字段 ; @newage where name 新age值放到 name字段等于 外部指定字列
string updateSql = "UPDATE Users SET Age = @newAge WHERE Name = @name";
//创建对象,关联sql语句和数据库连接
using (SQLiteCommand command = new SQLiteCommand(updateSql,connection))
{
//设置更新参数
command.Parameters.AddWithValue("@newAge",21);
//设置条件参数
command.Parameters.AddWithValue("@name","zhangsan");
//执行不返回结果集的方法
int rowsAffected = command.ExecuteNoeQuery();
Console.WriteLine($"更新了 {rowsAffected} 行数据");
}
删除数据
//创建sql语句: delete 删除 from users 来自users表; where id = .. 指定id =.. 外部输入的条件
string deleteSql = "DELETE FROM Users WHERE Id = @id";
//创建对象,关联sql语句和数据库连接
using (SQLiteCommand command = new SQLiteCommand(deleteSql, connection))
{
//设置删除条件参数
command.Parameters.AddWithValue("@id", 1);
//执行不返回结果集的方法
int rowsAffected = command.ExecuteNonQuery();
Console.WriteLine($"删除了 {rowsAffected} 行数据");
}
注意事项
- 创建数据库指定好路径
- 不区分大小写
- 字段名避免和关键字一样,可以添加前后缀
- 在sql中一般用 下划线 来命名
使用更高效操作
Dapper
Dapper 是一款轻量级的 ORM(对象关系映射)工具,适用于小型项目。相比于 Entity Framework 和 NHibernate 这些重量级的 ORM 工具,Dapper 更为简洁高效
Install-Package Dapper
Entity Framework Core
Entity Framework Core(简称EF Core) 是.NET Core中的ORM(object relational mapping,对象关系映射) 框架。它可以让开发者面向对象的方式进行数据库操作。
https://learn.microsoft.com/zh-cn/ef/core/
sqlite-net
是一个开源的轻量级 .NET SQLite 数据访问库,适用于 .NET、.NET Core 和 Mono 应用。该库提供简单的 CRUD 操作和查询方法,支持同步和异步 API,通过反射机制实现 ORM 功能。sqlite-net 兼容多种 .NET 平台,如 Xamarin、UWP 和 Azure,为开发者提供高效的数据库访问解决方案。
https://github.com/praeclarum/sqlite-net/wiki
补充说明
更多操作请点击→ SQLite中文手册