SQLite 与 Access的应用比较
SQLite
优点:
(1)支持Limit语句,支持数据自动分页
(2)支持Insert返回自动递增主键的ID
(3)查询性能和效率高
(4)支持压缩命令
(6)开放源代码,可以内嵌到dll中。并且允许随意修改其源代码,并且允许不公开修改后的源代码
(7)跨平台,数据库具有很强的兼容性
(8)支持动态建立数据库功能
缺点:
(1)没有一个很好的查询分析器,网上的所有的查询分析器大多都用过,感觉都没有Access那么直观。
中间:(1)事务处理,对Asp.Net用处不大,不可能在同一个连接插入大批量的数据。
(注意:事务其实就是一个批处理命令,将SqlCommand批量执行,只能处理一个连接的批处理)
=============================================
Access
优点:
(1)具有一个直观的查询分析器(虽然不能算一个真正的查询分析器),维护相对方便
(2)性能一般,但比较成熟和稳定
缺点:
(1)不支持Limit命令,不能直接将数据分页输出。通用的3条select命令组合会大大降低性能
(2)不支持Insert返回递增的ID,此问题到目前还没有一个完善的解决方案
(3)并发性能差,最大并发数50。并且只要有一个Connection,其他连接不能修改数据
(4)不支持压缩数据库命令
(5)不支持动态建立数据库
(6)不支持跨平台
以上所述,所以,在ORM 1.2版之后,暂时不支持Access扩展,全面支持SQLite。
但ORM保留了所有数据库接口,也就是要在Access扩展开发以后才会支持Access.
==================
SQLite 作为一个轻量级嵌入式数据库,还是非常好用的。雨痕极力推荐~~~~~~
今天有个朋友测试 SQLite,然后得出的结论是:SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟!
下面是他发给我的测试代码。我晕~~~~~~
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
// 创建数据库文件
File.Delete("test1.db3");
SQLiteConnection.CreateFile("test1.db3");
DbProviderFactory factory = SQLiteFactory.Instance;
using (DbConnection conn = factory.CreateConnection())
{
// 连接数据库
conn.ConnectionString = "Data Source=test1.db3";
conn.Open();
// 创建数据表
string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
DbCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
// 添加参数
cmd.Parameters.Add(cmd.CreateParameter());
// 开始计时
Stopwatch watch = new Stopwatch();
watch.Start();
// 连续插入1000条记录
for (int i = 0; i < 1000; i++)
{
cmd.CommandText = "insert into [test1] ([s]) values (?)";
cmd.Parameters[0].Value = i.ToString();
cmd.ExecuteNonQuery();
}
// 停止计时
watch.Stop();
Console.WriteLine(watch.Elapsed);
}
哎~~~~ 一个常识性的错误,我加几行代码 (新增代码标记 "// <-------------------")。
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
// 创建数据库文件
File.Delete("test1.db3");
SQLiteConnection.CreateFile("test1.db3");
DbProviderFactory factory = SQLiteFactory.Instance;
using (DbConnection conn = factory.CreateConnection())
{
// 连接数据库
conn.ConnectionString = "Data Source=test1.db3";
conn.Open();
// 创建数据表
string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
DbCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
// 添加参数
cmd.Parameters.Add(cmd.CreateParameter());
// 开始计时
Stopwatch watch = new Stopwatch();
watch.Start();
DbTransaction trans = conn.BeginTransaction(); // <-------------------
try
{
// 连续插入1000条记录
for (int i = 0; i < 1000; i++)
{
cmd.CommandText = "insert into [test1] ([s]) values (?)";
cmd.Parameters[0].Value = i.ToString();
cmd.ExecuteNonQuery();
}
trans.Commit(); // <-------------------
}
catch
{
trans.Rollback(); // <-------------------
throw; // <-------------------
}
// 停止计时
watch.Stop();
Console.WriteLine(watch.Elapsed);
}
执行一下,耗时 0.2 秒。这差距是不是太大了点?
为什么只是简单启用了一个事务会有这么大的差距呢?很简单,SQLite 缺省为每个操作启动一个事务,那么原代码 1000 次插入起码开启了 1000 个事务,"事务开启 + SQL 执行 + 事务关闭" 自然耗费了大量的时间,这也是后面显示启动事务后为什么如此快的原因。其实这是数据库操作的基本常识,大家要紧记,不好的代码效率差的不是一点半点。
分享到:
相关推荐
本文将深入探讨 SQLite 与 Access 在性能方面的差异,包括数据库创建、表建立以及大数据量插入时的速度和效率。 首先,SQLite 是一个开源的、无服务器、自包含的 SQL 数据库引擎,适用于嵌入式应用或移动设备。它不...
Access数据库和SQLite都是关系数据库管理系统,但它们有着不同的设计目标和应用场景。Access数据库是由微软发布的关系数据库管理系统,结合了Microsoft Jet Database Engine和图形用户界面两项特点,是Microsoft ...
1. **连接Access数据库**:使用易语言提供的数据库接口,如ODBC或JDBC,建立与Access数据库的连接,读取数据表结构和数据。 2. **解析Access数据表结构**:获取表名、字段名、字段类型等元数据,这一步骤对于正确地...
5. 用户界面和应用程序接口:如果Access数据库有与之配套的应用程序,可能需要更新或重写这部分代码以适应SQLite API。 6. 数据库连接:在Access中,我们通常使用DAO或ADO对象来连接和操作数据库,而在SQLite,我们...
在实际应用中,为了提高代码可读性和可维护性,通常会将SQL操作封装成DAO(Data Access Object)类。DAO类负责与数据库的所有交互,使业务逻辑与数据访问分离,遵循单一职责原则。 此外,SQLite还支持事务处理,这...
本文将详细介绍如何使用Qt框架来实现在SQLite与Access之间进行数据迁移。Qt是一个跨平台的应用程序开发框架,支持多种数据库系统,包括SQLite和Microsoft Access。 首先,确保你的开发环境中已经安装了Qt库,并且...
SQLite Data Access Components (LiteDAC) V5.0.2_Full Sources【5.0.2 09-Dec-21】,含全部源代码。 【SQLite数据访问组件】SQLite数据访问组件(LiteDAC)是一个组件库,它提供了来自Delphi和C ++ Builder的 ...
Access是微软公司的一款关系型数据库管理系统,而SQLite是一款轻量级、开源的嵌入式数据库,广泛应用于移动设备和嵌入式系统。在Java中进行这种转换可以方便地在不同的平台上操作数据,特别是在没有安装Access的情况...
SQLite则是一款轻量级、自包含的数据库引擎,广泛应用于移动设备和嵌入式系统。 将Access数据库(.mdb或.accdb文件)导入到SQLite数据库(.sqlite文件)的过程通常包括以下步骤: 1. **连接Access数据库**:首先,...
Access是由微软开发的关系型数据库管理系统,常用于小型企业或个人数据管理,而Sqlite则是一个轻量级、嵌入式的数据库,广泛应用于移动应用和桌面应用中。由于Sqlite具有体积小、无服务器、零配置、跨平台等优点,...
Access是微软开发的关系型数据库管理系统,而SQLite是一款轻量级、自包含的SQL数据库引擎,广泛应用于嵌入式系统和移动应用。 易语言提供了丰富的支持库,使得开发者可以方便地与各种数据库进行交互。在处理Access...
Access是Microsoft Office套件中的一个数据库管理系统,常用于小型企业或个人管理数据,而SQLite则是一种轻量级的、开源的、嵌入式的关系型数据库,广泛应用于移动应用、网页开发等领域。 在描述中,作者提到用代码...
本文将深入探讨标题为".net代码生成器"的工具,它能将SQL Server、MySQL、Oracle、SQLite、Access等多种数据库的数据自动生成对应的实体类、三层架构以及存储过程,极大地优化了开发流程。 首先,让我们关注这个...
### SQLiteODBC 驱动 SQLite3:深入解析与应用指南 #### 一、SQLiteODBC简介 SQLiteODBC是一种连接SQLite数据库与支持ODBC(开放式数据库连接)的应用程序之间的桥梁。通过SQLiteODBC,开发人员可以利用ODBC标准...
《Access to SQLite E: 源码解析与应用探索》 在信息技术领域,数据库系统扮演着至关重要的角色,其中SQLite以其轻量级、独立性以及跨平台的特点深受开发者喜爱。"access_to_sqlite_e"是一个专门用于访问SQLite...
这个库通常包含了SQLite的二进制文件和相应的ActionScript接口,允许Flex应用与SQLite数据库进行通信。"dba"可能是这个压缩包中的主要文件,它可能是一个包含SQLite数据库连接和操作功能的AS3类库或者是一个示例...
通过安装这个驱动,用户可以使用任何支持ODBC的应用程序(如Microsoft Excel、Access或各种编程语言的ODBC连接器)来连接和操作SQLite数据库。 以下是一些关键知识点: 1. **SQLite**: SQLite是一个开源的、事务性...
在实践中,开发者需要注意几个关键点:首先,Access与SQLite的数据类型可能存在差异,如Access的Date/Time类型对应SQLite的DateTime,需要进行适当的转换;其次,Access支持的VBA宏在SQLite中无法直接使用,需要将...
标题提到的"sqlite for vb、vba"项目,是一个使VB和VBA能够直接与SQLite交互的源代码库。这个库通常包含了必要的接口和组件,以便开发者可以像操作Access或其他数据库一样操作SQLite。项目下载地址为,CodePlex是一...