【C#】.Net Framework框架下使用SQLike以及基本概念

news/2024/12/29 18:43:09/

2023年,第32周,第2篇文章。给自己一个目标,然后坚持总会有收货,不信你试试!
在C#的.NET Framework框架下,有很多轻量级数据库选择,比如:SQLike就是其中一款,一起来了解SQLike的简单使用吧。

目录

  • 一、轻量级数据库
    • 1.1、基本概念
    • 1.2、SQLite
    • 1.2、Berkeley DB
    • 1.3、LevelDB
    • 1.4、Redis
    • 1.5、H2 Database
  • 二、SQLike优点
    • 2.1、简单易用
    • 2.2、小巧轻量
    • 2.3、嵌入式支持
    • 2.4、平台无关性
  • 三、SQLike缺点
    • 3.1、功能有限
    • 3.2、性能有限
    • 3.3、缺少高级特性
  • 四、SQLike操作
    • 3.1、创建数据库文件
    • 3.2、创建表
    • 3.3、添加表记录
    • 3.4、查询表记录
    • 3.5、更新表记录
  • 五、可视化管理工具
    • 5.1、DBeaver
    • 5.2、HeidiSQL
    • 5.3、Navicat(推荐)

一、轻量级数据库

在这里插入图片描述

1.1、基本概念

轻量级数据库是指具有较小的存储需求、资源消耗较低、易于部署和使用的数据库系统。
它们通常专注于提供基本的数据存储和查询功能,适用于小型应用、嵌入式系统或具有临时性存储需求的项目。

1.2、SQLite

SQLite 是一个自包含、无服务器、零配置、事务性的关系型数据库引擎。
它的特点是文件级别的存储,可以直接使用单个文件作为数据库。
SQLite 被广泛应用于各种平台和编程语言,包括移动应用开发、桌面应用开发和嵌入式系统等。

1.2、Berkeley DB

Berkeley DB 是一个用于嵌入式系统的数据库引擎。
它提供了快速、可靠的键值对存储和查询功能,支持 ACID 事务操作。
Berkeley DB 非常灵活,可以用作持久化存储、缓存、日志文件等多种用途。

1.3、LevelDB

LevelDB 是一个键值对存储引擎,由 Google 开发。
它基于日志结构合并(Log-Structured Merge,LSM)树的数据结构,拥有快速写入和查询性能。
LevelDB 是开源的,并且支持多种编程语言的绑定。

1.4、Redis

Redis 是一个开源的内存数据结构存储系统,可以用作数据库、缓存和消息中间件等多种用途。
它支持多种数据结构(如字符串、哈希表、列表、集合、有序集合等),具有高性能、高并发和可扩展性。

1.5、H2 Database

H2 是一个用 Java 编写的嵌入式关系型数据库引擎。
它支持 SQL 数据库标准和 JDBC API,并提供了丰富的功能,包括内存数据库、持久数据库、集群数据库等。

这些轻量级数据库各有特点,可以根据项目的具体需求选择适合的数据库。
它们通常易于部署、配置和使用,适用于小型应用或具有资源限制的环境。
请注意,虽然这些数据库可以处理较小规模的数据存储需求,但在大规模和高并发场景下,可能需要使用更强大的数据库系统。
因此,在选择数据库时,需要根据项目的规模、性能要求和可扩展性等因素进行评估。

在这里插入图片描述

二、SQLike优点

SQLike 是一个轻量级的嵌入式 SQL 数据库引擎,它具有以下一些特点:

2.1、简单易用

SQLike 的语法与标准的 SQL 语法相似,使得它易于学习和使用。它提供了常见的 SQL 操作,例如 SELECT、INSERT、UPDATE 和 DELETE,以及多表连接、聚合函数等功能。

2.2、小巧轻量

SQLike 的核心代码相对较小,仅依赖少量的外部库。这使得它对系统资源的消耗较低,并且适合在资源受限的环境中使用,如嵌入式设备或移动应用中。

2.3、嵌入式支持

SQLike 可以作为嵌入式数据库引擎直接嵌入到应用程序中。这样,它可以与应用程序一起发布,无需单独的数据库服务器,并且没有独立的数据库管理系统(DBMS)的配置和维护工作。

2.4、平台无关性

SQLike 是使用 C 语言编写的,可以在多个操作系统和平台上运行,如 Windows、Linux、macOS 等。这使得它具有较好的跨平台兼容性。

