SQLite 是 D. Richard Hipp 用 C 语言编写的开源嵌入式数据库引擎。它是完全独立的,不具有外部依赖性。它是作为 PHP V4.3 中的一个选项引入的,构建在 PHP V5 中。SQLite 支持多数 SQL92 标准,可以在所有主要的操作系统上运行,并且支持大多数计算机语言。SQLite 还非常健壮。其创建者保守地估计 SQLite 可以处理每天负担多达 100,00 次点击率的 Web 站点,并且 SQLite 有时候可以处理 10 倍于上述数字的负载。
功能
SQLite 对 SQL92 标准的支持包括索引、限制、触发和查看。SQLite 不支持外键限制,但支持原子的、一致的、独立和持久 (ACID) 的事务(后面会提供有关 ACID 的更多信息)。
这意味着事务是原子的,因为它们要么完全执行,要么根本不执行。事务也是一致的,因为在不一致的状态中,该数据库从未被保留。事务还是独立的,所以,如果在同一时间在同一数据库上有两个执行操作的事务,那么这两个事务是互不干扰的。而且事务是持久性的,所以,该数据库能够在崩溃和断电时幸免于难,不会丢失数据或损坏。
SQLite 通过数据库级上的独占性和共享锁定来实现独立事务处理。这意味着当多个进程和线程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程向数据库执行写入操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。
SQLite 网站上记录了完整的 SQLite locking semantics。
内部结构
在内部,SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。所有 SQL 语句都被编译成易读的、可以在 SQLite 虚拟机中执行的程序集。
图 1. SQLite 的内部结构
SQLite 支持大小高达 2 TB 的数据库,每个数据库完全存储在单个磁盘文件中。这些磁盘文件可以在不同字节顺序的计算机之间移动。这些数据以 B+树(B+tree)数据结构的形式存储在磁盘上。SQLite 根据该文件系统获得其数据库权限。
数据类型
SQLite 不支持静态数据类型,而是使用列关系。这意味着它的数据类型不具有表列属性,而具有数据本身的属性。当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成列类型。如果不能转换,则该值将作为其本身具有的类型存储。
SQLite 支持 NULL
、INTEGER
、REAL
、TEXT
和 BLOB
数据类型。
管理 SQLite
SQLite 附带一个可下载的 command-line interface for database administration。通过数据库名称可以调用此命令行程序,并且可以按照下面的方式创建新的数据库和表:
清单 1. 创建新的数据库和表
C:\minblogg>sqlite3 c:\minblogg\www\db\alf.db
SQLite version 3.2.1
Enter “.help” for instructions
sqlite> create table mytable(name varchar(40), age smallint);
sqlite> insert into mytable values(‘Nils-Erik’,23);
sqlite> select * from mytable;
Nils-Erik|23
sqlite>
然后,可以再次打开该数据库,列出它的表和架构,并继续进行插入和删除值的操作。
清单 2. 列出表和架构
C:\minblogg>sqlite3 c:\minblogg\www\db\alf.db
SQLite version 3.2.1
Enter “.help” for instructions
sqlite> .tables
mytable
sqlite> select * from mytable;
Nils-Erik|23
sqlite> .schema
CREATE TABLE mytable(name varchar(40), age smallint);
sqlite>
SQLite 还附带命令行数据库分析器,该分析器允许您显示关于任何 SQLite 数据库当前状态的详细信息。
清单 3. SQLite 分析器
C:\minblogg>sqlite3_analyzer www\db\alf.db
Analyzing table mytable…
Analyzing table sqlite_master…
/** Disk-Space Utilization Report For www\db\alf.db
*** As of 2005-Apr-24 18:56:40
Page size in bytes… 1024
Pages in the whole file (measured)… 2
Pages in the whole file (calculated)… 2
Pages that store data… 2 100.0%
Pages on the freelist (per header)… 0 0.0%
Pages on the freelist (calculated)… 0 0.0%
Pages of auto-vacuum overhead… 0 0.0%
Number of tables in the database… 2
Number of indices… 0
Number of named indices… 0
Automatically generated indices… 0
Size of the file in bytes… 2048
Bytes of user payload stored… 13 0.63%
*** Page counts for all tables with their indices ********************
MYTABLE… 1 50.0%
SQLITE_MASTER… 1 50.0%
*** All tables *******************************************************
Percentage of total database… 100.0%
Number of entries… 2
Bytes of storage consumed… 2048
Bytes of payload… 91 4.4%
Average payload per entry… 45.50
Average unused bytes per entry… 916.50
Maximum payload per entry… 78
Entries that use overflow… 0 0.0%
Primary pages used… 2
Overflow pages used… 0
Total pages used… 2
Unused bytes on primary pages… 1833 89.5%
Unused bytes on overflow pages… 0
Unused bytes on all pages… 1833 89.5%
*** Table MYTABLE ****************************************************
Percentage of total database… 50.0%
Number of entries… 1
Bytes of storage consumed… 1024
Bytes of payload… 13 1.3%
Average payload per entry… 13.00
Average unused bytes per entry… 999.00
Maximum payload per entry… 13
Entries that use overflow… 0 0.0%
Primary pages used… 1
Overflow pages used… 0
Total pages used… 1
Unused bytes on primary pages… 999 97.6%
Unused bytes on overflow pages… 0
Unused bytes on all pages… 999 97.6%
由于完全能够使用命令行界面来管理数据库,因此它可以为数据库管理员带来很大的方便。目前有许多优秀的基于 Web 的 SQLite 数据库管理系统。其中有一个是基于 PHP 的 SQLiteManager。
图 2. 使用 SQLiteManager 管理数据库
备份
备份 SQLite 数据库有两种方法。如果数据库正在使用中,则应从命令行界面使用 .dump 命令。这样可以创建一个包含必要命令和数据的文件,从而重新创建数据库。.dump
命令也可以用于备份数据库表。
清单 4. .dump
命令
sqlite> .dump
BEGIN TRANSACTION;
CREATE TABLE mytable(name varchar(40), age smallint);
INSERT INTO “mytable” VALUES(‘Nils-Erik’, 23);
COMMIT;
sqlite>
如果数据库没有处于使用状态,则可以直接将数据库文件复制到安全位置。
在 PHP V5 中使用 SQLite
一个好的做法是将 SQLite 数据库与 PHP 代码分开。完成此操作的一个简便方法是创建一个 www 目录。在此目录中,创建一个用于存放 SQLite 数据库的 db 目录、一个用于存放数据库和表创建脚本的 dbscripts 目录和一个用于存放数据库备份的 backups 目录。
清单 5. 使用 PHP V5 组织 SQLite 数据库
2004-12-06 15:43 DIR .
2004-12-06 15:43 DIR …
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后
上面这些公司都是时下最受欢迎的互联网大厂,他们的职级、薪资、福利也都讲的差不多了,相信大家都是有梦想和野心的人,心里多少应该都有些想法。
也相信很多人也都在为即将到来的金九银十做准备,也有不少人的目标都是这些公司。
我这边有不少朋友都在这些厂工作,其中也有很多人担任过面试官,上面的资料也差不多都是从朋友那边打探来的。除了上面的信息,我这边还有这些大厂近年来的面试真题及解析,以及一些朋友出于兴趣和热爱一起整理的Android时下热门知识点的学习资料。
部分文件:
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
链图片转存中…(img-MBSU0ZjJ-1712425061137)]
[外链图片转存中…(img-CMLMSugY-1712425061138)]