您的位置:首页 > 编程语言 > Java开发

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

2017-04-22 18:00 381 查看

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

教材学习内容总结

JDBC入门

1.JDBC简介

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

2.连接数据库

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

3.使用Statement、ResultSet

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

4.使用
PreparedStatement
CallableStatement




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


二、JDBC进阶

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

ResultSet
时,默认可以使用
next()
移动数据光标至下一笔数据,而后使用
getXXX()
方法来取得数据。结果集类型可以指定3种设定:
ResultSet.TYPEFORWARDONLY
(默认)、
ResultSet.TYPESCROLLINSENSITIVE
ResultSet.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
定义了列集合基本行为,其下有
JdbcRowSet
CachedRowSet
FilteredRowSet
JoinRowSet
,
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。这会导致运行时错误。

结对及互评

学习内容

注册Driver的操作对象

操作
Driver
接口的对象是JDBC进行数据库存取的起点。

取得Connection操作对象

Connection
接口的操作对象是数据库联机代表对象,要取得Connection操作对象,可以通过DriverManager的
getConnection()
:

Connection conn = DriverManager.getConnection(jdbcUrl, username, passwd);


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

主机名可以市本机或其他联机主机名、地址,
MySQL
端口默认为3306。

关闭connection操作对象

取得
Connection
对象之后,可以使用
isClosed()
方法测试与数据库的链接是否关闭。

在操作完数据库之后,若确定不再需要连接,则必须使用
close()
来关闭与数据库的连接,以释放连接时相关的必要资源,像是联机相关对象、授权资源等。

结对照片

点评过的同学博客和代码

20155306

20155215

20155206

20155212

20155204

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

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

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周10/101/110/10
第二周100/1002/219/25
第三周200/2781/310/26
第四周660/9381/410/36
第五周1100/21001/518/54
第六周740/28401/623/77
第七周352/31922/820/97
第八周631/38051/920/117
第九周2/1120/137
计划学习时间:30小时

实际学习时间:20小时

改进情况:这周又做了实验,感觉自己对IDEA的理解比以前深入了,比如一些小插件像junit这些可以辅助我们实现更高水平的代码。

参考资料

无0.0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: