第1篇Java基础 1
第1章 初步认识Java 1
1.1 Java的概念 1
1.1.1 Java是什么 1
1.1.2 Java平台 1
1.1.3 Java的操作系统 2
1.1.4 Java的优点 2
1.2 Java的历史 3
1.2.1 Java的由来 3
1.2.2 Java的发展 4
1.3 如何配置Java开发环境 4
1.3.1 开发工具包 4
1.3.2 运行环境 4
1.3.3 JDK的安装和下载 5
1.3.4 环境变量的设置 6
1.3.5 环境变量的测试 7
1.4 第一个应用程序——HelloWorld 7
1.4.1 HelloWorld程序 7
1.4.2 编译与运行 8
1.4.3 编译和运行命令 9
1.5 小结 12
第2章 基本数据类型 13
2.1 数据类型 13
2.1.1 整型 13
2.1.2 浮点型 16
2.1.3 字符型 19
2.1.4 布尔型 20
2.2 常量 21
2.2.1 标识符 21
2.2.2 常量 22
2.3 变量 24
2.3.1 声明变量及初始化 24
2.3.2 变量的作用域 26
2.3.3 数据类型的自动转换 28
2.4 基本数据类型之间的转换 29
2.4.1 自动转换类型 29
2.4.2 强制转换类型 31
2.5 基本数据类型的对象包装类 34
2.6 注释 35
2.6.1 单行注释 36
2.6.2 区域注释 36
2.6.3 文档注释 36
2.7 小结 38
第3章 运算符详解 39
3.1 算术运算符 39
3.1.1 加法运算符 39
3.1.2 减法运算符 42
3.1.3 乘法运算符 43
3.1.4 除法运算符 43
3.1.5 取余运算符 44
3.1.6 自增、自减运算 44
3.2 关系与逻辑运算 46
3.2.1 等于/不等于运算 46
3.2.2 比较大小运算 47
3.2.3 “与”运算 48
3.2.4 “或”运算 49
3.2.5 “非”运算 50
3.3 三元运算符 50
3.4 位运算 51
3.5 移位运算 53
3.5.1 “〈〈”左移运算 53
3.5.2 “〉〉”右移运算 53
3.5.3 “〉〉〉”无符号右移运算 54
3.5.4 具体实例 55
3.6 赋值运算 55
3.6.1 普通赋值运算 56
3.6.2 运算赋值运算 56
3.6.3 括号及运算符间的优先级关系 57
3.7 java.lang.Math类 57
3.7.1 数学常量 57
3.7.2 常用数学函数方法 58
3.8 小结 60
第4章 流程控制语句 61
4.1 if语句 61
4.1.1 常用语句形式 61
4.1.2 完整语句形式 62
4.2 if语句的嵌套 63
4.3 switch语句 65
4.3.1 switch判断语法 65
4.3.2 判断表达式 67
4.3.3 case表达式 68
4.4 switch实例 69
4.5 while循环语句 71
4.6 do-while循环语句 73
4.7 for循环语句 74
4.7.1 for循环语法 74
4.7.2 for循环实例 76
4.7.3 for实现其他循环 77
4.8 break语句 78
4.9 continue语句 79
4.10 小结 81
第5章 不可或缺的数组 82
5.1 数组的概念 82
5.2 一维数组 83
5.2.1 数组的声明 83
5.2.2 创建数组及初始化 83
5.2.3 数组的结构 84
5.2.4 数组长度及越界 84
5.2.5 数组程序实例 85
5.3 多维数组 86
5.3.1 多维数组的声明 86
5.3.2 创建多维数组 86
5.3.3 多维数组结构及初始化 87
5.4 访问多维数组 88
5.5 数组的相关用法 90
5.5.1 复制数组 90
5.5.2 数组修饰符 92
5.5.3 搜索数组 93
5.5.4 排序数组 95
5.5.5 Arrays类的sort方法 98
5.5.6 数组的比较 99
5.6 小结 100
第2篇 面向对象 101
第6章 对象和类的“二人转” 101
6.1 什么是面向对象 101
6.1.1 面向对象的由来 101
6.1.2 面向过程与面向对象思想的碰撞 102
6.1.3 面向对象的背景及特点 104
6.2 类与对象 104
6.2.1 成员变量 105
6.2.2 成员变量的默认值 107
6.2.3 对象引用变量 108
6.3 类的方法 110
6.4 方法和变量引用 111
6.4.1 调用不存在的方法或成员变量 111
6.4.2 用空引用进行调用 112
6.4.3 数组的空引用问题 113
6.5 局部变量 113
6.5.1 局部变量的作用域 113
6.5.2 局部变量的初始化 114
6.6 变长参数 117
6.7 this对象引用 118
6.8 系统常用类 120
6.8.1 Date类 120
6.8.2 GregorianCalendar类 122
6.8.3 常用系统已有类 124
6.9 小结 125
第7章 Java中的访问控制符 126
7.1 类的访问控制 126
7.1.1 public级别 126
7.1.2 默认访问级别 128
7.2 成员的访问控制 130
7.2.1 公共访问 131
7.2.2 保护访问 132
7.2.3 默认访问 133
7.2.4 私有访问 134
7.2.5 访问级别与数据封装 136
7.3 static关键字 137
7.3.1 静态成员变量 138
7.3.2 静态最终成员变量 139
7.3.3 static方法 140
7.3.4 static代码块 140
7.4 final的变量 141
7.4.1 final成员变量 141
7.4.2 final局部变量 144
7.5 package的使用 146
7.5.1 package的声明与创建 146
7.5.2 引入package资源 147
7.5.3 静态引入package 150
7.6 小结 152
第8章 父与子的继承 153
8.1 什么是继承 153
8.1.1 类和类的关系 153
8.1.2 继承性 156
8.1.3 类的继承 156
8.2 继承与隐藏 157
8.2.1 成员变量的继承 157
8.2.2 成员变量的隐藏 160
8.3 对象 162
8.3.1 对象引用类型 162
8.3.2 强制类型转换 162
8.3.3 对象调用成员 164
8.3.4 对象赋值和比较 165
8.4 方法的继承 167
8.5 方法的重写 168
8.5.1 重写的条件 170
8.5.2 返回类型的规则 171
8.5.3 访问级别 173
8.6 重写与继承的关系 174
8.6.1 静态方法没有重写 175
8.6.2 重写扩展父类功能 177
8.6.3 替代性 178
8.7 方法的重载 178
8.7.1 重载的规则 178
8.7.2 重载方法的匹配 179
8.7.3 重写与重载 183
8.8 final与继承 183
8.8.1 最终的类 183
8.8.2 最终的方法 184
8.9 abstract与继承 185
8.9.1 抽象类 185
8.9.2 抽象方法 186
8.10 继承的多态 189
8.11 小结 191
第9章 接口的世界 192
9.1 接口的概述 192
9.2 接口中的成员变量 193
9.3 接口中的方法 195
9.4 接口引用的使用 198
9.4.1 可以指向的对象类型 198
9.4.2 接口引用间的赋值 198
9.4.3 类引用与接口引用间的赋值 200
9.4.4 接口中方法无法使用的修饰符 201
9.5 接口与抽象类 203
9.6 接口的多态 205
9.7 接口回调 207
9.8 instanceof的使用 208
9.8.1 基本语法使用 208
9.8.2 不允许进行测试的情况 211
9.9 小结 212
第10章 构造器应用 213
10.1 构造器的概念 213
10.2 访问限制修饰符与构造器 213
10.2.1 公有类型构造器 213
10.2.2 默认与保护类型构造器 214
10.2.3 私有类型构造器以及静态工厂方法 215
10.3 构造器与返回类型 216
10.4 创建对象 218
10.5 重载构造器 219
10.6 级联调用的构造器 220
10.6.1 如何调用构造器 220
10.6.2 级联调用 221
10.6.3 默认构造器 223
10.7 自定义构造器 224
10.8 构造器不能继承 225
10.9 调用兄弟构造器 226
10.9.1 调用语法 226
10.9.2 注意事项 227
10.10 单列模式 229
10.11 程序的加载 230
10.12 小结 232
第11章 迷惑的封装类 233
11.1 封装类是什么 233
11.2 字符串与基本数据类型值的转换 235
11.3 封装类与基本数据类型的转换 238
11.4 字符串与封装类的转换 239
11.5 其他常用方法 239
11.5.1 静态工厂方法 239
11.5.2 isNaN()方法 241
11.5.3 equals()方法 242
11.5.4 toString()方法 244
11.5.5 进制转换方法 244
11.6 自动打包/解包 245
11.7 特殊数值计算 247
11.7.1 计算特大整数 248
11.7.2 精确计算浮点型 250
11.8 小结 251
第12章 如何处理异常 252
12.1 异常处理 252
12.1.1 捕获异常的try和catch 252
12.1.2 finally语句 256
12.1.3 try、 catch和finally语句 259
12.2 捕获异常 261
12.3 未捕获异常 263
12.4 再次抛出异常 264
12.4.1 异常的再抛出 264
12.4.2 显性再抛出 265
12.4.3 隐性再抛出 268
12.5 方法重写对抛出异常的限制 269
12.6 自定义异常 271
12.6.1 自己创建异常类 271
12.6.2 使用自定义异常 273
12.6.3 显性再抛出异常的作用 274
12.7 异常的匹配 277
12.8 断言 279
12.8.1 为什么要引入断言 279
12.8.2 断言的语法规则 280
12.8.3 断言与编译 280
12.8.4 启动断言执行代码 281
12.8.5 防止滥用断言 282
12.9 小结 283
第3篇Java常用技术 284
第13章 字符串应用 284
13.1 String类 284
13.2 String对象的内存机制 289
13.3 String内存机制的优势 290
13.4 String对象特殊机制的劣势 294
13.5 StringBuffer类 295
13.5.1 StringBuffer类的优势 295
13.5.2 编写方法链 297
13.5.3 StringBuffer类的重要方法 298
13.6 StringBuilder类 300
13.7 正则表达式 301
13.7.1 正则表达式的语法 302
13.7.2 Pattern与Matcher类的综合实例 304
13.8 在String类中使用正则表达式 308
13.8.1 匹配检查 308
13.8.2 查找替换 310
13.8.3 对字符串进行分析 311
13.9 小结 312
第14章 集合的使用 313
14.1 集合框架的结构 313
14.2 Object类 314
14.2.1 toString方法的重写 314
14.2.2 equals方法 315
14.2.3 hashCode方法 317
14.3 equals与hashCode方法的重写 318
14.4 Ordered与Sorted的接口 322
14.5 列表 323
14.5.1 List接口 323
14.5.2 数组实现列表 324
14.6 向量 326
14.7 链接实现列表 327
14.7.1 依赖性倒置原理 328
14.7.2 将数组转换为列表 329
14.8 集合 330
14.8.1 Set接口 330
14.8.2 HashSet类 331
14.8.3 equals与hashCode方法重写的作用 332
14.8.4 LinkedHashSet类的使用 335
14.9 SortedSet接口与TreeSet类 336
14.10 自定义Sorted集合的类 338
14.10.1 定制SortedSet的排序规则 340
14.10.2 集合的遍历 343
14.10.3 使用for-each循环遍历集合 345
14.11 映射 346
14.11.1 Map接口 346
14.11.2 HashMap类 347
14.11.3 Hashtable类 348
14.11.4 LinkedHashMap类 349
14.12 SortedMap接口与TreeMap类 351
14.13 映射的遍历实例 353
14.14 栈的实现 355
14.14.1 Stack类 355
14.14.2 Deque接口 356
14.14.3 栈计算数学表达式 358
14.15 集合元素的常用操作 361
14.16 小结 368
第15章 内部类应用 369
15.1 非静态内部类 369
15.2 在外部类中创建内部类 369
15.3 在外部类外创建内部类 371
15.4 内部类与外部类之间的成员互访 373
15.4.1 在内部类中访问外部类的成员 373
15.4.2 在外部类中访问内部类的成员 374
15.5 预定义对象引用this 375
15.6 局部内部类 376
15.6.1 定义局部内部类及创建 376
15.6.2 局部变量与局部内部类 377
15.6.3 静态方法中的局部内部类 380
15.7 静态内部类 381
15.8 静态/非静态内部类的区别 383
15.9 匿名内部类 383
15.10 内部类的理解 389
15.11 内部接口 390
15.12 小结 393
第16章 多线程的功力 394
16.1 线程的概念 394
16.2 自定义线程 395
16.2.1 继承Thread类 395
16.2.2 实现Runnable接口 395
16.2.3 两种方式的比较 396
16.3 创建线程对象 396
16.3.1 继承Thread类方式 396
16.3.2 实现Runnable接口方式 397
16.4 启动线程 398
16.5 同时使用多个线程 400
16.6 线程的状态 401
16.7 线程的使用 403
16.7.1 睡眠使用 403
16.7.2 线程的优先级 405
16.7.3 线程的让步 407
16.7.4 守护线程 410
16.8 同步线程 411
16.8.1 使用同步 412
16.8.2 同步调度方法 415
16.9 “生产者—消费者”案例 415
16.10 notify方法 420
16.11 同步语句块 421
16.12 线程的死锁 424
16.13 注意事项 426
16.14 获取运行线程 427
16.15 volatile关键字 428
16.16 小结 429
第17章 高级线程 430
17.1 线程池 430
17.2 固定尺寸线程池 430
17.2.1 自定义尺寸固定线程池实例 431
17.2.2 单任务线程池实例 433
17.2.3 可变尺寸线程池实例 434
17.2.4 延迟线程池的实例 436
17.3 使用自定义线程池 437
17.4 有返回值的线程调用 440
17.4.1 Callable接口 440
17.4.2 Future接口 440
17.4.3 Callable与Future接口的使用实例 441
17.5 封锁资源 442
17.5.1 Lock接口与ReentrantLock类 443
17.5.2 ReentrantLock锁使用实例 443
17.5.3 ReadWriteLock接口与ReentrantReadWriteLock类 446
17.5.4 ReentrantReadWriteLock读/写锁使用实例 447
17.6 信号量 450
17.6.1 Semaphore类 450
17.6.2 Semaphore类使用实例 451
17.7 队列 453
17.8 阻塞栈 459
17.8.1 BlockingDeque接口与LinkedBlockingDeque类 459
17.8.2 LinkedBlockingDeque类的使用实例 460
17.9 线程安全的单变量操作 461
17.9.1 atomic包 461
17.9.2 atomic包中类的使用实例 462
17.10 障碍器 463
17.10.1 CyclicBarrier类 464
17.10.2 CyclicBarrier类的使用实例 464
17.11 小结 466
第18章 内存管理技术 467
18.1 程序中的“垃圾”是什么 467
18.2 “垃圾”收集器 470
18.3 如何收集“垃圾” 472
18.3.1 finalize重写 472
18.3.2 finalize安全问题 474
18.4 最终守护者实例 476
18.5 非线程“垃圾” 477
18.6 线程“垃圾” 479
18.7 三种特殊的引用 481
18.7.1 弱引用实例 481
18.7.2 软引用实例 483
18.7.3 幻影引用实例 485
18.8 小结 485
第19章 数据结构和算法 486
19.1 栈和队列 486
19.1.1 栈的应用 486
19.1.2 队列的应用 489
19.2 三种排序 492
19.2.1 冒泡排序 492
19.2.2 选择排序 495
19.2.3 插入排序 498
19.3 小结 501
第4篇 界面编程 502
第20章 Swing编程 502
20.1 Swing是什么 502
20.2 第一个Swing小程序 502
20.3 JFrame类 504
20.4 事件处理 508
20.4.1 事件处理模型 509
20.4.2 事件层次结构 510
20.5 窗体事件 511
20.6 事件适配器 514
20.7 容器 516
20.8 JPanel类 517
20.9 JLabel类 518
20.10 JButton类 521
20.11 监听器与事件源对应关系的研究 524
20.12 小结 527
第21章 布局流行设计 528
21.1 布局管理器概述 528
21.2 常用布局管理器 528
21.3 FlowLayout流布局的使用 529
21.3.1 流布局简介 529
20.3.2 流布局使用实例 531
21.4 GridLayout网格布局 532
21.4.1 网格布局简介 532
21.4.2 网格布局使用实例 533
21.5 BorderLayout边框布局 535
21.5.1 边框布局简介 536
21.5.2 边框布局使用实例 537
21.6 空布局 539
21.6.1 空布局简介 539
21.6.2 空布局使用实例 540
21.7 CardLayout卡片布局 541
21.7.1 卡片布局简介 541
21.7.2 卡片布局使用实例 543
21.8 BoxLayout箱式布局 545
21.8.1 箱式布局简介 545
21.8.2 Box容器简介 547
21.8.3 Box容器与BoxLayout布局管理器使用实例 548
21.9 弹簧布局 551
21.9.1 弹簧布局简介 551
21.9.2 控件与容器边框之间使用支架 551
21.9.3 控件与容器边框之间使用弹簧 552
21.10 SpringLayout类 554
21.11 SpringLayout.Constraints内部类 555
21.12 Spring类 556
21.13 弹簧布局使用实例 557
21.14 弹簧布局描述法使用实例 558
21.15 小结 561
第22章 各种Swing控件 562
22.1 控件类 562
22.2 文本框与密码框的使用实例 565
22.3 文本区使用实例 569
22.4 开关按钮使用实例 574
22.5 单选按钮与复选框 577
22.5.1 JRadioButton类 577
22.5.2 ButtonGroup类 578
22.5.3 JCheckBox类 578
22.6 ItemEvent事件 579
22.7 ItemEvent事件实例 579
22.8 单选按钮与复选框的综合实例 582
22.9 小结 585
第23章 菜单、工具栏和对话框的使用 586
23.1 菜单 586
23.2 JMenuBar类 587
23.2.1 使用窗体提供的setJMenuBar方法 588
23.2.2 使用传统的add()方法 588
23.3 JMenuItem类 589
23.3.1 为菜单项添加助记符 590
23.3.2 为菜单项设置快捷键 590
23.4 JMenu类 591
23.5 JRadioButtonMenuItem类 593
23.6 JCheckBoxMenuItem类 593
23.7 菜单使用实例 594
23.8 弹出式菜单实例 597
23.9 鼠标事件使用实例 598
23.10 工具栏的开发使用实例 602
23.11 对话框使用实例 606
23.11.1 JDialog类简介 606
23.11.2 JOptionPane类简介 607
23.11.3 JOptionPane对话框使用实例 609
23.12 文件选择器 611
23.13 颜色选择器 614
23.14 文件、颜色对话框使用实例 615
23.15 小结 617
第24章 经典的树状列表 618
24.1 树的专有名词 618
24.2 JTree类 619
24.3 树模型 623
24.4 树的节点 625
24.5 树的路径 628
24.6 树的相关事件 629
24.6.1 TreeSelectionEvent事件 629
24.6.2 TreeExpansionEvent事件 630
24.6.3 TreeModelEvent事件 631
24.7 树节点的绘制 632
24.7.1 TreeCellRenderer接口 632
24.7.2 DefaultTreeCellRenderer类 632
24.7.3 自定义绘制器实例 633
24.8 树状列表的综合实例 635
24.8.1 实例概述 635
24.8.2 搭建界面 636
24.8.3 信息提示功能 638
24.8.4 节点增删功能 640
24.8.5 图标更改功能 643
24.9 小结 646
第25章 表格制造 647
25.1 表格简介 647
25.2 JTable类 648
25.2.1 使用JTable的简单实例 650
25.2.2 表格的数据模型 652
25.2.3 表格模型的使用实例 655
25.3 表格列 657
25.3.1 TableColumnModel接口 658
25.3.2 DefaultTableColumnModel类 659
25.4 表格的相关事件 661
25.4.1 TableColumnModelEvent事件 661
25.4.2 TableModelEvent事件 662
25.4.3 ListSelectionEvent事件简介 662
25.4.4 表格事件使用实例 663
25.5 表格绘制器 665
25.5.1 TableCellRenderer接口 666
25.5.2 DefaultTableCellRenderer类简介 666
25.5.3 自定义表格绘制器 667
25.6 表格编辑器 668
25.6.1 TableCellEditor接口 668
25.6.2 AbstractCellEditor类 668
25.6.3 DefaultCellEditor类 669
25.6.4 为特定的类型指定编辑器 669
25.7 自定义表格编辑器与绘制器的使用实例 670
25.7.1 实例概述 670
25.7.2 界面框架的搭建 670
25.7.3 自定义表格以及表格控件的添加 671
25.7.4 自定义绘制器 673
25.7.5 自定义编辑器的添加 674
25.8 表格中的排序 677
25.8.1 RowSorter类 678
25.8.2 DefaultRowSorter类 678
25.8.3 TableRowSorter类简介 679
25.9 表格中的过滤 680
25.10 表格排序与过滤的使用实例 682
25.10.1 实例概述 682
25.10.2 搭建界面框架 683
25.10.3 添加表格 684
25.10.4 添加排序器 685
25.10.5 添加设置过滤条件的控件 686
25.10.6 表格设置过滤器 688
25.11 小结 691
第26章 图形绘制与动画 692
26.1 绘制简单图形 692
26.1.1 可以充当画布的控件 692
26.1.2 绘图的paint方法 692
26.2 画笔 693
26.2.1 Graphics对象的获取 694
26.2.2 坐标系统 694
26.3 调配颜色 696
26.4 图形绘制的使用实例 697
26.5 绘制文本 698
26.5.1 drawString方法 698
26.5.2 控制字体 698
26.5.3 文本绘制使用实例 700
26.6 Java 2D 701
26.7 线条的粗细控制 702
26.8 渐变颜色 704
26.9 图形变换 706
26.10 异或模式绘图 708
26.11 抗锯齿 709
26.12 动画 710
26.12.1 编写动画的原理 710
26.12.2 重新绘制 710
26.13 Timer类 711
26.14 简单动画使用实例 712
26.15 小结 714
第27章 处理图像 715
27.1 加载与绘制 715
27.2 图标 718
27.2.1 Icon接口 719
27.2.2 ImageIcon类 721
27.3 处理图像编码 723
27.3.1 JPEG编码器 723
27.3.2 GifEncoder编码器 724
27.4 图像抓取 726
27.4.1 createScreenCapture方法 726
27.4.2 抓屏功能使用实例 726
27.5 图像滤镜的开发 730
27.6 图像灰度处理使用实例 731
27.7 RGB色彩通道过滤 734
27.8 RGB色彩通道过滤使用实例 735
27.9 卷积滤镜 738
27.10 卷积滤镜使用实例 740
27.11 小结 743
第5篇 高级技术 744
第28章 网络编程的世界 744
28.1 网络编程简介 744
28.2 网络传输协议 745
28.3 Internet地址(InetAddress类) 746
28.3.1 创建InetAddress对象的方法 746
28.3.2 InetAddress的其他方法 746
28.4 Socket(套接字) 747
28.5 Socket使用实例 748
28.5.1 客户端 748
28.5.2 服务器端 749
28.5.3 程序运行结果 751
28.6 UDP协议网络通信(Datagram) 752
28.7 面向无连接的使用实例 752
28.7.1 发送端程序示例 752
28.7.2 接收端程序示例 754
28.7.3 程序运行结果 755
28.8 URL的网络编程 756
28.8.1 URL类与URL的解析 756
28.8.2 URLConnection类 757
28.8.3 获取远程图像 758
28.8.4 获取远程文档 759
28.8.5 获取远程音频 761
28.9 小结 762
第29章 你来我往的I/O流 763
29.1 流的简介 763
29.2 文件File 764
29.2.1 文件或目录的生成 764
29.2.2 文件名的处理 764
29.2.3 文件属性测试 765
29.2.4 普通文件信息和工具 765
29.2.5 目录操作 765
29.3 File类使用实例 765
29.4 RandomAccessFile类 767
29.4.1 构造方法 767
29.4.2 文件指针的操作 767
29.5 RandomAccessFile使用实例 767
29.6 字节流InputStream、OutputStream 770
29.6.1 输入、输出流 770
29.6.2 文件输入、输出流 772
29.6.3 缓冲输入、输出流 773
29.6.4 数据输入、输出流 775
29.6.5 对象输入、输出流 776
29.7 字符流Reader、 Writer 780
29.7.1 字符读、写流 780
29.7.2 输入、输出流 781
29.7.3 文件读、写字符流 782
29.7.4 字符缓冲区读、写流 783
29.8 小结 784
第30章 JDBC数据库应用技术 785
30.1 数据库应用架构模型 785
30.1.1 两层结构模型 785
30.1.2 三层结构模型 786
30.2 JDBC的层次结构 787
30.3 JDBC编程入门 788
30.3.1 数据库的创建 788
30.3.2 JDBC-ODBC连接桥 789
30.3.3 加载JDBC驱动 792
30.4 建立数据库连接 793
30.5 SQL命令 794
30.6 结果集 795
30.7 连接数据库使用实例 796
30.8 预编译 797
30.9 访问其他数据库 800
30.9.1 MySQL数据库的访问 800
30.9.2 Oracle数据库的访问 802
30.10 事务 804
30.10.1 编写事务 804
30.10.2 批处理 807
30.11 可滚动结果集 809
30.12 可滚动与不可滚动结果集的比较 810
30.13 控制游标移动 810
30.14 元数据 813
30.15 数据库综合实例 817
30.16 小结 834