教材学习内容总结

学习目标

  1. 了解JDBC架构

  2. 掌握JDBC架构

  3. 掌握反射与ClassLoader

  4. 了解自定义泛型和自定义枚举

  5. 会使用标准注解

第16章 整合数据库

16.1 JDBC入门

(一)JDBC简介

JDBC全名Java DataBase Connectivity,是联机数据库的标准规范。具体而言,它定义一组标准类与接口,应用程序需要联机数据库时调用这组标准API,而标准API中的接口会由数据库厂商操作,通常称为JDBC驱动程序(Driver)。应用程序调用JDBC标准API如下:

JDBC标准分为两个部分:JDBC应用程序开发者接口以及JDBC驱动程序开发者接口。如果应用程序需要联机数据库,就是调用JDBC应用程序开发者接口,相关API主要在java.sql与javax.sql两个包中。JDBC驱动程序开发者接口是数据库厂商操作驱动程序时的规范,一般开发者并不用了解。JDBC应用程序开发者接口如下所示:

厂商在操作JDBC驱动程序时,依操作方式可将驱动程序分为4种类型:

  1. JDBC-ODBC Bridge Driver
    ODBC是由Microsoft主导的数据库连接标准;JDBC-ODBC Bridge Driver驱动程序会将JDBC调用转换为对ODBC驱动程序的调用,由ODBC驱动程序操作数据库。

  2. Native API Driver
    这个类型的驱动程序会以原生方式,调用数据库提供的原生链接库,所以驱动程序本身与平台相依,没有达到JDBC驱动程序的目标:跨平台;由于直接调用数据库原生API,因此在速度上,有机会成为4种类型中最快的驱动程序。

  3. JDBC-Net Driver
    JDBC驱动程序会将JDBC方法调用转换为特定的网络协议调用;可以使用纯粹的Java技术来实现,从而实现跨平台;由于通过中介服务器转换,速度较慢,获得架构弹性是使用这种类型驱动程序的目的。

  4. Native Protocal Driver
    驱动程序可以使用纯粹Java技术实现,因此这种类型驱动程序可以跨平台;是最常见的驱动程序类型。

(二)连接数据库

为了要连接数据库系统,必须要有厂商操作的JDBC驱动程序,必须在CLASSPATH中设定驱动程序JAR文档。基本数据库操作相关的JDBC接口或类是位于java.sql包中,要取得数据库联机,必须有几个动作:

  1. 注册Driver操作对象

  2. 取得Connection操作对象

  3. 关闭Connection操作对象

16.2 JDBC进阶

交易的四个基本要求是原子性、一致性、隔离行为与持续性。

  • 原子性:一个交易是一个单元工作,可能包含多个步骤,这些步骤必须全部执行成功,若一个失败,则整个交易失败。
  • 一致性:交易作用的数据集合在交易前后必须一致。
  • 隔离行为:交易与交易之间,必须互不干扰。
  • 持续性:交易一旦成功,所有变更必须保存下来。

当多个交易并行时,可能引发的数据不一致问题:
更新遗失:基本上就是指某个交易对字段进行更新的信息,因另一个交易的介入而遗失更新效力。
脏读:两个交易同时进行时,其中一个交易更新数据但未确认,另一个交易就读取数据,就有可能发生脏读问题。
无法重复的读取:某个交易两次读取同一字段的数据并不一致。
幻读:同一交易期间,读取到的数据笔数不一致。

JDBC定义了java.sql.RowSet接口,用以代表数据的列集合,这里的数据并不一定是数据库中的数据,可以是电子表格数据、XML数据或任何具有列集合概念的数据源。RowSet定义了列集合基本行为,其下有JdbcRowSet、CachedRowSet、FilteredRowSet、JoinRowSet、WebRowSet五个标准列集合子接口,定义在javax.sql.rowset包中。

第17章 反射与类加载器

17.1 运用反射

Java真正需要某个类时才会载入对应的.class文档,而非在程序启动时就加载所有类。java.lang.Class的实例代表Java应用程序运行时载入的.class文档,类、接口、Enum等编译后,都会生成.class文档。Class类没有公开(public)构造函数,实例是由JVM自动产生,可以通过Object的getClass()方法,或者是透过.class常量取得每个对象对应的Class对象。