三、SQLike缺点

3.1、功能有限

由于 SQLike 的主要目标是提供一个简单的 SQL 数据库引擎,它可能在一些高级功能和扩展性方面有所限制。例如,它的支持某些复杂查询和优化技术的能力可能相对较弱。

3.2、性能有限

由于 SQLike 的设计着重于轻量级和简单性,它的性能可能不如一些专门设计用于高性能的数据库引擎。对于高并发、大数据量或复杂查询等场景,SQLike 的性能可能较弱。

3.3、缺少高级特性

相比于一些成熟的数据库系统,SQLike 可能缺乏高级特性,如事务处理、存储过程、触发器等。这些特性在某些应用场景下是必需的,但在 SQLike 中可能不可用。

总的来说,SQLike 是一个方便、易于使用和部署的轻量级嵌入式数据库引擎,适用于简单的数据存储和查询需求。但在复杂、高性能和高可扩展性的数据库场景中,可能需要考虑其他更为功能强大的数据库解决方案。

四、SQLike操作

3.1、创建数据库文件

默认可以使用database命名数据库名称,当然也可以根据自己业务情况命名。
默认数据库文件创建在程序员运行同一目录下,可以指定路径输出

string connectionString = "Data Source=database.db;Version=3;";
using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{connection.Open();// 判断数据库文件string databasePath = "database.db";if (!File.Exists(databasePath)){SQLiteConnection.CreateFile(databasePath);}
}

在这里插入图片描述

3.2、创建表

这里可以加一个逻辑判断,表不存在则创建表,否则不作操作

// 判断表
bool isTable = true;
string tableName = "MyTableName";
string query = $"SELECT name FROM sqlite_master WHERE type='table' AND name='{tableName}'";
using (SQLiteCommand command = new SQLiteCommand(query, connection))
{var result = command.ExecuteScalar();if (result == null){isTable = false;}
}
// 创建表
if (!isTable)
{string createTableQuery = $"CREATE TABLE {tableName} (Id INTEGER PRIMARY KEY, countValue int,name Text)";using (SQLiteCommand command = new SQLiteCommand(createTableQuery, connection)){command.ExecuteNonQuery();}
}

3.3、添加表记录

根据上一步判断,都会确保存在表
// 并添加一条记录
if (!isTable)
{string insertDataQuery = $"INSERT INTO {tableName} (countValue,name) VALUES (99,'张三')";using (SQLiteCommand command = new SQLiteCommand(insertDataQuery, connection)){command.ExecuteNonQuery();}
}

3.4、查询表记录

