第一部分Android概览 2
第1章Android简介 2
1.1移动软件开发简史 2
1.1.1遥想当年 2
1.1.2“砖头” 3
1.1.3无线应用协议(WAP) 4
1.1.4专用移动平台 6
1.2开放手机联盟(OHA) 7
1.2.1无线Google 8
1.2.2成立开放手机联盟 8
1.2.3制造商:设计Android手机 9
1.2.4移动运营商:传播Android 体验 9
1.2.5内容提供商:开发Android应用 程序 9
1.2.6充分发挥Android的优势 10
1.3 Android平台的不同之处 10
1.3.1 Android:下一代平台 11
1.3.2免费开放源代码 11
1.3.3熟悉和廉价的开发工具 12
1.3.4合理的开发人员学习曲线 12
1.3.5强大的应用程序开发支持 12
1.3.6丰富、安全的应用集成 13
1.3.7无障碍发布 13
1.3.8为应用程序提供的“自由市场” 13
1.3.9新生并逐渐成长的平台 14
1.4 Android平台 14
1.4.1 Android的基本体系结构 14
1.4.2安全与许可权限 16
1.4.3开发Android应用程序 17
小结 18
参考资料和更多信息 18
第2章 搭建你的Android开发环境 19
2.1配置你的开发环境 19
2.1.1配置操作系统以适应设备调试 20
2.1.2配置Android硬件以供调试 20
2.1.3升级Android SDK 20
2.1.4 Android软件开发包的问题 21
2.2探索Android SDK 21
2.2.1理解Android SDK许可协议 21
2.2.2阅读Android SDK文档 22
2.2.3探索Android应用程序框架 23
2.2.4了解Android工具 24
2.2.5探索Android示例应用程序 27
小结 28
参考资料和更多信息 28
第3章 编写第个Android应用程序 29
3.1测试你的开发环境 29
3.1.1在Eclipse工程中导入Snake应用程序 29
3.1.2为Snake工程创建Android虚拟设备(AVD) 31
3.1.3为Snake工程创建运行配置参数 31
3.1.4在Android模拟器中运行Snake应用程序 32
3.2构建你的第一个Android应用程序 33
3.2.1.创建和配置新的Android工程 33
3.2.2 Android应用程序的核心文件和目录 34
3.2.3为新工程创建Android虚拟设备 35
3.2.4为工程配置运行参数 35
3.2.5在模拟器中运行Android应用程序 36
3.2.6在模拟器中调试Android应用程序 37
3.2.7为Android应用程序添加日志记录 39
3.2.8为应用程序添加媒体支持 40
3.2.9为应用程序添加位置服务(LBS) 42
3.2.10在硬件上调试应用程序 43
小结 45
参考资料和更多信息 45
第二部分Android应用程序设计精髓 48
第4章 剖析Android应用程序 48
4.1掌握重要的Android术语 48
4.2使用应用程序Context 48
4.3使用Activity执行应用程序任务 49
4.3.1 Android Activity的生命周期 50
4.3.2使用Intent管理Activity跳转 53
4.4使用服务 56
4.5接收和广播Intent 57
小结 57
参考资料和更多信息 58
第5章 使用Android Manifest文件定义应用程序 59
5.1配置Android Manifest文件 59
5.2管理你的应用程序标识 63
5.2.1为你的应用程序指定版本 63
5.2.2给你的应用程序加上名称和图标 63
5.3强制指定应用程序的系统需求 64
5.3.1针对特定SDK版本 64
5.3.2强制指定应用程序平台需求 66
5.3.3使用外部库 67
5.4注册Activity和其他应用程序组件 68
5.4.1使用 Intent滤器为应用程序指派主入口点Activity 68
5.4.2配置其他Intent过滤器 68
5.5使用许可权限 69
5.5.1注册应用程序所需的许可权限 69
5.5.2注册应用程序授予其他应用程序的许可权限 70
5.6探索Manifest文件的其他参数 71
小结 71
参考资料和更多信息 71
第6章 管理应用程序资源 72
6.1什么是资源 72
6.1.1存储应用程序资源 72
6.1.2理解资源目录的层级结构 72
6.1.3资源的类型 73
6.1.4存储不同的资源类型 74
6.1.5使用程序访问资源 76
6.2使用Eclipse设置简单资源 77
6.3使用资源 79
6.3.1使用String(字符串)资源 79
6.3.2使用格式化的字符串资源 80
6.3.3使用字符串数组 81
6.3.4使用Boolean(布尔)资源 82
6.3.5使用Integer(整型)资源 82
6.3.6使用颜色 83
6.3.7使用尺寸 83
6.3.8使用简单Drawable资源 84
6.3.9使用图像 85
6.3.10使用动画 87
6.3.11使用菜单 89
6.3.12使用XML文件 90
6.3.13使用原始文件 91
6.3.14资源引用 91
6.3.15使用布局(Layout) 92
6.3.16使用样式(Style ) 96
6.3.17使用主题(Theme ) 98
6.4引用系统资源 98
小结 99
参考资料和更多信息 99
第三部分Android用户界面设计精髓 102
第7章 探索用户界面屏幕元素 102
7.1 Android视图和布局简介 102
7.2使用TextView显示文本 103
7.2.1配置布局和尺寸 104
7.2.2在文本中创建上下文链接 104
7.3获取用户数据 105
7.3.1使用EditText控件获取用户输入文本 106
7.3.2使用Spinner控件为用户提供可选输入 109
7.4使用按钮、多选框和单选组 110
7.4.1使用基本按钮 110
7.4.2使用多选框和开关(Toggle)按钮 111
7.4.3使用RadioGroup和RadioButton 112
7.5获取用户输入的日期和时间 114
7.6使用指示器向用户显示数据 115
7.7使用SeekBar调整进度 116
7.7.1使用RatingBar显示评分数据 117
7.7.2使用Chronometer显示时间推移 118
7.7.3显示时间 119
7.8为用户提供选项和上下文菜单 119
7.8.1使用选项菜单 119
7.8.2使用ContextMenu 121
7.9处理用户事件 123
7.9.1监听触摸模式状态改变 123
7.9.2监听全屏幕上的事件 124
7.9.3监听长时单击 124
7.9.4监听焦点改变 125
7.10使用对话框 126
7.10.1探索不同类型的对话框 126
7.10.2跟踪对话框的生命周期 127
7.10.3使用自定义对话框 128
7.11使用样式 128
7.12使用主题 130
小结 131
第8章 使用布局设计用户界面 132
8.1创建Android用户界面 132
8.1.1使用XML资源创建布局 132
8.1.2使用代码创建布局 133
8.2组织用户界面 135
8.3使用内建的布局类 138
8.3.1使用FrameLayout 140
8.3.2使用LinearLayout 141
8.3.3使用RelativeLayout 142
8.3.4使用TableLayout 144
8.3.5在屏幕上使用多布局 145
8.4使用内建的View容器类 146
8.4.1使用数据驱动容器 147
8.4.2使用标签组织视图 150
8.4.3添加滚动支持 152
8.4.4探索其他视图容器 153
小结 154
第9章 绘图与动画 155
9.1屏幕绘图 155
9.2使用文字 158
9.2.1使用默认字体 158
9.2.2使用自定义字体 159
9.2.3测量文字所需的屏幕尺寸 160
9.3使用位图 160
9.4使用图形 161
9.4.1用XML资源定义图形 161
9.4.2使用程序定义图形 162
9.4.3绘制各种图形 162
9.5使用动画 167
9.5.1使用逐帧动画 167
9.5.2使用补间动画 168
小结 172
第四部分 使用常用Android API 174
第10章 使用Android数据和存储API 174
10.1使用应用程序首选项 174
10.1.1创建私有和共享首选项 174
10.1.2搜索和读取首选项 175
10.1.3新增、修改和删除首选项 175
10.1.4使用Android文件系统查找首选项数据 176
10.2使用文件和目录 177
10.2.1探索Android应用程序目录 177
10.2.2使用Android文件系统操作其他目录和文件 179
10.3使用SQLite数据库存储结构化数据 180
10.3.1创建SQLite数据库 181
10.3.2创建、修改和删除数据库记录 183
10.3.3在SQLite数据库中执行查询 185
10.3.4关闭和删除SQLite数据库 189
10.3.5设计持久数据库 189
10.3.6向应用程序界面绑定数据 191
小结 195
参考资料和更多信息 195
第11章 使用内容提供器在应用程序间共享数据 196
11.1探索Android内容提供器 196
11.1.1使用MediaStore内容提供器 196
11.1.2使用CallLog内容提供器 198
11.1.3使用浏览器(Browser)内容提供器 199
11.1.4使用联系簿(Contacts)内容提供器 200
11.1.5使用UserDictionary(用户词典)内容提供器 202
11.1.6使用Settings内容提供器 202
11.2修改内容提供器的数据 202
11.2.1添加记录 203
11.2.2修改记录 203
11.2.3删除记录 204
11.3使用内容提供器增强你的应用程序 204
11.4实现内容提供器 208
11.4.1实现内容提供器接口 209
11.4.2定义数据URI 209
11.4.3定义数据列 210
11.4.4实现重要的内容提供器方法 210
11.4.5更新Manifest文件 214
11.5使用动态文件夹(Live Folder) 215
小结 217
参考资料和更多信息 217
第12章 使用Android网络API 218
12.1移动网络基础 218
12.2访问因特网(HTTP) 218
12.2.1从Web读取数据 219
12.2.2使用HttpURLConnection 219
12.2.3解析从网络获取的XML 220
12.2.4异步操作 222
12.2.5使用AsyncTask 222
12.2.6使用线程进行网络访问 223
12.2.7显示从网络资源获取的图像 224
12.2.8获取Android网络状态 226
小结 227
参考资料和更多信息 227
第13章 使用Android Web API 228
13.1使用WebView浏览Web 228
13.1.1设计带有WebView控件的布局 229
13.1.2向WebView控件载入内容 229
13.1.3为WebView控件添加功能 230
13.2使用WebKit延伸Web应用 232
13.2.1浏览WebKit API 232
13.2.2扩展Android Web应用程序的功能 232
13.3使用Flash 236
13.3.1使用Flash应用程序 236
13.3.2构建AIR应用程序 237
小结 237
参考资料和更多信息 237
第14章 使用位置服务API 238
14.1使用全球定位服务(GPS) 238
14.1.1在你的应用程序中使用GPS功能 238
14.1.2查找你的位置 239
14.1.3定位你的模拟器 240
14.2位置地理编码 241
14.3在地图上标注位置 243
14.3.1地图标注内容 243
14.3.2地图标注视图 244
14.3.3获得调试API Key 245
14.3.4拖曳地图视图 247
14.3.5缩放地图视图 247
14.3.6标记点 248
14.4位置服务扩展应用 251
小结 252
参考资料和更多信息 252
第15章 使用Android多媒体API 253
15.1使用多媒体 253
15.2使用静态图像 254
15.2.1使用摄像头捕捉静态图像 254
15.2.2配置摄像头模式 257
15.2.3分享图像 258
15.2.4将图像指定为壁纸 259
15.3使用视频 259
15.3.1录制视频 260
15.3.2 播放视频 261
15.4使用音频 262
15.4.1录制音频 262
15.4.2播放音频 263
15.4.3共享音频 264
15.4.4搜索多媒体 264
15.4.5使用铃音 265
小结 265
参考资料和更多信息 265
第16章 使用Android电话API 266
16.1使用电话功能 266
16.1.1为获取手机状态信息取得许可权限 266
16.1.2获取通话状态 267
16.1.3请求获取服务信息 268
16.1.4监控信号强度和数据连接速度 269
16.1.5使用电话号码 269
16.2使用短消息 270
16.2.1获得发送和接收短消息的许可权限 270
16.2.2发送短消息 270
16.2.3接收短消息 272
16.3拨打和接听电话 273
小结 275
参考资料和更多信息 275
第17章 通过OpenGL ES使用Android 3D图形 276
17.1使用OpenGL ES 276
17.1.1在Android中使用OpenGL ES 276
17.1.2保证设备兼容性 277
17.2在Android SDK中使用OpenGL ES API 277
17.3手工处理OpenGL ES任务 278
17.3.1创建SurfaceView 278
17.3.2启动OpenGL ES线程 279
17.3.3初始化EGL 281
17.3.4初始化GL 282
17.3.5屏幕绘制 283
17.4绘制3D物体 283
17.4.1绘制顶点(Vertices) 283
17.4.2为顶点着色 284
17.4.3绘制更多复杂物体 285
17.4.4照亮你的场景 286
17.4.5为对象赋予材质 288
17.5同Android视图和事件进行交互 289
17.5.1允许OpenGL线程向应用程序线程发送信息 289
17.5.2 允许应用程序线程向OpenGL线程发送信息 290
17.6清理OpenGL ES 291
17.7使用GLSurfaceView 292
17.8使用OpenGL ES 2.0. 294
17.8.1为OpenGL ES 2.0配置应用程序 295
17.8.2获取OpenGL ES 2.0平面 295
小结 298
参考资料和更多信息 298
第18章 使用Android NDK 299
18.1何时使用Android NDK 299
18.2安装Android NDK 300
18.3探索Android NDK 300
18.4创建自己的NDK工程 300
18.4.1使用Java调用原生代码 301
18.4.2处理参数和返回值 302
18.4.3在原生代码中使用异常 303
18.5提升图形处理性能 304
小结 305
参考资料和更多信息 305
第19章 使用Android可选硬件API 306
19.1与设备硬件进行交互 306
19.2使用设备传感器 307
19.2.1使用不同的传感器 307
19.2.2获取对传感器的访问 307
19.2.3读取传感器数据 308
19.2.4校正传感器 309
19.2.5确定设备的方向 309
19.2.6指北 309
19.3使用Wi-Fi 309
19.4使用蓝牙 311
19.4.1检查可用的蓝牙硬件 312
19.4.2开启蓝牙 312
19.4.3查询配对设备 313
19.4.4搜索设备 313
19.4.5建立设备间连接 313
19.5监视电池 314
小结 316
参考资料和更多信息 316
第五部分 更多Android应用程序设计原则 318
第20章 使用通知 318
20.1向用户发出通知 318
20.2使用状态栏发布通知 319
20.2.1使用NotificationManager服务 319
20.2.2创建一个带有图标的简单文本通知 319
20.2.3使用通知队列 320
20.2.4更新通知 321
20.2.5清除通知 321
20.3让手机震动 322
20.4灯光闪烁 323
20.5发出声响 324
20.6自定义通知 324
20.7设计有用的通知 326
小结 326
参考资料和更多信息 326
第21章 使用服务 327
21.1何时使用服务 327
21.2理解服务的生命周期 328
21.3创建服务 328
21.4控制服务 332
21.5实现远程接口 333
21.6实现可包装(Parcelable)类 335
小结 337
参考资料和更多信息 337
第22章 扩展Android应用程序 338
22.1增强你的应用程序 338
22.2使用应用程序小插件 339
22.2.1创建应用程序小插件 339
22.2.2安装应用程序小插件 345
22.2.3成为小插件 “宿主(Host)” 345
22.3使用动态壁纸(Live Wallpaper) 345
22.3.1创建动态壁纸 346
22.3.2安装动态壁纸 348
22.4成为内容类型处理器(Content Type Handler) 349
22.5确定Intent动作和MIME类型 350
22.5.1实现Activiry处理Intent 350
22.5.2注册Intent过滤器 351
22.6让应用程序的内容可搜索 352
22.6.1在应用程序内启用搜索 353
22.6.2启用全局搜索 358
22.7使用动态文件夹 360
22.7.1创建动态文件夹 360
22.7.2安装动态文件夹 364
小结 365
参考资料和更多信息 365
第23章 用户账户管理与数据同步 366
23.1使用账户管理器管理账户 366
23.2使用备份服务 367
23.2.1选择远程备份服务 368
23.2.2实现备份代理(Agent) 368
23.2.3备份和恢复应用程序数据 371
小结 372
参考资料和更多信息 373
第24章 处理高级用户输入 374
24.1使用文本输入法 374
24.1.1使用软键盘 374
24.1.2使用文本预测和用户词典 376
24.2探索辅助功能(Accessibility)框架 376
24.2.1使用语音识别服务 377
24.2.2使用语音合成(TTS)服务 378
24.3使用手势 380
24.4处理普通单点触控手势 381
24.4.1处理普通多点触控手势 385
24.4.2让手势更自然 388
24.5使用轨迹球 388
24.6处理屏幕方向改变 388
小结 390
参考资料和更多信息 390
第25章 面向不同设备配置和语言 391
25.1最大化应用程序兼容性 391
25.2为兼容性设计用户界面 392
25.2.1支持特定屏幕类型 393
25.2.2使用九格拉伸图像 393
25.2.3使用Working Square原理 395
25.3提供应用程序替代资源 396
25.3.1使用替代资源标识符 396
25.3.2提供用于不同屏幕方向的资源 399
25.3.3在程序中使用替代资源 400
25.3.4高效地组织应用程序资源 400
25.4应用程序国际化 401
25.4.1使用替代资源实现国际化 401
25.4.2在程序中实现本地化支持 404
25.5面向不同设备配置 405
25.5.1支持硬件配置 405
25.5.2面向不同Android SDK版本 405
小结 407
参考资料和更多信息 408
第六部分 对外发布你的Android应用程序 410
第26章 移动软件开发过程 410
26.1移动开发过程概览 410
26.2选择种软件开发方法 410
26.2.1理解“瀑布模型”的危险 411
26.2.2认识迭代式开发的价值 411
26.3整合应用程序需求 411
26.3.1确定工程需求 411
26.3.2为移动应用程序开发用例 413
26.3.3吸纳第三方需求 413
26.3.4管理设备数据库 413
26.4项目风险评估 415
26.4.1确定目标设备 415
26.4.2获取目标设备 416
26.4.3确定应用程序需求的可行性 417
26.4.4理解质量保障的风险 417
26.5编写基本项目文档 418
26.6使用配置管理系统 419
26.7设计移动应用程序 420
26.7.1认识移动设备的局限 420
26.7.2移动应用程序体系结构探索 420
26.7.3可扩展和维护设计 421
26.7.4应用程序交互设计 422
26.8开发移动应用程序 422
26.9测试移动应用程序 422
26.10发布移动应用程序 423
26.11支持和维护移动应用程序 423
小结 424
参考资料和更多信息 424
第27章 设计和开发“防弹”Android 应用程序 425
27.1“防弹”移动应用程序设计最佳实践 425
27.1.1满足移动用户的需求 425
27.1.2为移动设备设计用户界面 426
27.1.3设计稳定、灵敏的移动应用程序 426
27.1.4设计安全的移动应用程序 427
27.1.5在设计移动应用程序时考虑利益的最大化 428
27.1.6在Android应用程序设计时使用第三方标准 428
27.1.7设计便于维护和升级的移动应用程序 429
27.1.8在应用程序设计中使用 Andriod工具 430
27.1.9避免设计时的愚蠢错误 430
27.2“防弹”移动应用程序开发最佳实践 431
27.2.1设计有效的移动开发过程 431
27.2.2提早和经常地测试应用程序可行性 431
27.2.3使用代码标准、代码检查和单元测试以提高代码质量 431
27.2.4处理某单一设备的缺陷 433
27.2.5在应用程序开发中使用Android工具 434
27.2.6避免开发时的愚蠢错误 434
小结 434
参考资料和更多信息 434
第28章 测试Android应用程序 435
28.1设计一个应用程序漏洞跟踪系统 435
28.2管理测试环境 436
28.3尽量全面地进行测试 438
28.4在应用程序测试中使用Android工具 442
28.5避免测试时的愚蠢错误 443
28.6外包测试的责任 443
小结 443
参考资料和更多信息 443
第29章 销售你的Android应用程序 444
29.1选择合适的发布模式 444
29.2为发布而打包你的应用程序 444
29.2.1准备封装你的代码 445
29.2.2为你的应用程序打包并签名 446
29.2.3测试软件包的发布版本 448
29.2.4认证你的Android应用程序 448
29.3发布你的应用程序 448
29.3.1在Android Market上销售你的应用程序 448
29.3.2在自己的服务器上销售你的应用程序 453
29.3.3销售应用程序的其他途径 453
29.3.4保护你的知识产权 454
29.3.5让用户付费 454
小结 455
参考资料和更多信息 455
第七部分 附录 458
附录A Android模拟器快速入门 458
A.1模拟器的目的:虚拟现实 458
A.2使用Android虚拟设备(AVD) 459
A.2.1使用Android SDK和AVD 管理器 460
A.2.2 创建AVD 460
A.3使用指定AVD启动模拟器 463
A.3.1配置模拟器启动项 463
A.3.2启动模拟器运行应用程序 463
A.3.3从Android SDK和AVD管理器中启动模拟器 464
A.4配置模拟器的GPS位置信息 465
A.5在两个模拟器实例之间拨打电话 466
A.6在两个模拟器实例之间发送消息 466
A.7通过控制台与模拟器交互 467
A.7.1使用控制台模拟来电 467
A.7.2使用控制台模拟短消息 468
A.7.3使用控制台发送GPS坐标 468
A.7.4使用控制台监视网络状态 469
A.7.5使用控制台操作电源设置 469
A.7.6 使用其他控制台命令 470
A.8享受模拟器 470
A.9认识模拟器的局限 470
附录B Android DDMS快速入门 471
B.1独立或结合Eclipse使用DDMS 471
B.2熟悉DDMS的关键特性 472
B.3使用进程 472
B.3.1向Android应用程序关联调试器 473
B.3.2监视Android应用程序的线程活动 473
B.3.3触发垃圾回收(GC) 474
B.3.4监视堆活动 474
B.3.5监视内存分配 474
B.3.6终止Android进程 475
B.4使用文件浏览器 475
B.4.1浏览模拟器或设备上的文件 系统 475
B.4.2从模拟器或设备上拷贝文件 476
B.4.3向模拟器或设备拷贝文件 476
B.4.4删除模拟器或设备上的文件 476
B.5使用模拟器控制 476
B.5.1模拟语音来电 476
B.5.2模拟短消息接收 477
B.5.3发送位置坐标 477
B.6使用应用程序日志 477
B.7在模拟器或目标设备上截屏 478
附录C Android调试桥快速入门 479
C.1列表显示连接的设备和模拟器 479
C.2针对特定设备使用ADB命令 479
C.3启动和停止ADB服务进程 480
C.3.1停止ADB服务进程 480
C.3.2启动和检测ADB服务进程 480
C.4发布Shell命令 480
C.4.1发布单条Shell命令 480
C.4.2使用Shell会话 481
C.4.3使用Shell启动和终止模拟器 481
C.5拷贝文件 481
C.5.1向设备或模拟器发送文件 481
C.5.2从设备提取文件 481
C.6安装和卸载Android应用程序 482
C.6.1安装应用程序 482
C.6.2重装应用程序 482
C.6.3卸载应用程序 482
C.7使用LogCat记录日志 483
C.7.1显示所有的日志信息 483
C.7.2在日志数据中包含日期和时间信息 483
C.7.3过滤日志信息 483
C.7.4清除日志 484
C.7.5将日志输出重定向至一个文件 484
C.7.6访问次级日志 485
C.8控制备份服务 485
C.8.1强制备份操作 485
C.8.2强制恢复操作 486
C.8.3将存档数据清空 486
C.9生成Bug报告 486
C.10使用Shell查看SQLite数据库 486
C.10.1在ADB Shell中进行应用程序压力测试 486
C.10.2通过Shell安装和使用自定义二进制文件 489
C.11其他ADB命令探索 490
附录D Eclipse技巧和诀窍 491
D.1构建你的Eclipse工作空间 491
D.1.1集成源代码管理服务 491
D.1.2调整视图中的标签面板 491
D.1.3最大化窗口 492
D.1.4最小化窗口 492
D.1.5显示并排窗口 492
D.1.6显示同一文件的两个部分 492
D.1.7关掉不需要的标签面板 492
D.1.8保持对窗口的控制 492
D.1.9定制日志过滤器 493
D.2编写Java代码 493
D.2.1善用自动补全(Auto-Complete) 493
D.2.2格式化代码 493
D.2.3创建类 494
D.2.4创建方法存根(stub) 494
D.2.5组织导入 494
D.2.6重命名 494
D.2.7重构代码 494
D.2.8整理代码 496
D.2.9提供Javadoc风格的文件 496
D.2.10解决诡异的构建错误 496
附录E SQLite快速入门 497
E.1探索SQLite的常见任务 497
E.2使用sqlite3命令行接口 497
E.2.1运行ADB Shell 498
E.2.2连接数据库 498
E.2.3探索你的数据库 498
E.2.4导入和导出数据库 499
E.2.5在命令行中执行SQL命令 501
E.2.6使用其他的sqlite3命令 502
E.2.7认识SQLite的局限 502
E.3过实例学习:学生成绩数据库 503
E.3.1设计学生成绩数据库的模式 503
E.3.2结合AUTOINCREMENT创建简单表 503
E.3.3向表中插入数据 504
E.3.4使用SELECT查询表数据 504
E.3.5创建具有外键和复合主键的表 505
E.3.6修改和更新表数据 506
E.3.7使用JOIN进行多表查询 506
E.3.8使用计算列 507
E.3.9对计算列使用子查询 508
E.3.10删除表 508