可以使用Class.forName()方法实现动态加载类,可用字符串指定类名称来获得类相关信息。Class.forName()方法在找不到指定类时会抛出ClassNotFoundException异常。

Class对象加载的.class文档,取得Class对象后,就可以取得.class文档中记载的信息,例如包、构造函数、方法成员等类型。每个类型都会有对应的类型,如果事先不知道类名称,可以利用Class.forName()动态加载.class文档,取得Class对象之后,利用其newInstance()方法建立类实例。

17.2 了解类加载器

类加载器都继承自抽象类java.lang.ClassLoader,每个.class文档加载后,都会有个Class实例来代表。可以由Class的getClassLoader()取得加载对应.class文档的ClassLoader实例,而ClassLoader的getParent()方法可以取得父ClassLoader实例。

由同一类加载器载入的.class文档,只会有一个Class实例。如果同一.class文档由两个不同的类加载器载入,则会有两份不同的Class实例。

第18章 自定义泛型、枚举与注释

18.1 自定义泛型

泛型,即“参数化类型”。泛型就是将类型由原来的具体的类型参数化,此时类型也定义成参数形式,然后在调用时传入具体的类型。

泛型也可以仅定义在方法上,可在方法返回类型前使用定义泛型,之后就可以使用T来定义返回类型、参数类型,或在方法内声明变量、转换类型等,在定义泛型时,使用extends限制指定T实际类型时,必须是某类的子类。

18.2 自定义枚举

Enum是个抽象类,无法直接实例化,它操作了Comparable接口,在compareTo()方法中,主要是针对ordinal成员比较。定义enum时可以自定义构造函数,条件是不得为公开(public)构造函数,也不可以在构造函数中调用super(),定义enum时有个特定值类本体语法,可用于操作接口或重新定义父类方法。

18.3 注释

@Override在原始码中提供编译程序的信息是,被注释的方法必须是父类或接口中已定义的方法,请编译程序协助是否真的为重新定义方法。

教材学习中的问题和解决过程

1.在教材548页中捕捉ClassNotFoundExceotion异常出现错误,如下图:

原因是程序中没有语句出现ClassNotFoundExceotion异常,所以catch错误,只能throws异常。

代码调试中的问题和解决过程

1.在连接数据库时出现ClassNotFoundException问题:

出现这个问题的原因是没有导入对应的library,所以导入对应的mysql-connector-java-5.1.40-bin.jar文件。之后还会出现新的错误,原因是没有安装对应的数据库软件,安装软件后就没有错误了。

本周代码托管截图

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第二周 200/400 1/3 12/52
预备作业 0/400 1/4 15/67
第三周 500/900 1/5 10/77
第四周 500/1500 1/6 15/92
第五周 500/2000 1/7 20/112
第六周 500/2500 2/9 20/132
第七周 500/3000 2/11 30/162
第八周 500/3500 2/13 20/182
第九周 700/4200 2/15 30/212