// 查询表
string tableName = "MyTableName";
string queryText = $"SELECT * FROM {tableName}";
using (SQLiteCommand command = new SQLiteCommand(queryText, connection))
{using (SQLiteDataReader reader = command.ExecuteReader()){while (reader.Read()){// 获取每行的数据int id = reader.GetInt32(0);int CountValue = reader.GetInt32(1);string name = reader.GetString(2);}}
}

3.5、更新表记录

添加或者更新表记录时,同样是可以通过参数化进行操作

string databasePath = "database.db";
string connectionString = $"Data Source={databasePath};Version=3;";using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{connection.Open();// 创建 UPDATE 语句string updateQuery = "UPDATE MyTableName SET CountValue = @CountValue WHERE Id = @Id";using (SQLiteCommand command = new SQLiteCommand(updateQuery, connection)){// 设置 UPDATE 语句中的参数command.Parameters.AddWithValue("@CountValue", CountValue);command.Parameters.AddWithValue("@Id", IdValue);// 执行 SQL 语句int rowsAffected = command.ExecuteNonQuery();if (rowsAffected > 0){// 更新成功}else{// 更新失败            }}connection.Close();
}

五、可视化管理工具

SQLike 并没有官方提供的可视化工具,因为它是一个轻量级的嵌入式 SQL 数据库引擎。
SQLike 更适合作为嵌入式数据库引擎直接嵌入到 C# 应用程序中使用,而不是作为一个独立的数据库服务器运行。

然而,你可以借助其他第三方可视化工具来管理和操作 SQLike 数据库。
这些工具可以提供类似于在其他数据库系统中使用的可视化界面和功能,如查询编辑器、数据视图、表格视图、图表展示等。

以下是一些常用的 SQL 数据库管理工具,可以与 SQLike 一起使用

5.1、DBeaver

DBeaver 是一款免费、开源的通用 SQL 数据库管理工具,支持多种数据库引擎。你可以通过 DBeaver 连接和管理 SQLike 数据库,并使用其提供的可视化界面进行数据操作和查询。

5.2、HeidiSQL

HeidiSQL 是一款专为 MySQL、MariaDB、SQL Server 和 PostgreSQL 等数据库引擎设计的可视化工具。虽然它的主要定位是关系型数据库,但你也可以尝试使用 HeidiSQL 连接和管理 SQLike 数据库。

5.3、Navicat(推荐)

Navicat 是一款商业数据库管理工具,支持多种数据库引擎,包括 MySQL、SQL Server、SQLite 和 PostgreSQL 等。你可以借助 Navicat 提供的界面和功能来管理 SQLike 数据库。

这些工具都提供了可视化、用户友好的界面,可以帮助你更方便地管理数据库、执行查询和操作数据。
你可以选择适合自己的工具,并通过连接 SQLike 数据库来使用。
需要注意的是,这些工具通常是为关系型数据库设计的,可能不会提供特定于 SQLike 的功能或优化。
因此,在使用这些工具时,可能会有一些功能限制或兼容性问题。


http://www.ppmy.cn/news/1009116.html

相关文章

C++——new delete

本文主要介绍C中的new和delete&#xff0c;用于内存的申请和释放 1. 变量 示例 void variableFunc() //变量的使用 {int* ptr new int;*ptr 100;std::cout<<"ptr value is: "<<*ptr<<std::endl;delete ptr; //释放 }ptr 是一个指向 int 类…

一次redis缓存不均衡优化经验

背景 高并发接口&#xff0c;引入redis作为缓存之后&#xff0c;运行一段时间发现redis各个节点在高峰时段的访问量严重不均衡&#xff0c;有的节点访问量7000次/s&#xff0c;有的节点访问量500次/s 此种现象虽然暂时不影响系统使用&#xff0c;但是始终是个安全隐患&#x…

Leetcode周赛 | 2023-8-5

2023-8-5 题1体会我的代码 题2体会我的代码 题1 体会 一开始是觉得这道题是贪心的&#xff0c;选出现次数最多的元素&#xff0c;但是发现&#xff0c;当有多个元素出现次数均为最多时&#xff0c;似乎很难处理&#xff0c;就放弃了。转而问ChatGPT &#xff0c;结果让自己走上…

掌握Python的X篇_21_局部变量与全局变量

文章目录 1. python中的局部变量2. python中的全局变量3. 显式声明全局变量 1. python中的局部变量 函数内部定义的变量&#xff0c;是局部变量。局部变量只在当前函数中有效。 各个函数之间的局部变量是互相独立&#xff0c;互不影响的。 首先看一段代码&#xff1a; def f…

【QT调用ST-link-使用QT编写程序-调用ST-LINK_CLI.exe-烧写STM32F4xxx-基础样例】

【QT结合ST-link&#xff0c;使用QT编写程序&#xff0c;调用ST-LINK_CLI.exe,烧写STM32F4xxx-基础样例】 1、前言2、实验环境3、先前了解-自我总结4、实验过程&#xff08;0&#xff09;硬件连接与供电&#xff08;1&#xff09;安装&使用STM32 ST-LINK Utility&#xff0…

【HTML】label 标签

在HTML中&#xff0c;<label> 标签用于为表单元素创建标签文本或标题。它可以与输入字段&#xff08;如文本框、单选按钮、复选框等&#xff09;和其他表单元素关联起来&#xff0c;以提高可用性和可访问性。 <label> 元素有两种常见的用法&#xff1a; 包裹方式…

笙默考试管理系统-MyExamTest--classranking(1)

笙默考试管理系统-MyExamTest 目录 笙默考试管理系统-MyExamTest 一、 笙默考试管理系统-MyExamTest--classranking 二、 笙默考试管理系统-MyExamTest--classranking 三、 笙默考试管理系统-MyExamTest--classranking 四、 笙默考试管理系统-MyExamTest--classrankin…

ConcurrentHashmap1.7和1.8的差别

技术主题 jdk1.7版本的ConcurrentHashmap基于分段锁实现的,jdk1.8版本中的进行是那个鸡 技术原理 分段锁介绍 分段锁(Segment-Based Locking)是一种并发编程中用于提高性能的策略,特别适用于需要高并发访问的数据结构,如哈希表。它的基本思想是将一个大的数据结构分成…