- 浏览: 1332545 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (471)
- 原创文章 (4)
- Database (84)
- J2SE (63)
- Web (26)
- Javascript (30)
- Lucene (11)
- os (13)
- 算法 (8)
- Webservice (1)
- Open projects (18)
- Hibernate (18)
- Spring (15)
- Css (2)
- J2ee (2)
- 综合技术 (18)
- 安全管理 (13)
- PatternsInJava (27)
- NIO (5)
- Ibatis (2)
- 书籍收藏 (1)
- quartz (7)
- 并发编程 (15)
- oracle问题 (2)
- ios (60)
- coco2d-iphone (3)
- C++ (6)
- Zookeeper (2)
- golang (4)
- animation (2)
- android (1)
最新评论
-
dandingge123:
【引用】限制UITextField输入长度的方法 -
qja:
...
对List顺序,逆序,随机排列实例代码 -
安静听歌:
现在在搞这个,,,,,哎~头都大了,,,又freemarker ...
通用大型网站页面静态化解决方案(一) -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz 配置参考 -
马清天:
[b][/b][list][*]引用[u][/u][/list ...
通用大型网站页面静态化解决方案(一)
(转)http://wuhongsheng.com/mac/2007/10/iphone-database-structure/
/*
* iphone database structure
* @author zye
* @contact zye@tudou.com
* @update 20070924
* @version 0.1
* @url http://yegq.yeax.com/?p=162
* @copyleft 此文档可随意分发。如果你发布的iphone应用得益于此文档,建议注明,或给我email,共贺之。
*/
一、AddressBook.sqlitedb 通讯录数据库
location: /private/var/root/Library/AddressBook/AddressBook.sqlitedb
1.ABGroup 联系人分组信息
ROWID:组ID,自增PK
Name:组名
2.ABGroupChanges 分组信息更新
record:
type:
3.ABGroupMembers 组联系人
UID: PK
group_id:组ID,对应ABGroup.ROWID
member_type: 组员类别
member_id: 组员(联系人)ID,对应ABPerson.ROWID
注意:UNIQUE(group_id, member_type, member_id)
4.ABMultiValue 存储联系人的各种联系方式
UID: PK
record_id: 联系人ID,对应ABPerson.ROWID
property: 属性值. 3.电话; 4.email; 待补充…
identifier: 标识符.0,1,2,3,4,目前所知用于排序
label: 标志值. 1.mobile;2.home;3.work;4.other;5.homepage(URL) 对应ABMultiValueLabel.value
value: 值. 例如一个手机号码13800138000,或一个email地址foo@bar.com
5.ABMultiValueEntry (未知)
parent_id: (未知)
key: (未知)
value: (未知)
注意:UNIQUE(parent_id, key)
6.ABMultiValueEntryKey (未知)
value: (未知)
注意:UNIQUE(value)
7.ABMultiValueLabel 联系方式标志值列表
value: 见ABMultiValue.label
8.ABPerson
ROWID 自增PK,也是联系人的唯一标识
First 名字
Last 姓
Middle (未定)
FirstPhonetic (未定,貌似留作语音拨号用的)
MiddlePhonetic (未定,貌似留作语音拨号用的)
LastPhonetic (未定,貌似留作语音拨号用的)
Organization 所在公司,组织
Department 所在部门
Note 注释
Kind 未定
Birthday 生日
JobTitle 头衔
Nickname 昵称
Prefix 前缀
Suffix 后缀
FirstSort 排序用(具体未知)
LastSort 排序用(具体未知)
CreationDate 创建时间
ModificationDate 最后修改时间
CompositeNameFallback (未知)
9.ABPersonChanges (未知)
record
type
10.ABPersonMultiValueDeletes (未知)
record_id
property_id
identifier
11.ABPhoneLastFour 电话号码后四位匹配表
multivalue_id 对应ABMultiValue.UID
value 电话号码后四位
12.ABRecent (未知)
date
name
property
value
13.sorting_first_section_list (未知)
character
number
14.sorting_last_section_list (未知)
character
number
15.sqlite_sequence (用于记录序列)
name:表命,如ABPerson
seq: 最新序列号
— ==========下面是建表语句==========
CREATE TABLE ABGroup (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT); CREATE TABLE ABGroupChanges (record INTEGER, TYPE INTEGER); CREATE TABLE ABGroupMembers (UID INTEGER PRIMARY KEY, group_id INTEGER, member_type INTEGER, member_id INTEGER, UNIQUE(group_id, member_type, member_id)); CREATE TABLE ABMultiValue (UID INTEGER PRIMARY KEY, record_id INTEGER, property INTEGER, identifier INTEGER, label INTEGER, VALUE TEXT); CREATE TABLE ABMultiValueEntry (parent_id INTEGER, KEY INTEGER, VALUE TEXT, UNIQUE(parent_id, KEY)); CREATE TABLE ABMultiValueEntryKey (VALUE TEXT, UNIQUE(VALUE)); CREATE TABLE ABMultiValueLabel (VALUE TEXT, UNIQUE(VALUE)); CREATE TABLE ABPerson (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, FIRST TEXT, LAST TEXT, Middle TEXT, FirstPhonetic TEXT, MiddlePhonetic TEXT, LastPhonetic TEXT, Organization TEXT, Department TEXT, Note TEXT, Kind INTEGER, Birthday TEXT, JobTitle TEXT, Nickname TEXT, Prefix TEXT, Suffix TEXT, FirstSort TEXT, LastSort TEXT, CreationDate INTEGER, ModificationDate INTEGER, CompositeNameFallback TEXT); CREATE TABLE ABPersonChanges (record INTEGER, TYPE INTEGER); CREATE TABLE ABPersonMultiValueDeletes (record_id INTEGER, property_id INTEGER, identifier INTEGER); CREATE TABLE ABPhoneLastFour (multivalue_id INTEGER PRIMARY KEY, VALUE TEXT); CREATE TABLE ABRecent(DATE INTEGER, name, property INTEGER, VALUE); CREATE TABLE sorting_first_section_list(CHARACTER, NUMBER, UNIQUE(CHARACTER)); CREATE TABLE sorting_last_section_list(CHARACTER, NUMBER, UNIQUE(CHARACTER)); CREATE TABLE sqlite_sequence(name TEXT, seq INTEGER);
— ==========下面是创建索引==========
CREATE INDEX ABMultiValueRecordIDIndex ON ABMultiValue(record_id); CREATE INDEX ABMultiValueLabelIndex ON ABMultiValue(label); CREATE INDEX ABMultiValueEntryKeyIndex ON ABMultiValueEntry(KEY); CREATE INDEX ABFirstSortIndex ON ABPerson(FirstSort); CREATE INDEX ABLastSortIndex ON ABPerson(LastSort); CREATE INDEX ABPhoneLastFourIndex ON ABPhoneLastFour(VALUE); CREATE INDEX ABRecent_value_index ON ABRecent(property, VALUE); CREATE INDEX ABRecent_date_index ON ABRecent(property, DATE);
— ==========下面是创建触发器==========
CREATE TRIGGER delete_phone_last_four AFTER DELETE ON ABMultiValue BEGIN DELETE FROM ABPhoneLastFour WHERE multivalue_id = OLD.UID; END; CREATE TRIGGER sorting_first_prefix_trigger AFTER INSERT ON ABPerson BEGIN INSERT OR REPLACE INTO sorting_first_section_list VALUES(substr(IFNULL(NEW.FirstSort, ‘~’), 1, 1), 1 + IFNULL((SELECT NUMBER FROM sorting_first_section_list WHERE CHARACTER = substr(IFNULL(NEW.FirstSort, ‘~’), 1, 1)), 0)); END; CREATE TRIGGER update_first_prefix_trigger AFTER UPDATE ON ABPerson BEGIN INSERT OR REPLACE INTO sorting_first_section_list VALUES(substr(IFNULL(OLD.FirstSort, ‘~’), 1, 1), (SELECT NUMBER FROM sorting_first_section_list WHERE CHARACTER = substr(IFNULL(OLD.FirstSort, ‘~’), 1, 1)) - 1); INSERT OR REPLACE INTO sorting_first_section_list VALUES(substr(IFNULL(NEW.FirstSort, ‘~’), 1, 1), 1 + IFNULL((SELECT NUMBER FROM sorting_first_section_list WHERE CHARACTER = substr(IFNULL(NEW.FirstSort, ‘~’), 1, 1)), 0)); END; CREATE TRIGGER delete_first_prefix_trigger AFTER DELETE ON ABPerson BEGIN INSERT OR REPLACE INTO sorting_first_section_list VALUES(substr(IFNULL(OLD.FirstSort, ‘~’), 1, 1), (SELECT NUMBER FROM sorting_first_section_list WHERE CHARACTER = substr(IFNULL(OLD.FirstSort, ‘~’), 1, 1)) - 1); END; CREATE TRIGGER sorting_last_prefix_trigger AFTER INSERT ON ABPerson BEGIN INSERT OR REPLACE INTO sorting_last_section_list VALUES(substr(IFNULL(NEW.LastSort, ‘~’), 1, 1), 1 + IFNULL((SELECT NUMBER FROM sorting_last_section_list WHERE CHARACTER = substr(IFNULL(NEW.LastSort, ‘~’), 1, 1)), 0)); END; CREATE TRIGGER update_last_prefix_trigger AFTER UPDATE ON ABPerson BEGIN INSERT OR REPLACE INTO sorting_last_section_list VALUES(substr(IFNULL(OLD.LastSort, ‘~’), 1, 1), (SELECT NUMBER FROM sorting_last_section_list WHERE CHARACTER = substr(IFNULL(OLD.LastSort, ‘~’), 1, 1)) - 1); INSERT OR REPLACE INTO sorting_last_section_list VALUES(substr(IFNULL(NEW.LastSort, ‘~’), 1, 1), 1 + IFNULL((SELECT NUMBER FROM sorting_last_section_list WHERE CHARACTER = substr(IFNULL(NEW.LastSort, ‘~’), 1, 1)), 0)); END; CREATE TRIGGER delete_last_prefix_trigger AFTER DELETE ON ABPerson BEGIN INSERT OR REPLACE INTO sorting_last_section_list VALUES(substr(IFNULL(OLD.LastSort, ‘~’), 1, 1), (SELECT NUMBER FROM sorting_last_section_list WHERE CHARACTER = substr(IFNULL(OLD.LastSort, ‘~’), 1, 1)) - 1); END;
二、notes.db 记事本数据库
location: /private/var/root/Library/Notes/notes.db
1.Note 摘要信息记录表
creation_date: 创建时间
title: 标题
summary: 摘要
2.note_bodies 详细信息
note_id: note ID
data: 记事内容,包含标题
– ==========下面是建表语句==========
CREATE TABLE Note (creation_date INTEGER, title TEXT, summary TEXT); CREATE TABLE note_bodies (note_id INTEGER, DATA, UNIQUE(note_id));
– ==========下面是创建触发器==========
CREATE TRIGGER delete_note_bodies AFTER DELETE ON Note BEGIN DELETE FROM note_bodies WHERE note_id = OLD.ROWID; END;
三、sms.db 短信数据库
location: /private/var/root/Library/SMS/sms.db
1.message 短信表
ROWID: 自增PK
address: 对方手机号码(+86)
date: 时间
text: 内容
flags: 标记. 2.收到的;3.自己发送的
replace: (未知)
svc_center: (未知)
– ==========下面是建表语句==========
CREATE TABLE message (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, address TEXT, DATE INTEGER, text TEXT, flags INTEGER, REPLACE INTEGER, svc_center TEXT);
CallData DB
/System/Library/Frameworks/AppSupport.framework/calldata.db
TABLE _SqliteDatabaseProperties
TABLE citycode
code (INTEGER)
Not sure what the significance of these entries are, I’m wondering if they have something to do with the geocoding of calls not made from your phonebook?
(3888)
city (TEXT)
Not sure what the significance of these entries are, I’m wondering if they have something to do with the geocoding of calls not made from your phonebook?
(RED CLOUD)
INDEX citycode_codeIndex
citycode (code)
TABLE npa
npa (TEXT)
Numbering Plan Area, aka Area Code
(415)
location (TEXT)
State/Province Assigned to the NPA
(CA)
country (TEXT)
Country Assigned to the NPA, may be null if “location” is specific enough
(USA)
TABLE npalocation
npa (TEXT)
Numbering Plan Area, aka Area Code
(415)
location (TEXT)
Descriptive location info
(San Francisco/North Bay Area)
TABLE npanxx
npa (INTEGER)
Numbering Plan Area, aka Area Code
(907)
nxx (INTEGER)
Unknown
(200)
rate_center (INTEGER)
Unknown
(1)
INDEX npanxx_npanxxIndex
npanxx (npa,nxx)
CallHistory DB
/private/var/root/Library/CallHistory/call_history.db
TABLE _SqliteDatabaseProperties
your values will certainly be different here…when you “restore” your iPhone from iTunes the counters all reset
key (TEXT) value (TEXT)
call_history_limit 100
timer_last 60
timer_outgoing 900
timer_incoming 540
timer_all 1440
timer_lifetime 1440
timer_last_reset
data_up_last 2.5439454125
data_down_last 20.86328125
data_up_all 719.9228515625
data_down_all 8677.8427734375
data_up_lifetime 719.9228515625
data_down_lifetime 8677.8427734375
data_last_reset
_ClientVersion 3
_UniqueIdentifier GUID
TABLE call
ROWID (INTEGER PRIMARY KEY AUTOINCREMENT)
Auto-incrementing field/counter
address (TEXT)
International-formatted foreign address
(18005551212)
date (INTEGER)
OSX-epoch based datetime, convertable via date -r
(1187200801)
duration (INTEGER)
Length of call in seconds rounded to next minute, 0 = missed call
(60)
flags (INTEGER)
Flags controlling the type of record
5 – Outgoing call
4 – Incoming call
id (INTEGER)
AddressBook ID for outgoing calls selected from AddressBook, otherwise -1
(67)
INDEX date_index
call (date)
KeyChain DB
/private/var/root/Library/Keychains/keychain-2.db
Encrypted, I don’t know how to parse this yet
Voicemail DB
/private/var/root/Library/Voicemail/voicemail.db
TABLE _SqliteDatabaseProperties
key (TEXT) value (TEXT)
VMVersion 4
_UniqueIdentifier GUID
token string containing various values, including your phone number
uid_validity 1183172695
mailboxusage 57
TABLE voicemail
ROWID (INTEGER PRIMARY KEY AUTOINCREMENT)
Auto-incrementing field/counter
remote_uid (INTEGER)
International-formatted foreign address
(18005551212)
date (INTEGER)
OSX-epoch based datetime, convertable via date -r
(1187200801)
token (TEXT)
Always reads “Complete” from what I can tell
sender (TEXT)
CallerID from the calling party leaving the voicemail message
(8885551212)
callback_num (TEXT)
Callback number left by calling party, usually caller ID
(8885551212)
duration (INTEGER)
Duration in seconds
(5)
expiration (INTEGER)
OSX-epoch based datetime, convertable via date -r
(1189431482)
trashed_date (INTEGER)
definitely based in seconds, haven’t figured out the epoch yet or why it isn’t the same as the other dates based on OSX’s epoch
flags (INTEGER)
Voicemail flags
0 – Not downloaded yet
1 – Partially downloaded
2 – New, unlistened or only partially listened to
3 – Listened completely
11 – Pending delete, in “Deleted Items”
15 – Deleted from iPhone, pending delete from voicemail hq
INDEX date_index
voicemail (date)
INDEX remote_uid_index
voicemail (remote_uid)
Other, more complicated DBs, involved in syncing
AddressBook DB
/private/var/root/Library/AddressBook/AddressBook.sqlitedb
AddressBook Images DB
/private/var/root/Library/AddressBook/AddressBookImages.sqlitedb
Maptiles DB
/private/var/root/Library/Caches/MapTiles/MapTiles.sqlitedb
Calendar DB
/private/var/root/Library/Calendar/Calendar.sqlitedb
发表评论
-
ios 声音合成
2013-08-18 13:20 1287http://stackoverflow.com/ques ... -
__bridge,__bridge_retained和__bridge_transfer的意思,区别与使用 20 三
2012-12-24 01:41 1711使用ARC能帮我们减轻不少内存管理方面的负担,尤其是对用 ... -
CAAnimation
2012-12-23 01:09 2342CAAnimation采用了CAMediaTi ... -
UIViewAnimation动画与Core Animation的CATransition类动画
2012-12-23 01:06 2744使用UIView类函数实现://U ... -
GCD实战2:资源竞争
2012-12-23 01:04 1591转自http://www.dreamingwish.co ... -
GCD实战一:使用串行队列实现简单的预加载
2012-12-22 17:10 2902转自 http://www.dreamingwish.c ... -
GCD介绍(四): 完结
2012-12-22 17:08 1400转自 http://www.dreamingwish.c ... -
GCD介绍(三): Dispatch Sources
2012-12-22 17:07 1649转自 http://www.dreamingwish.com/ ... -
GCD介绍(二): 多核心的性能
2012-12-22 17:05 1205转自http://www.dreamingwish.co ... -
基本概念和Dispatch Queue
2012-12-22 17:03 1381转自 http://www.dreamingwish.c ... -
Best Audio Format for iPhone Audio Programming
2012-12-19 16:26 2559I had never done audio p ... -
LAME 是一个开源的MP3解码编码工具
2012-12-19 13:09 8604MP3 Encoding * 编码MP3文件必须按如下 ... -
sqlite3中的数据类型
2012-12-10 21:37 1333(转)http://www.cnblogs.com/kfqco ... -
ios随机数,and()、random()、arc4random()
2012-11-15 11:06 4726原文:http://bj007.blog.51cto.c ... -
IPHONE GIF 播放的方式
2012-10-11 18:30 1454转 http://blog.csdn.net/zltia ... -
在新线程中使用NSTimer
2012-10-11 18:21 1588转自 http://blog.csdn.net/sjzs ... -
Creating an iPhone Daemon – Part 5
2012-09-02 15:29 1538Creating an iPhone Daemon – ... -
Creating an iPhone Daemon – Part 4
2012-09-02 15:28 1405Creating an iPhone Daemon – ... -
Creating an iPhone Daemon – Part 3
2012-09-02 15:25 1504This is part three of the bl ... -
Creating an iPhone Daemon – Part 2
2012-09-02 15:24 1260Here is part two of the blog ...
相关推荐
"Iphone数据库访问技术"主要涉及如何在iPhone应用中有效地使用数据库系统,尤其是SQLite,这是iOS开发中最常用的轻量级数据库。SQLite是一个嵌入式关系型数据库,它不需要单独的服务器进程,可以直接在应用程序中...
1. **设计数据库结构**:定义一个名为`books`的表,包含书的基本信息。 2. **创建图形界面**:使用Storyboard或XIB文件设计所需的各个界面。 3. **实现功能逻辑**:编写代码实现上述各项功能,包括与SQLite数据库...
当需要升级数据库结构时,iOS开发者需要理解如何迁移旧数据以适应新的数据库模式,这通常通过SQLite的PRAGMA语句或Core Data的Migration Manager完成。 10. **错误处理**: 在进行数据库操作时,错误处理是必不可...
在这个"iphone FMDB 数据库操作示例"中,我们将深入探讨如何利用FMDB进行数据库的创建、查询、插入、更新和删除等基本操作。 首先,让我们了解一下FMDB的基本用法。在项目中引入FMDB库后,你可以通过以下步骤创建一...
8. **数据库升级**:随着应用的发展,可能需要修改数据库结构。在iOS中,可以通过版本管理机制(如`Core Data`中的`migration`)来处理数据库的升级。 9. **性能优化**:为提高性能,可以考虑索引、缓存策略和避免...
本文详细介绍了如何在iPhone应用中集成并使用SQLite数据库,包括如何添加SQLite库、创建数据库及表结构以及执行基本的查询操作等内容。通过上述步骤,开发者可以有效地利用SQLite数据库为iPhone应用提供稳定可靠的...
1. 设计数据库结构:创建一个表,可能包括省份ID、省份名、城市ID和城市名等字段。 2. 插入数据:将全国的省市城市信息插入到对应表中,确保数据的完整性和准确性。 3. 查询数据:根据需求编写SQL查询语句,获取特定...
在提供的代码例子中,可以看到如何在iPhone应用中进行MySQL数据库(实际上应该是SQLite数据库,因为MySQL不直接支持iOS)的操作。以下是对代码中关键知识点的详细解释: 1. **打开数据库**: 在`opendatabase`方法...
2. **创建表**:使用SQL的`CREATE TABLE`语句定义表结构。例如,你可以创建一个包含用户信息的表格:`CREATE TABLE Users (id INTEGER PRIMARY KEY, name TEXT, email TEXT);` 3. **执行SQL命令**:使用`sqlite3_...
- **数据库版本管理**:随着应用的迭代,数据库结构可能会发生变化,这时需要提供升级或降级脚本,确保旧版本的数据能平滑过渡到新版本。 - **数据持久化**:应用关闭时,应确保已提交所有数据库更改,防止数据丢失...
而NoSQL(Not Only SQL)数据库则更注重水平扩展和大数据处理,它不强制数据结构,可以处理非结构化或半结构化的数据。NoSQL数据库通常采用分布式架构,适用于大数据量和高并发的场景。 【SQL数据库详解】 1. **...
如果你是一名有经验的开发者并对开发以数据为中心的iPhone和iPad应用程序感兴趣,那么《移动开发经典丛书:iOS数据库应用高级编程(第2版)》恰好适合你。这本必须拥有的书进行了新的充分修订,并且在结构上对应企业...
我们需要创建一个SQLITE数据库,设计合适的表结构,如歌曲表(包含歌曲ID、名称、艺术家、专辑、文件路径等)、分类表(包含分类ID、分类名称)以及关联表(用于连接歌曲和分类)。使用`FMDB`这样的SQLite封装库可以...
6. **数据存储**:通过使用iPhone文件系统以及SQLite数据库管理系统,让读者学会如何保存和恢复数据。 7. **绘图技术**:介绍了Quartz 2D和OpenGL ES等图形库的使用技巧,使应用能够支持复杂图形界面。 8. **多触控...
4. **数据库模型设计**:设计数据库表结构是关键一步。在iPhone应用中,你可能需要定义表的字段,如数据类型、主键等。例如,你可以创建一个用户表,包含用户名、密码等字段。 5. **事务处理**:SQLite支持事务,...
例如,在电商网站中,商品可能被归类为"电子产品>手机>苹果手机>iPhone 13",这种结构可以无限扩展。在ASP中实现无限级分类,通常会用到递归或自连接查询。递归是通过在函数内部调用自身来处理层次结构,而自连接则...
在IT行业中,数据库是至关重要的组成部分,特别是在移动应用开发中,如iOS的iPhone应用开发。本教程将聚焦于“本地数据库的使用”,通过一个实际的登录程序案例,讲解如何在Objective-C环境中保存用户登录的用户名和...