教材学习内容总结

学习目标

  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. BT提权wind2008R2

    昨天中午打开电脑,对着菜刀在那翻啊翻,找到一个64bit的os. 因为这个ip不在曾经提权过的主机列表里面,心想这应该是个低权限的网站,顺手打个whoami试试,结果给我返回了"nt aut ...

  2. Vue-Router基础使用

    作为Vue生态系统里面的一大成员,Vue-Router主要负责vue中的页面路由及其传值问题. 1.基本使用–添加路由 基本使用主要包括四个部分,页面引入.配置路由数组.实例化路由.把实例化的路由加入 ...

  3. 浅谈 JavaScript 中的继承模式

    最近在读一本设计模式的书,书中的开头部分就讲了一下 JavaScript 中的继承,阅读之后写下了这篇博客作为笔记.毕竟好记性不如烂笔头. JavaScript 是一门面向对象的语言,但是 ES6 之 ...

  4. ThinkPhp表单令牌和字段映射

    开启表单令牌: 先在配置文件目录下定义tags.php 在里面添加 return array( 'view_filter' =>array('Behavior\TokenBuildBehavio ...

  5. Boost asio基本概念

    asio库基于操作系统提供的异步机制,采用前摄器模式(Proactor)实现可移植的异步(或同步)IO操作,不需要使用多线程和锁,有效避免多线程编程带来的诸多有害副作用(如竞争,死锁). asio封装 ...

  6. winrar 弹窗处理

    https://www.rarlab.com/ 1.下载英文版 2.把下面这段code文本复制到一个新建的记事本txt文档中,然后另存为rarreg.key文件,注意后缀名.txt改为.key才行. ...

  7. 安装Windows7步骤

    我初次装Linux系统的时候,查过一些资料,然后也有网友教过我,这里做一个总结,和大家分享一下(U盘安装).       事实上我们平时电脑开机的时候,是有个启动顺序的,他并非直接进入我们的操作系统, ...

  8. CentOS7.5最小化安装之后的配置

    我是最小化安装的,安装了之后很多基本使用配置没有,接下来要做一些配置,如网络之类的,使系统可用. 1.使命令分页显示(1页显示不不下,又不能上翻页) xxx | more 2.查看系统安装了哪些软件包 ...

  9. 改变eclipse左侧目录数字体大小

    不可在eclipse中修改,只能通过修改配置文件来实现. 找到eclipse的安装位置(或解压路径): eclipse\plugins\org.eclipse.ui.themes_1.2.100.v2 ...

  10. 20181031noip模拟赛T1

    思路: 我们会发现不合法的位置只有两种情况 要么在前半边,要么在后半边 那么,我们将序列劈两次 使两次的长度分别为: (n为偶数时要特判一下,因为根本不可能) (n/2),(n/2+1) (n/2+1 ...