一、关于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 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数据库的各个方法实现增删改查
nuget安装 system.data.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("在数据库中没有找到指定内容");
到此这篇关于c#结合sqlite数据库使用方法的文章就介绍到这了,更多相关c# sqlite数据库使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论