DISQLite3 Pro破解版是一款非常专业的Delphi控件,而且使用DISQLite3创建的数据库文件也可以由Linux和MacOS使用SQLite3库访问,下面小编为大家带来破解版,有需要的欢迎下载!
DISQLite3 Pro破解版是一款功能起那个大的SQL数据库引擎管理软件,实现了一个自包含的,可嵌入的,零配置的SQL数据库引擎,无需进行过多的设置或管理,DISQLite3基于流行的SQLite3数据库引擎的源代码库。因此,DISQLite3继承了SQLite3的所有功能。它像SQLite3一样打开,读取和修改SQLite3数据库文件。使用DISQLite3创建的数据库文件与SQLite3完全兼容,包括非Windows平台。它可实现大多数SQL-92,能够完整的数据库存储在单个磁盘文件中。除此之外,还包括全文搜索(FTS),可定制的标记器,前缀匹配,以及15种语言的可选字词等功能,可使用SHA256密钥发生器的数据库AES加密。
1、在本站下载并解压,如图所示,获得一个DISQLite3_5.21.0.exe安装程序和Crack破解文件夹
2、双击DISQLite3_5.21.0.exe运行,进入安装向导,点击next
3、点击浏览选择安装路径,点击install安装
4、安装完成后,先不要启动,将crack破解文件夹中的文件复制到软件安装目录中,点击替换目标中的文件
ACID事务,即使在系统崩溃和电源故障之后。
零配置 - 无需设置或管理。
实现大多数SQL-92。
完整的数据库存储在单个磁盘文件中。
支持千兆字节大小的数据库和千兆字节大小的字符串和字符串。自包含:没有外部依赖,没有DLL。
小尺寸和智能链接:只需编译所需的代码,仅添加300 KB的代码空间。
全文搜索(FTS),可定制的标记器,前缀匹配,以及15种语言的可选字词。
使用SHA256密钥发生器的数据库AES加密。
Db.pas 是不需要的,它允许DISQLite3编译所有的Delphi,包括Delphi Standard和Delphi Personal。
比普遍的数据库引擎更适合大多数常见操作。
简单易用的API。
使用DISQLite3创建的数据库文件也可以由Linux和MacOS使用SQLite3库访问。
DISQLite3驱动目录演示应用程序DISQLite3了解大多数SQL-92语言标准:
ALTER TABLE
分析
ATTACH数据库
开始交易
注释
提交交易
创建索引
创建表
创建触发器
创建视图
删除
DETACH数据库
DROP INDEX
DISQLite3数学表达式求值程序演示应用程序DROP TABLE
DROP触发器
DROP VIEW
终止交易
说明
表达式
插
ON CONFLICT子句
PRAGMA
REINDEX
更换
滚动交易
选择
UPDATE
DISQLite3数据库加密演示应用程序DISQLite3提供了一个功能和过程的全面列表,以便轻松高效地管理数据库记录。它包括完整的SQLite3功能,还有一些Delphi特定的附加功能:
AnsiString,UnicodeString / WideString和Variant支持。
数据库和语句包装类。
TDataSet支持。
TStream支持BLOB。
越来越多的Delphi示例项目。
尽管功能丰富,但只有三个不同的函数调用可以实现DISQLite3数据库应用程序。
主要特色
ACID事务,即使在系统崩溃和电源故障之后。
零配置 - 无需设置或管理。
实现大多数SQL-92。
完整的数据库存储在单个磁盘文件中。
支持千兆字节大小的数据库和千兆字节大小的字符串和字符串。
小尺寸和智能链接:只需编译所需的代码,仅添加300 KB的代码空间。
全文搜索(FTS),可定制的标记器,前缀匹配,以及15种语言的可选字词。
使用SHA256密钥发生器的数据库AES加密。
Db.pas 是不需要的,它允许DISQLite3编译所有的Delphi,包括Delphi Standard和Delphi Personal。
比普遍的数据库引擎更适合大多数常见操作。
简单易用的API。
使用DISQLite3创建的数据库文件也可以由Linux和MacOS使用SQLite3库访问。
1.我如何创建一个AUTOINCREMENT字段
简短回答:声明INTEGER PRIMARY KEY的列将自动增加。
下面是一个很长的答案:如果你将一个表的列声明为INTEGER PRIMARY KEY,那么只要你在表中插入一个NULL值,NULL就会自动转换成一个大于最大值的整数该列在表中的所有其他行上,如果该表为空,则为1。 (如果已经使用了最大可能的整数密钥9223372036854775807,则随机选择一个未使用的密钥值。)例如,假设您有一个如下所示的表:
CREATE TABLE t1(
INTEGER PRIMARY KEY,
b INTEGER);
用这个表格,声明
INSERT INTO t1 VALUES(NULL,123);
在逻辑上相当于说:
INSERT INTO t1 VALUES((SELECT max(a)FROM t1)+1,123);
唯一键将按顺序进行,直到最大键达到最大64位有符号整数的值。该值不能递增,因此后续的插入尝试将使用半随机密钥生成算法。
有一个函数sqlite3_last_insert_rowid,它将返回最近插入操作的整数键。
请注意,整数键比插入前表中最大的键大1。新密钥对于当前表中的所有密钥都是唯一的,但它可能与之前从表中删除的密钥重叠。要创建在表的生命周期内唯一的键,请将AUTOINCREMENT关键字添加到INTEGER PRIMARY KEY声明中。那么所选的关键将是比该表中曾经存在的最大关键要多一个。如果该表中以前存在最大可能的键,那么INSERT将失败并显示SQLITE_FULL错误代码。
2.DISQLite3支持哪些数据类型?
请参阅数据类型。
DISQLite3允许我将一个字符串插入到integer类型的数据库列中!
这是一个功能,而不是一个错误。 DISQLite3不执行数据类型约束。任何数据都可以插入到任何列中。您可以将任意长度的字符串放入整数列,布尔列中的浮点数或字符列中的日期。您在CREATE TABLE命令中分配给列的数据类型不限制可将哪些数据放入该列。每列可以容纳任意长度的字符串。 (有一个例外:INTEGER PRIMARY KEY类型的列只能包含64位有符号整数,如果您尝试将除INTEGER PRIMARY KEY列之外的其他任何内容放入INTEGER PRIMARY KEY列,则会导致错误。)
但是,DISQLite3确实使用列的声明类型作为您偏好该格式的值的提示。因此,例如,如果列的类型为INTEGER,并且您尝试将字符串插入该列,则DISQLite3将尝试将该字符串转换为整数。如果可以,它会插入整数。如果不是,则插入字符串。此功能有时称为类型亲和力。
3.为什么DISQLite3不允许我在同一个表的两个不同行上使用'0'和'0.0'作为主键?
当您的主键是数字类型时,会发生此问题。将主键的数据类型更改为TEXT,它应该可以工作。
每一行都必须有一个唯一的主键。对于具有数字类型的列,DISQLite3认为'0'和'0.0'是相同的值,因为它们的比较数值相等。 (请参阅上一个问题。)因此,这些值不是唯一的。
4.多个应用程序或同一应用程序的多个实例可以同时访问单个数据库文件吗?
多个进程可以同时打开同一个数据库。多个进程可以同时做一个SELECT。但是,只有一个过程可以在任何时间对数据库进行更改。
DISQLite3使用读写器锁来控制对数据库的访问。 (在Win95 / 98 / ME下,缺少对读/写锁的支持,而是使用概率模拟。)但要小心:如果数据库文件保存在NFS文件系统上,则此锁定机制可能无法正常工作。这是因为在许多NFS实现中fcntl()文件锁定被破坏。如果多个进程可能尝试同时访问文件,则应该避免将DISQLite3数据库文件放在NFS上。在Windows上,Microsoft的文档说如果您没有运行Share.exe守护进程,锁定可能无法在FAT文件系统下运行。对Windows有很多经验的人告诉我,网络文件的文件锁定非常麻烦并且不可靠。如果他们说的是真的,在两台或多台Windows机器之间共享DISQLite3数据库可能会导致意外问题。
我们知道没有其他嵌入式SQL数据库引擎支持与DISQLite3一样多的一致性。 DISQLite3允许多个进程一次打开数据库文件,并允许多个进程一次读取数据库。当任何进程想要写入时,它必须在更新期间锁定整个数据库文件。但通常只需要几毫秒。其他流程只是等待作者完成,然后继续他们的业务。其他嵌入式SQL数据库引擎通常只允许一个进程同时连接到数据库。
但是,客户端/服务器数据库引擎(如PostgreSQL,MySQL或Oracle)通常支持更高级别的并发,并允许多个进程同时写入同一数据库。这在客户端/服务器数据库中是可行的,因为总是有一个可以协调访问的良好控制的服务器进程。如果您的应用程序需要大量的并发性,那么您应该考虑使用客户端/服务器数据库。但是经验表明,大多数应用程序所需要的并发性比设计者想象的要少得多。
5.DISQLite3线程安全吗?
DISQLite3默认编译为线程安全。这可以在编译时通过重新编译DISQLite3源代码,在开始时调用sqlite3_config或在调用sqlite3_open_v2时的运行时进行更改。
默认的线程模式是“序列化”,并允许应用程序同时使用来自多个线程的同一数据库连接。
只要连接没有锁,应用程序就可以通过线程移动连接句柄。如果没有事务处于挂起状态并且所有语句都已完成,则可以安全地假定没有锁被保留。
6.如何列出DISQLite3数据库中包含的所有表/索引?
您可以通过在名为“SQLITE_MASTER”的特殊表上执行SELECT来访问表和索引名称。 每个DISQLite3数据库都有一个定义数据库模式的SQLITE_MASTER表。 SQLITE_MASTER表如下所示:
CREATE TABLE sqlite_master (
type TEXT,
name TEXT,
tbl_name TEXT,
rootpage INTEGER,
sql TEXT);
对于表格,类型字段将始终为'table',名称字段将为表格的名称。 因此,要获取数据库中所有表的列表,请使用以下SELECT命令:
SELECT name FROM sqlite_master
WHERE type='table'
ORDER BY name;
对于索引,type等于'index',name是索引的名称,tbl_name是索引所属表的名称。对于表和索引,sql字段是创建表或索引的原始CREATE TABLE或CREATE INDEX语句的文本。对于自动创建的索引(用于实现PRIMARY KEY或UNIQUE约束),sql字段为零。
SQLITE_MASTER表是只读的。您无法使用UPDATE,INSERT或DELETE更改此表。该表由CREATE TABLE,CREATE INDEX,DROP TABLE和DROP INDEX命令自动更新。
临时表不会出现在SQLITE_MASTER表中。临时表及其索引和触发器出现在另一个名为SQLITE_TEMP_MASTER的特殊表中。 SQLITE_TEMP_MASTER的工作方式与SQLITE_MASTER相似,只是它只对创建临时表的应用程序可见。要获得所有永久和临时表的列表,可以使用类似于以下的命令:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type='table'
ORDER BY name
7.DISQLite3数据库是否有已知的大小限制?
点击这里查看关于DISQLite3限制的完整讨论。
8.DISQLite3中VARCHAR的最大大小是多少?
DISQLite3不强制执行VARCHAR的长度。你可以声明一个VARCHAR(10),并且DISQLite3会很乐意让你放入500个字符。它将保持所有500个字符的完整 - 它从不截断。
9.DISQLite3是否支持BLOB类型?
DISQLite3允许您将BLOB数据存储在任何列中,甚至是声明为保存其他类型的列。
10如何在DISQLite3的现有表格中添加或删除列?
DISQLite3具有有限的ALTER TABLE支持,您可以使用它将列添加到表的末尾或更改表的名称。如果你对表的结构做了更复杂的修改,你将不得不重新创建表。您可以将现有数据保存到临时表中,删除旧表,创建新表,然后将数据从临时表中复制回来。
例如,假设您有一个名为“t1”的表,其中列名称为“a”,“b”和“c”,并且您希望从此表中删除列“c”。以下步骤说明了如何做到这一点:
BEGIN TRANSACTION;
CREATE TEMPORARY TABLE t1_backup(a,b);
INSERT INTO t1_backup SELECT a,b FROM t1;
DROP TABLE t1;
ALTER TABLE t1_backup RENAME TO t1;
COMMIT;
11.我删除了很多数据,但数据库文件没有变小。这是一个错误?
不可以。从DISQLite3数据库删除信息时,未使用的磁盘空间将添加到内部“自由列表”中,并在下次插入数据时重新使用。磁盘空间不会丢失。但是它们都没有返回到操作系统。
如果删除大量数据并想缩小数据库文件,请运行VACUUM命令。 VACUUM将从头开始重建数据库。这将使数据库保留一个空白的自由列表和一个尺寸最小的文件。但是,请注意,VACUUM可能需要一些时间才能运行(每兆字节大约为半秒),并且在运行时可以使用最多两倍的临时磁盘空间作为原始文件。
使用VACUUM命令的替代方法是使用auto_vacuum编译指示启用的auto-vacuum模式。
12.如何使用包含嵌入式单引号(')字符的字符串文字?
SQL标准指定通过在一行中放置两个单引号来逃脱字符串中的单引号。在这方面,SQL就像Pascal编程语言一样工作。 DISQLite3遵循这个标准。例:
INSERT INTO xyz VALUES('5 O''clock');
13.什么是SQLITE_SCHEMA错误,为什么我会得到一个?
准备好的SQL语句不再有效并且无法执行时,将返回SQLITE_SCHEMA错误。发生这种情况时,必须使用sqlite3_prepare API从SQL重新编译该语句。只有在使用sqlite3_prepare / sqlite3_step / sqlite3_finalize API执行SQL时才会发生SQLITE_SCHEMA错误,而不是在使用sqlite3_exec时发生。
准备好的语句变得无效的最常见原因是数据库的模式在SQL准备好之后(可能由另一个进程)修改。这可能发生的其他原因是:
数据库被DETACHed。
数据库是VACUUMed。
用户功能定义已被删除或更改。
排序规则定义已被删除或更改。
授权功能已更改。
在所有情况下,解决方案是从SQL重新编译语句并尝试再次执行它。因为准备好的语句可能会被另一个更改数据库模式的进程无效,所以使用sqlite3_prepare / sqlite3_step / sqlite3_finalize API的所有代码都应该准备好处理SQLITE_SCHEMA错误。
14.为什么ROUND(9.95,1)会返回9.9而不是10.0?不应该9.95整理?
SQLite使用二进制算术,二进制,没有办法写9.95在有限的位数。最接近你的可以达到9.95的64位IEEE浮点数(这是SQLite使用的)是9.949999999999999289457264239899814128875732421875。所以当你输入“9.95”时,SQLite真的可以理解这个数字是上面显示的数值。这个价值下降了。
处理浮点二进制数字时,这种问题始终存在。要记住的一般规则是,具有十进制的有限表示(a.k.a“base-10”)的大多数分数在二进制中没有有限的表示(a.k.a“base-2”)。因此它们使用可用的最接近的二进制数来近似。这种近似值通常非常接近,但会略微偏离,在某些情况下可能导致结果与您预期的结果有所不同。
15.Unicode字符不区分大小写的匹配不起作用。
SQLite的默认配置只支持不区分大小写的ASCII字符比较。原因在于,要进行完整的不区分大小写的比较和大小写转换,需要表和逻辑几乎将SQLite库的大小加倍。 SQLite开发人员认为,任何需要完整Unicode支持的应用程序可能已经具有必要的表格和函数,因此SQLite不应占用空间来复制此功能。
默认情况下,SQLite不提供完整的Unicode支持,而是提供了与外部Unicode比较和转换例程链接的功能。应用程序可以重载内置的NOCASE整理序列(使用sqlite3_create_collation)和内置的like(),upper()和lower()函数(使用sqlite3_create_function)。开发人员可以根据自己的项目中已包含Unicode识别的比较例程编写自己的重载。
16.INSERT很慢 - 我每秒只能做几十个INSERT。
实际上,SQLite在一台普通台式机上每秒钟可以轻松完成50,000或更多的INSERT语句。但它每秒只能做几十个事务。交易速度受到磁盘驱动器转速的限制。一个交易通常需要磁盘盘片的两次完整的旋转,这在7200RPM磁盘驱动器上每秒限制您约60个事务。
交易速度受磁盘驱动器速度的限制,因为(默认情况下)SQLite实际上会一直等到数据真正安全存储在磁盘服务上,然后交易完成。这样,如果您突然断电或者您的操作系统崩溃,您的数据仍然安全。有关详细信息,请阅读SQLite中的原子提交。
默认情况下,每个INSERT语句都是它自己的事务。但是,如果使用BEGIN ... COMMIT包围多个INSERT语句,则所有插入操作都会分组到一个事务中。提交事务所需的时间将在所有随附的插入语句中摊销,因此每个插入语句的时间会大大减少。
另一个选项是运行PRAGMA synchronous = OFF。这个命令将导致SQLite不等待数据到达磁盘表面,这将使写入操作看起来更快。但是,如果您在交易中断电,您的数据库文件可能会损坏。
17.我不小心删除了我的SQLite数据库中的一些重要信息。我怎样才能恢复它?
如果您有数据库文件的备份副本,请从备份中恢复信息。
如果你没有备份,恢复是非常困难的。您可能能够在原始数据库文件的二进制转储中找到部分字符串数据。在给定特殊工具的情况下恢复数字数据也是可能的,但据我们所知,目前还没有这样的工具。 SQLite有时用SQLITE_SECURE_DELETE选项进行编译,该选项用零覆盖所有被删除的内容。如果是这种情况,那么恢复显然是不可能的。自从数据被删除以来,如果您运行了VACUUM,恢复也是不可能的。如果未使用SQLITE_SECURE_DELETE并且VACUUM尚未运行,则某些已删除的内容可能仍在数据库文件中,标记为可重用的区域。但是,再次,我们知道没有任何程序或工具可以帮助您恢复数据。
18.什么是SQLITE_CORRUPT错误?数据库“畸形”意味着什么?为什么我得到这个错误?
当SQLite在数据库文件的结构,格式或其他控制元素中检测到错误时,将返回SQLITE_CORRUPT错误。
SQLite不会损坏数据库文件,除非是非常罕见的错误(请参阅DatabaseCorruption),即使这样,错误通常也很难再现。即使您的应用程序在更新过程中崩溃,您的数据库也是安全的。即使您的操作系统崩溃或电力损失,数据库也是安全的。 SQLite的抗崩溃功能已经得到了广泛的研究和测试,并得到了数百万用户的多年实际经验的证实。“
也就是说,硬件或操作系统中有很多外部程序或错误可以破坏数据库文件。详细信息可以在关于SQLite以及邮件列表存档中的原子提交和锁定支持的讨论中找到。
您可以使用PRAGM integrity_check对数据库完整性进行彻底但时间密集的测试。
您可以使用PRAGMA quick_check对数据库完整性进行更快速但不太完整的测试。
根据您的数据库损坏的程度,您可以通过使用CLI将架构和内容转储到文件然后重新创建来恢复某些数据。不幸的是,一旦虚张声势从墙上掉下来,通常不可能再次将他重新聚合在一起。
19.SQLite是否支持外键?
从版本2.1.1开始,DISQLite3支持外键约束。
DISQLite3的先前版本解析了外键约束,但没有强制执行它们。等效功能可以使用SQL触发器来实现。
我的WHERE子句表达式column1 =“column1”不起作用。它会导致返回表的每一行,而不仅仅是column1的值为“column1”的行。
在SQL中围绕字符串文字使用单引号,而不是双引号。这是SQL标准要求的。您的WHERE子句表达式应为:column1 ='column2'
SQL使用包含特殊字符或关键字的标识符(列名或表名)的双引号。所以双引号是转义标识符名称的一种方式。因此,当你说column1 =“column1”,相当于column1 = column1,显然总是如此。
20.SQL标准要求强制执行UNIQUE约束,即使约束中的一个或多个列都是NULL,但SQLite不会执行此操作。这不是一个错误?
也许你在引用SQL92中的以下语句:
当且仅当表中没有两行在唯一列中具有相同的非空值时,满足唯一约束。
该陈述含糊不清,至少有两种可能的解释:
当且仅当表中没有两行具有相同的值并且唯一列中具有非空值时,满足唯一约束。
当且仅当表中没有两行具有非空的唯一列的子集中的相同值时,才满足唯一约束。
SQLite遵循解释(1),就像PostgreSQL,MySQL,Oracle和Firebird一样。的确,Informix和Microsoft SQL Server使用解释(2),但是我们SQLite开发人员认为解释(1)是对需求的最自然的解读,我们也希望最大化与其他SQL数据库引擎的兼容性,以及大多数其他数据库引擎也与(1)一起使用,所以这就是SQLite所做的。
更新sqlite3_errmsg针对某些错误代码返回的错误消息的文本。
添加新的指针传递接口。
为了利用新的指针传递接口提供的改进的安全性,对某些扩展进行向后不兼容的更改:
扩展FTS5→需要sqlite3_bind_pointer来查找fts5_api指针。
carray(PTR,N)→需要sqlite3_bind_pointer来设置PTR参数。
记住(V,PTR)→需要sqlite3_bind_pointer来设置PTR参数。
添加了SQLITE_STMT虚拟表扩展。
添加了COMPLETION扩展 - 旨在为交互式用户界面提供制表符完成。这是一个正在进行的工作。预计未来版本会进一步增强。
添加了UNION虚拟表扩展。
内置日期和时间函数已得到增强,以便它们可以用于CHECK约束,表达式索引以及部分索引的WHERE子句中,前提是它们不使用'now','localtime', or'utc'关键字。进一步的信息。
用额外的“prepFlags”参数添加了sqlite3_prepare_v3和sqlite3_prepare16_v3接口。
为sqlite3_prepare_v3提供SQLITE_PREPARE_PERSISTENT标志,并使用它来限制FTS3,FTS5和R-Tree扩展的后备存储器误用。
添加了PRAGMA secure_delete = FAST命令。当secure_delete设置为FAST时,只要不会增加I / O数量,旧内容就会被零覆盖。删除的内容可能仍会保留在免费页面列表中,但会从所有b-tree页面中清除。
查询规划器增强功能:
当为OR扫描的每个ORed项生成单独的循环时,移动循环外的任何常量WHERE表达式,就像顶级循环所做的那样。
查询计划程序检查绑定参数的值以帮助确定部分索引是否可用。
当决定两个估算成本相同的计划时,将选择偏向不使用分拣机的计划。
最后评估涉及相关子查询的WHERE子句约束,希望它们永远不会被评估。
如果该子查询从虚拟表中读取数据,请勿对LEFT JOIN的RHS上的子查询使用展平优化,这样会阻止查询计划程序对子查询的结果创建自动索引,从而可能会减慢停止查询。
为sqlite3_stmt_status接口添加SQLITE_STMTSTATUS_REPREPARE,SQLITE_STMTSTATUS_RUN和SQLITE_STMTSTATUS_MEMUSED选项。
为PRAGMA integrity_check,PRAGMA quick_check和PRAGMA foreign_key_check提供PRAGMA函数。
SQLITE_DBCONFIG_ENABLE_QPSG运行时选项启用查询计划程序稳定性保证。
其他优化可使所用CPU周期减少2%。
Bug修复:
修复sqlite3_column_name对于使用展平优化的查询的行为,以便结果与其他未使用该优化的查询以及PostgreSQL,MySQL和SQLServer一致。
修复查询计划程序,以便它知道如果WHERE子句使用IS运算符,则不会在LEFT JOIN的右表上使用自动索引。
确保查询规划器知道,即使该列标有“NOT NULL”,展开的LEFT JOIN的任何列都可以为NULL。
在带ATTACH附加数据库的数据库连接上运行时,修复了PRAGMA integrity_check中罕见的误报。
修复如果使用某些不合理的CREATE TABLE声明导致断言错误的错误。