20145226夏艺华 《Java程序设计》第9周学习总结的更多相关文章

  1. 20145226夏艺华 JAVA预备作业1

    博客阅读总结 关于师生关系: 学生和老师之间我觉得关系时多元化的,不能拘泥于单独的一种关系:灌输与被灌输,教授与被教授--我认为,在不同的课程阶段,师生之间的关系都可以发生变化.前期的老师更像是一个指 ...

  2. 20145226夏艺华 《Java程序设计》实验报告四

    实验四 Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试 了解Android组件.布局管理器的使用 掌握Android中事件处理机制 Andro ...

  3. 20145226夏艺华 网络对抗技术 EXP9 web安全基础实践

    20145226夏艺华 网络对抗技术 EXP9 web安全基础实践 !!!免考项目:wannacry病毒分析+防护 一.实验后回答问题 SQL注入攻击原理,如何防御 攻击原理 "SQL注入& ...

  4. 20145226夏艺华 网络对抗技术EXP8 WEB基础实践

    20145226夏艺华 网络对抗技术EXP8 WEB基础实践 实验问题回答 1.什么是表单? 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CG ...

  5. 20145226夏艺华 网络对抗技术 EXP7 网络欺诈技术防范

    20145226夏艺华 网络对抗技术 EXP7 网络欺诈技术防范 实践内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. · 简单应用SET工具建立冒名网站 · ett ...

  6. 20145226夏艺华 Exp6 信息搜集与漏洞扫描

    20145226夏艺华 Exp6 信息搜集与漏洞扫描 基础问题回答 哪些组织负责DNS,IP的管理? · 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和IP地址管理 ...

  7. 20145226夏艺华 网络对抗技术EXP4 恶意代码分析

    20145226夏艺华 网络对抗技术EXP4 恶意代码分析(未完成版) 回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作 ...

  8. 20145226夏艺华《网络对抗》第一次实验拓展:shellcode注入+return-to-libc

    20145226夏艺华<网络对抗>第一次实验拓展:shellcode注入+return-to-libc shellcode注入实践 编写shellcode 编写shellcode已经在之前 ...

  9. 20155312 2016-2017-2 《Java程序设计》第九周学习总结

    20155312 2016-2017-2 <Java程序设计>第九周学习总结 课堂内容总结 两个类有公用的东西放在父类里. 面向对象的三要素 封装 继承 多态:用父类声明引用,子类生成对象 ...

  10. 20155213 2016-2017-2 《Java程序设计》第九周学习总结

    20155213 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 JDBC(Java DataBase Connectivity)即java数据库连 ...

随机推荐

  1. scala基础入门

    1.scala当中申明值和变量 scala当中的变量申明可以使用两种方式,第一种使用val来申明变量.第二种使用var来申明变量. 申明变量语法 val/var 变量名 [:变量类型] = 变量值 其 ...

  2. Java虚拟机10:Client模式和Server模式的区别

    部分商用虚拟机中,Java程序最初是通过解释器对.class文件进行解释执行的,当虚拟机发现某个方法或代码块运行地特别频繁的时候,就会把这些代码认定为热点代码Hot Spot Code(这也是我们使用 ...

  3. maven的pom.xml文件报错问题

    第一次用 Spring Starter Project 创建一个Spring应用时,POM 文件报错: Project build error: Non-resolvable parent POM f ...

  4. virtualbox+vagrant学习-5-Boxes-1-简介

    Boxes boxes是vagrant环境的包格式.在vagrant支持的任何平台上,任何人都可以使用一个box来创建一个相同的工作环境.vagrant box实用程序提供了管理boxes的所有功能. ...

  5. String 的字面量、常量池、构造函数和intern()函数

    一.内存中的 String 对象 Java 的堆和栈 对于基本数据类型变量和对象的引用,也就是局部变量表属于栈内存: 而通过 new 关键字和 constructor 创建的对象存放在堆内存: 直接的 ...

  6. 利用matplotlib绘画出二特征的散点图

    实例的所有数据来源于吴恩达教授的机器学习数据,特此感谢.数据源可以前往course下载. 本文主要目地在于绘画二维的散点图,至于scatter的用法可以参见我之前的博客. import pandas ...

  7. VB.NET &amp; Visual Basic

    当看到VB.NET者这本书籍的时候,翻开文件夹唯一的感受就是:这不和VB一样吗?究竟有什么差别呢? 1)版本号: 又一次回想VB,能够发现事实上他是Microsoft退出的基于Windows操作系统环 ...

  8. HTML基础代码

    <!--注释内容,在浏览时不会显示--><!DOCTYPE HTML> <!--声明文档类型--><html> <!--头部内容:--> & ...

  9. VMware虚拟机安装Centos7图文教程

    CentOS 是一个工业标准的 Linux 发行版,是红帽企业版 Linux 的衍生版本.你安装完后马上就可以使用,但是为了更好地使用你的系统,你需要进行一些升级.安装新的软件包.配置特定服务和应用程 ...

  10. Oracle高级函数篇之递归查询start with connect by prior简单用法

    路飞:" 把原来CSDN的博客转移到博客园咯!" 前段时间,自己负责的任务中刚好涉及到了组织关系的业务需求,自己用了oracle递归查询.下面简单来举个例子.在工作中我们经常会遇到 ...