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

教材学习内容总结

  • JDBC简介

    • 厂商在实现JDBC驱动程序时,依方式可将驱动程序分为四种类型:

      1. JDBC-ODBC Bridge Driver

      将JDBC调用转换为ODBC调用

      1. Native API Driver

      将JDBC调用转换为原生链接库中的相关API调用。其特点是与平台相依,是四种类型中最快的驱动程序

      1. JDBC-Net Driver

      将JDBC调用转换为特定的网络协议调用,目的是与远程数据库特定的中间服务器或组件进行协议操作,而中间件或组建再真正与数据库进行操作。特点:弹性最高

      1. Native Protocol Driver

      将JDBC调用转换为特定的网络协议,所以驱动驱动程序可以使用Java技术来实现,遗传你这类型的驱动程序可以跨平台,在性能上也有不错的表现。在不需要如第3种驱动类型的灵活性时,通常是会使用这类型驱动程序,该类型时最常见的驱动程序类型

    • 连接数据库

      1. 为了要连接数据库系统,必须要有厂商操作的IDBC驱动程序,必须在CLASSPATH中设定驱动程序JAR文档

      2. 基本数据库操作相关的JDBC接口或类是位与java.sq1包中。要取得数据库联机,必有几个动作:注册Driver操作对象、取得Connection操作对象、关闭Connection操作对象

      3. 注册Driver操作对象

      操作Driver接口的对象是JDBC进行数据库存取的起点,管理Driver操作对象的类是java.sq1.DriverManger。基本上,必须要调用其静态方法registerDriver()进行注册

      应用程序可能同时联机多个厂商的数据库,所以DriverManager也可以注册多个驱动程序实例

      1. 取得Connetion操作对象

      Connection接口的操作对象是数据库联机代表对象,要取得Connection操作对象要通过DriverManger的getConnection()方法

      除了基本的用户名称、密码之外,还必须提供JDBC URL,其定义了连接数据库时的协议、子协议、数据源识别

      1. 关闭Connetion操作对象
  • JDBC进阶

    • 在ResultSet时,默认可以使用next()移动数据光标至下一笔数据,而后使用getXXX()方法来取得数据

      在数据光标移动的API上,可以使用absolute()、afterLast()、beforeFirst()、first()、last()进行绝对位置移动,使用relative()、previous()、next()进行相对位置移动,移动成功返回true。可使用isAfterLast()、isBeforeFirst()、isFrist()、isLast()判断当前位置。
    • 交易的四个基本要求
      • 原子性、一致性、隔离行为与持续性
      • 更新遗失:基本上就是指某个交易对字段进行更新的信息,因另一个交易的介入而遗失更新效力。
      • 脏读:两个交易同时进行时,其中一个交易更新数据但未确认,另一个交易就读取数据,就有可能发生脏读问题。
      • 无法重复的读取:某个交易两次读取同一字段的数据并不一致。
      • 幻读:同一交易期间,读取到的数据笔数不一致。
  • 批次更新

  • 每一次执行executeUpdate(),其实都会向数据库发送一次SQL,如果大量更新的SQL有一万笔,就等于通过网络进行了一万次的信息传送,网络传送信息实际上必须打开I/O、进行路由等动作。所以最好就是所有收集的SQL,最后会串为一句SQL,然后传送给数据库,既然是批次更新,顾名思义,就是仅用在更新上,所以批次更新的限制是,SQL不能是SELECT,否则会抛出异常。

  • Blob与Clob

    • JDBC中提供了java.sql.Blob与java.sql.Clob两个类分别代表BLOB与CLOB数据
    • 通过PreparedStatement的setBlob()来设定Blob对象,读取数据时,可以通过ResultSet的getBlob()取得Blob对象
  • 交易

    • 交易的4个基本要求是原子性、一致性、隔离行为与持续性(ACID)
    • JDBC可以操作可以操作Connection的setAutoCommit()方法,给它false自变量,提示数据库开始交易
    • 下达一连串的SQL语句后,自行调用Connection的commit(),提示数据库确认操作,中间发生错误,调用rollback(),提示数据库撤销所有的执行
    • 隔离行为的支持上,JDBC可以通过Connection的getTransactionIsolation()取得数据库目前的隔离行为设定,通过setTransactionIsolation()可提示数据库设定指定的隔离行为,可设定常数是定义在Connection上
    • 对交易不设定隔离行为TRANSACTION_NONE
    • 更新遗失,设定隔离层为“可读取未确认”TRANSACTION_UNCOMMITTED
    • 脏读,设定隔离层为“可读取确认”TRANSACTION_COMMITTED
    • 无法重复的读取,设定隔离层为“可重复读取”TRANSACTION_REPEATABLE_READ
    • 幻读,设定隔离层为“可循序”TRANSACTION_SERIALIZABLE
  • metadata

    • 诠释数据的数据
    • JDBC,通过Connection的getMetaData()方法取得DatabasemetaData对象,通过该对象提供的方法取得数据库整体信息,Result表示查询到的数据
  • RowSet

    • JDBC定义了javax.sql.RowSet接口,用以代表数据的列集合
    • RowSet定义了列列集合基本行为,其下有JdbcRowSet(联机式的)、CachedRowSet(脱机式的)、FilteredRowSet、JoinRowSet与WebRowSet五个标准列操作子接口,定义在javax.sql.rowset

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

  • 问题1:幻读与无法重复的读取,隔离层级“可重复读取”、“可循序”是什么意思
  • 问题1解决方案:“可重复读取”针对两次交易读取数据不一致,同一交易读取数据必须相同的情况,“可循序”针对同一交易期间读取到的数据不一致,在数据不一致时,交易可以照顺序逐一进行

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

  • 问题1:对以下代码不理解
import static java.lang.System.out;
import java.sql.*; public class ConnectionDemo {
public static void main(String[] args)
throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
String jdbcUrl = "jdbc:mysql://localhost:3306/demo";
String user = "root";
String passwd = "openhome";
try(Connection conn =
DriverManager.getConnection(jdbcUrl, user, passwd)) {
out.printf("已%s资源库连线%n",
conn.isClosed() ? "关闭" : "开放");
}
}
}
  • 问题1解决方案:有待解决

代码托管

上周考试错题总结

  • 错题1:(多选题)正则表达式”(‘|”)(.*?)\1”匹配 “'Hello',"World””的结果是()

    A .不匹配

    B .'Hello'

    C ."World"

    D .'Hello',"World"

  • 原因:对中间的逗号理解错误

  • 理解情况:正确答案是BC,反向引用 \1 代表第一个()中的匹配内容

  • 错题2:(多选题)正则表达式 zo* 匹配()

    A .z

    B .zo

    C .zoo

    D .zooooooooooooooooooooooooooo

  • 原因:对*可以是0次理解有一定偏差,因此只选了AB

  • 理解情况:正确答案是全选,因为* 可以是0次,CD选项均属于出现0次

  • 错题3:(单选题|)正则表达式“r.t”匹配字符串“rat”的Java 代码表达式是()

    A ."rat".matcher("r.t")

    B ."r.t".matcher("rat")

    C .Pattern.compile("rat").matcher("r.t")

    D .Pattern.compile("r.t").matcher("rat")

  • 理解情况:正确答案是D,我选了C。在课本p491有详细说明,看书的时候不够认真

  • 错题4:(单选题)Java 日志 API 中,哪个类别负责实际输出?

    A .Logger

    B .Handler

    C .Filter

    D .Formatter

  • 理解情况:正确答案是B,在Java日志API中,Handler类是负责实际输出的

  • 错题5:(单选题)对于下面的代码段,说法正确的是?

int[] array = new int[25];
array[25] = 2;
A .整数2会赋给数组中最后一个元素

B .整数25会赋给数组中的第2个索引

C .整数25会赋给数组中的第3个元素

D .代码会产生编译时错误

E .代码会产生运行时错误
  • 理解情况:正确答案是E,这个代码在编译的时候是不会产生错误的,但在运行时期会抛出ArrayIndexOutOfBoundsException错误,因为最后一个数组指引是24,因此这次产生run-time错误

结对及互评

点评过的同学博客和代码

其他(感悟、思考等,可选)

这周过后按照老师的计划整本书的内容基本上都过了一遍,但是自己觉得自己学得并不扎实,有很多知识点都有似是而非的感觉,知道那个东西是什么,但是实际在敲代码的时候就不知道该怎么使用,而且在尝试使用的时候还遇到了很多错误不知道怎么解决,在前期的Java学习中有C的基础感觉还行,但是在后期的学习中,有许多新的知识消化得不好,因此在后期实际编程的过程中,这些方面还要多多加强。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 1/ 20/20 对IDEA、git、JDK、JVM有了更多的了解,面对学习过程中遇到的困难学会自己主动地寻找办法去解决
第二周 1/2 18/38 掌握了Java中的基本运算符和基本语句
第三周 1/3 22/60 对面向对象、封装、构造函数等重要知识点有了初步理解,学会自主学习,遇到困难的时候从多方面寻找资料以求答案
第四周 1/4 22/60 对继承和多态了一定程度的理解,并学会使用多态来提高代码的复用性
第五周 706/2639 1/5 25/85 对异常以及集合框架的学习
第六周 735/3194 1/6 28/113 对IO流,多线程以及并行API的学习
第七周 428/3474 1/7 18/131 对Date的学习
第八周 351/3825 1/8 20/151 对日志API以及规则表达式的学习
第九周 1172/ 4997 1/9 22/173 JDBC与数据库

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:18小时

  • 实际学习时间:22小时

  • 改进情况:注重实践

(有空多看看现代软件工程 课件

软件工程师能力自我评价表
)

参考资料

20155321 2016-2017-2 《Java程序设计》第九周学习总结的更多相关文章

  1. 201521123027 <java程序设计>第九周学习总结

    1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2.书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什 ...

  2. 20145220java程序设计第九周学习总结

    20145220java程序设计第九周学习总结 教材学习内容总结 JBDC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商对接口直接操作,开发人员无须接触底层数据可驱动程序的差异 ...

  3. 201771010134杨其菊《面向对象程序设计java》第九周学习总结

                                                                      第九周学习总结 第一部分:理论知识 异常.断言和调试.日志 1.捕获 ...

  4. 201521044152<java程序设计>第一周学习总结

    本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...

  5. 20145304 刘钦令 Java程序设计第二周学习总结

    20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...

  6. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  7. 201621123007 Java程序设计第一周 学习总结

    第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...

  8. 马凯军201771010116《面向对象与程序设计Java》第九周学习总结

    一.理论知识部分 异常.日志.断言和调试 1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. 2.Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. 3 ...

  9. 201521123063 JAVA程序设计 第二周学习总结

    1.本周学习重点(2.27-3.5) java中的数组 以二维数组为例,数组名为scores,则 (1)先声明数组 int[][] scores;或int scores[][];或int[] scor ...

  10. 《Java》第九周学习总结

    下载mysql 选择mysql的管理软件 idea可以直接连接 然后用库运行程序,但是没有截图,,因为想在navicat上试试,可惜速度太慢了 打开idea又很慢,所以明天再更新

随机推荐

  1. 微软报表A4纸大小规则

    总页宽:21cm,总页高:29.7cm 上下左右边距均为2.5cm 页眉页脚均为0.75cm 正文内容宽:16cm,高23.2cm

  2. solrCloud相关的管理命令

    创建新集群(创建一个索引库) http://192.168.72.141:8080/solr/admin/collections?action=CREATE&name=collection2& ...

  3. Mysql group by top N的问题

    在日常工作中,经常要查询分组的前几名.oracle中可以通过row_num来支持查询,mysql暂时不支持row_num.那么如何来完成这个需求呢? 例如: 表中的数据: +--------+---- ...

  4. Android如何自学----转自lavor从segmentfault

    如何自学Android 1. Java知识储备 本知识点不做重点讲解: 对于有基础的同学推荐看<Java编程思想>,巩固基础,查漏补全,了解并熟悉更多细节知识点. 对于没有基础的同学推荐看 ...

  5. 基于 Docker 搭建 MySQL 主从复制

    本篇博文相对简单,因为是初次使用Docker,MySQL的主从复制之前也在Centos环境下搭建过,但是也忘的也差不多了,因此本次尝试在Docker中搭建. 根据网上教程走还是踩了一些坑,不过所幸最终 ...

  6. leetcode 121. Best Time to Buy and Sell Stock 、122.Best Time to Buy and Sell Stock II 、309. Best Time to Buy and Sell Stock with Cooldown

    121. Best Time to Buy and Sell Stock 题目的要求是只买卖一次,买的价格越低,卖的价格越高,肯定收益就越大 遍历整个数组,维护一个当前位置之前最低的买入价格,然后每次 ...

  7. iOS的AssetsLibrary框架访问所有相片

    该框架下有几个类,ALAssetsLibrary,ALAssetsGroup,ALAsset,ALAssetsFilter,ALAssetRepresentation. ALAssetsLibrary ...

  8. MySQL导出表结构方法

    方法一: 以下用的是Navicat Premium,可以换成任意图形化客户端 SELECT COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHAR ...

  9. HTML小记

    1.页面内跳转 当<a>元素用于页面内的锚点跳转时,应该先为该页面设置一些锚点,而定义锚点有两种办法: 通过<a>元素的name属性来定义,如:<a name=" ...

  10. 有关dubbo面试的那些事儿

    dubbo是什么 dubbo是一个分布式框架,远程服务调用的分布式框架,其核心部分包含: 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集 ...