如何从iPhone备份SQLite和Plist文件查询数据
某些用户可能希望使用专家模式直接操作存储在其备份中的原始文件。这些通常由SQLite数据库( .sqlite3
, .sqllitedb
和.db
)或Plist(通常是.plist
)文件组成。
iPhone Backup Extractor包含一个内置的Plist编辑器,其用户可以自动将其数据导出为PDF,HTML,VCard,ICAL,VCF或CSV格式,以便于访问。但是,希望从这些文件中提取数据的用户需要一个SQLite数据库客户端。
我如何使用SQLite数据库?
用户可能想尝试以下三个应用程序中的任何一个:
- SQLiteFlow (付费,macOS和iOS)。 SQLiteFlow是我们选择的macOS SQLite工具。
- Base 2 (付费,macOS)。 Base是我们用于macOS的第二受欢迎的SQLite工具之一,可以直接下载和App Store应用程序获得 。
- SQLite的数据库浏览器 (免费,macOS和Windows)。数据库浏览器曾经被命名为SQLite数据库浏览器。这是我们推荐用于Windows的工具,它是免费的。他们还提供了适用于macOS的版本。
如何直接使用Apple的数据库文件?
例如,要手动访问联系人数据,用户应提取Libray/AddressBook/AddressBook.sqllitedb
,然后使用SQLite查看器打开提取的文件。选择“执行SQL”选项卡,将其粘贴到“SQL字符串”字段中:
SELECT ABPerson.first, ABPerson.last, ABMultiValue.value FROM ABPerson, ABMultiValue WHERE ABMultiValue.record_id = ABPerson.ROWID
按下Execute Query
按钮应返回“数据返回”字段中显示的完整联系人列表。
要访问SMS数据,用户应提取Libray/SMS/SMS.db
,使用SQLite查看器打开提取的文件,选择“ Browse data
选项卡,然后从“ Table
下拉列表中选择message
。单击放大镜按钮后,用户应在“返回的数据”字段中看到其完整的SMS历史记录。
我们的其中一位用户发现以下查询很有帮助,因此我们将其包含在此处供我们的用户使用。请记住,iOS版本之间的数据库格式会发生变化,因此这些查询通常需要随时更改。
SELECT ROWID, ABPerson.first, ABPerson.last, ABPerson.Organization AS organization, ABPerson.Department AS department, DATETIME(ABPerson.Birthday + STRFTIME('%s', '2001-01-01 00:00:00'), 'unixepoch', 'localtime') AS Birthday, ABPerson.JobTitle as jobtitle, ABPerson.Organization, ABPerson.Department, ABPerson.Note, ABPerson.Nickname, DATETIME(ABPerson.CreationDate + STRFTIME('%s', '2001-01-01 00:00:00'), 'unixepoch', 'localtime') AS Created, DATETIME(ABPerson.ModificationDate + STRFTIME('%s', '2001-01-01 00:00:00'), 'unixepoch', 'localtime') AS Modified, ( SELECT value FROM ABMultiValue WHERE property = 3 AND record_id = ABPerson.ROWID AND label = ( SELECT ROWID FROM ABMultiValueLabel WHERE value = '_$!<Work>!$_' ) ) AS phone_work, ( SELECT value FROM ABMultiValue WHERE property = 3 AND record_id = ABPerson.ROWID AND label = ( SELECT ROWID FROM ABMultiValueLabel WHERE value = '_$!<Mobile>!$_' ) ) AS phone_mobile, ( SELECT value FROM ABMultiValue WHERE property = 3 AND record_id = ABPerson.ROWID AND label = ( SELECT ROWID FROM ABMultiValueLabel WHERE value = '_$!<Home>!$_' ) ) AS phone_home, ( SELECT value FROM ABMultiValue WHERE property = 4 AND record_id = ABPerson.ROWID AND label IS null ) AS email, ( SELECT value FROM ABMultiValueEntry WHERE parent_id IN ( SELECT ROWID FROM ABMultiValue WHERE record_id = ABPerson.ROWID ) AND key = ( SELECT ROWID FROM ABMultiValueEntryKey WHERE lower(value) = 'street' ) ) AS address, ( SELECT value FROM ABMultiValueEntry WHERE parent_id IN ( SELECT ROWID FROM ABMultiValue WHERE record_id = ABPerson.ROWID ) AND key = ( SELECT ROWID FROM ABMultiValueEntryKey WHERE lower(value) = 'city' ) ) AS city FROM ABPerson ORDER BY ABPerson.first
日期和时间字段只是作为数字返回,我该如何解释它们?
您可能很难解释数据库中的许多字段。别忘了,iPhone Backup Extractor可以自动为您提取数据!但是,如果您单独使用它,您应该会发现日期表示为自2001-01-01
或1970-01-01
以来的秒数,具体取决于日期字段的位置。在Excel中,您可以使用公式,例如=1/1/2001 + A1/60/60/24
,其中A1
是您的时间数据。您可能还需要调整值以考虑当地时区。
由 Andrew
You can use this to format the messages (SMS) date field: