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

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

教材学习内容总结

JDBC入门

1.JDBC简介html

JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操做,开发人员无须接触底层数据库驱动程序的差别性,数据库自己是个独立运行的应用程序,你撰写的应用程序是利用通讯协议对数据库进行指令交换,以进行数据的增删查找。一般你的应用程序会利用一组专门与数据库进行通讯协议的连接库,以简化与数据库沟通时的程序撰写。有时候,更换数据库的需求并非没有,应用程序跨平台也是常常的需求,JDBC基本上就是用来解决这些问题的。JDBC是Java联机数据库的标准规范。具体而言,它定义了一组标准类与接口,应用程序须要联机数据库时调用这组标准API,而标准API中的接口由数据库厂商操做,一般称为JDBC驱动程序。JDBC标准主要分为两个部分:JDBC应用程序开发者接口以及JDBC驱动程序开发者接口。java

2.链接数据库git

为了要链接数据库系统,必需要有厂商操做的JDBC驱动程序,必须在CLASSPATH中设定驱动程序JAR文档。正则表达式

3.使用Statement、ResultSetsql

Connection是数据库链接的表明对象,接下来要执行SQL的话,必须取得java.sql.Statement操做对象,它是SQL描述的表明对象。Statementexecute()能够用来执行SQL,并能够测试SQL是执行查询或更新,返回true表示SQL执行将返回ResultSet做为查询结果。视需求而定,Statement或者ResultSet在不使用时,可使用close()将之关闭,以释放相关资源。Statement关闭时,所关联的ResultSet也会自动关闭。数据库

4.使用PreparedStatementCallableStatement
数组

若是有些操做只是SQL语句当中某些参数会有所不一样,其他的SQL子句皆相同,则可使用java.sql.PreparedStatement。可使用ConnectionPreparedStatement()方法创建好预先编译的SQL语句,当中参数会变更的部分,先指定“?”这个占位字符。在JDBC里要表示日期,是使用java.sql.Date,其日期格式是“年、月、日”,要表示时间的话则是使用java.sql.Time,其时间格式为“时、分、秒”,若是要表示“时、分、秒、微秒”的格式,你可使用java.sql.Timestamp网络

2、JDBC进阶架构

1.使用ResultSet卷动、更新数据ide

ResultSet时,默承认以使用next()移动数据光标至下一笔数据,然后使用getXXX()方法来取得数据。结果集类型能够指定3种设定:ResultSet.TYPEFORWARDONLY(默认)、ResultSet.TYPESCROLLINSENSITIVEResultSet.TYPESCROLLSENSITIVE。更新设定能够有两种指定:ResultSet.CONCURREADONLY(默认)、ResultSet.CONCUR_UPDATABLE。若是要使用ResultSet进行数据修改,则有些条件限制:必须选取单一表格、必须选取主键、必须选取全部NOT NULL的值。

2.批次更新

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

3.Blob与Clob

若是要将文档写入数据库,能够在数据库表格字段上使用BLOB或CLOB数据类型,BLOB用于存储大量二进制数据,像是图档、影音档等,CLOB用于存储大量的文字数据。

4.交易简介

交易的四个基本要求是原子性、一致性、隔离行为与持续性。当多个交易并行时,可能引起的数据不一致问题有哪些呢?(1)更新遗失:基本上就是指某个交易对字段进行更新的信息,因另外一个交易的介入而遗失更新效力。(2)脏读:两个交易同时进行时,其中一个交易更新数据但未确认,另外一个交易就读取数据,就有可能发生脏读问题。(3)没法重复的读取:某个交易两次读取同一字段的数据并不一致。(4)幻读:同一交易期间,读取到的数据笔数不一致。

5.metadata简介

Metadata即“诠读数据的数据”,数据库是用来存储数据的地方,然而数据库自己产品名称为什么?数据库中有几个数据表格?表格名称为什么?表格中有几个字段等?这些都是metadata

6.RowSet简介

JDBC定义了java.sql.RowSet接口,用以表明数据的列集合,这里的数据并不必定是数据库中的数据,能够是电子表格数据、XML数据或任何具备列集合概念的数据源。RowSet定义了列集合基本行为,其下有JdbcRowSetCachedRowSetFilteredRowSetJoinRowSet,WebRowSet五个标准列集合子接口。JdbcRowSet是联机式的RowSet,也就是操做JdbcRowSet期间,会保持与数据库的联机,可视为取得、操做ResultSet的行为封装,可简化JDBC程序的撰写,或做为JavaBean使用。CachedRowSet为脱机式的RowSet,在查询并填充完数据后,就会断开与数据源的联机,而不用占据相关联机资源,必要时也能够再与数据源联机进行数据同步。

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

  • 区分不了幻读与没法重复的读取,隔离层级“可重复读取”、“可循序”
    解决:“可重复读取”针对两次交易读取数据不一致,同一交易读取数据必须相同的状况,“可循序”针对同一交易期间读取到的数据不一致,在数据不一致时,交易能够照顺序逐一进行
  • 默认会将注释信息存储于.class文档,可被编译程序或位码分析工具读取,但执行时期没法读取注释信息,在执行时期读取注释信息,用什么方式?
    可使用java.lang.annotation.Retention搭配java.lang.annotation.RetentionPolicy枚举指定。

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

  • P509的代码

  • Connection使用尝试自动关闭资源语法,因此执行完try区块后,Connection的close()就会被调用。

代码托管

上周考试错题总结

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

A . 不匹配

B . 'Hello'

C . "World"

D . 'Hello',"World"

解释:反向引用 \1 表明第一个()中的匹配内容

2.正则表达式 zo* 匹配(ABCD)
:

A . z

B . zo

C . zoo

D . zooooooooooooooooooooooooo

解析:* 能够是0次

3.Suppose we have an array of String objects identified by the variable names. Which of the following for loops will not correctly process each element in the array.(假如咱们有一个名为names的String对象数组,下面哪一个for循环不能遍历数组中的每个元素?)
:(C)

A .
for(int i = 0; i < names.length; i++)

B .
for(String name : names)

C .
for(int i = 0; i < names.length(); i++)

D .
none of these will correctly process each element(以上都不能遍历)

E .
all of these will correctly process each element(以上都能遍历)

解析:因为语法错误,选择c不能正确处理每一个元素。长度变量不是方法,所以在它以后没有圆括号。选择b是使用foreach循环处理数组的示例,而且选择a是循环的正确。

4.正则表达式“r.t”匹配字符串“rat”的Java 代码表达式是(D)

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

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

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

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

5.Which of the statements is true about the following code snippet?(对于下面的代码段,说法正确的是?)(D)

int[] array = new int[25];
     array[25] = 2;

A .
The integer value 2 will be assigned to the last index in the array.(整数2会赋给数组中最后一个元素)

B .
The integer value 25 will be assigned to the second index in the array.(整数25会赋给数组中的第2个索引)

C .
The integer value 25 will be assigned to the third value in the array. (整数25会赋给数组中的第3个元素)

D .
This code will result in a compile-time error.(代码会产生编译时错误)

E .
This code will result in a run-time error. (代码会产生运行时错误)

解析:此代码将抛出一个对象的大小时抛出,由于这个数组中最后一个指数是24。这会致使运行时错误。

结对及互评

  • 学习内容
  1. 注册Driver的操做对象

    操做Driver接口的对象是JDBC进行数据库存取的起点。
  2. 取得Connection操做对象
  • Connection接口的操做对象是数据库联机表明对象,要取得Connection操做对象,能够经过DriverManager的getConnection():
  • Connection conn = DriverManager.getConnection(jdbcUrl, username, passwd);
  • 除了基本的用户名称、密码以外,还必须提供JDBC URL,其定义了链接数据库时的协议、自协议、数据源识别。

  • 主机名能够市本机或其余联机主机名、地址,MySQL端口默认为3306。

  1. 关闭connection操做对象
  • 取得Connection对象以后,可使用isClosed()方法测试与数据库的连接是否关闭。

  • 在操做完数据库以后,若肯定再也不须要链接,则必须使用close()来关闭与数据库的链接,以释放链接时相关的必要资源,像是联机相关对象、受权资源等。

结对照片

点评过的同窗博客和代码

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

我知道第16章、第17章和第18章跟以前同样,仍是介绍一些类的应用,因而我采起和以前同样的办法,一边看书,一边总结,看书上总共介绍了多少种API,每一种API的架构是什么,每一种API的做用与注意事项是什么。就这样有系统的去学习,感受效率十分高!并且头脑思绪清晰。娄老师课上强调了数据库这一章节内容的重要性,由于这部分知识与咱们大三要学习的内容息息相关,因而我刻意的在16章花更多的时间,更仔细的敲代码,发现问题。其实这些知识不是难,咱们只是感到陌生而已。同窗们有了畏难情绪和厌学情绪,固然就学不进去了,还谈什么效率!这三章的知识不像以前的对象、封装、继承、多态那些概念那么抽象难懂,都是活生生的具体的例子,接受起来其实也挺快的。娄老师说的很对,重要的不是要你学多少java知识,而是经过不断的学习过程,来总结出一套适合本身的良好的学习方法,这将受用一辈子。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 10/10 1/1 10/10
第二周 100/100 2/2 19/25
第三周 200/278 1/3 10/26
第四周 660/938 1/4 10/36
第五周 1100/2100 1/5 18/54
第六周 740/2840 1/6 23/77
第七周 352/3192 2/8 20/97
第八周 631/3805 1/9 20/117
第九周 2/11 20/137
  • 计划学习时间:30小时

  • 实际学习时间:20小时

  • 改进状况:这周又作了实验,感受本身对IDEA的理解比之前深刻了,好比一些小插件像junit这些能够辅助咱们实现更高水平的代码。

参考资料

无0.0

相关文章
相关标签/搜索