20155321 2016-2017-2 《Java程序设计》第九周学习总结
20155321 2016-2017-2 《Java程序设计》第九周学习总结
教材学习内容总结
JDBC简介
厂商在实现JDBC驱动程序时,依方式可将驱动程序分为四种类型:
- JDBC-ODBC Bridge Driver
将JDBC调用转换为ODBC调用
- Native API Driver
将JDBC调用转换为原生链接库中的相关API调用。其特点是与平台相依,是四种类型中最快的驱动程序
- JDBC-Net Driver
将JDBC调用转换为特定的网络协议调用,目的是与远程数据库特定的中间服务器或组件进行协议操作,而中间件或组建再真正与数据库进行操作。特点:弹性最高
- Native Protocol Driver
将JDBC调用转换为特定的网络协议,所以驱动驱动程序可以使用Java技术来实现,遗传你这类型的驱动程序可以跨平台,在性能上也有不错的表现。在不需要如第3种驱动类型的灵活性时,通常是会使用这类型驱动程序,该类型时最常见的驱动程序类型
连接数据库
为了要连接数据库系统,必须要有厂商操作的IDBC驱动程序,必须在CLASSPATH中设定驱动程序JAR文档
基本数据库操作相关的JDBC接口或类是位与java.sq1包中。要取得数据库联机,必有几个动作:注册Driver操作对象、取得Connection操作对象、关闭Connection操作对象
注册Driver操作对象
操作Driver接口的对象是JDBC进行数据库存取的起点,管理Driver操作对象的类是java.sq1.DriverManger。基本上,必须要调用其静态方法registerDriver()进行注册
应用程序可能同时联机多个厂商的数据库,所以DriverManager也可以注册多个驱动程序实例
- 取得Connetion操作对象
Connection接口的操作对象是数据库联机代表对象,要取得Connection操作对象要通过DriverManger的getConnection()方法
除了基本的用户名称、密码之外,还必须提供JDBC URL,其定义了连接数据库时的协议、子协议、数据源识别
- 关闭Connetion操作对象
JDBC进阶
- 在ResultSet时,默认可以使用next()移动数据光标至下一笔数据,而后使用getXXX()方法来取得数据
在数据光标移动的API上,可以使用absolute()、afterLast()、beforeFirst()、first()、last()进行绝对位置移动,使用relative()、previous()、next()进行相对位置移动,移动成功返回true。可使用isAfterLast()、isBeforeFirst()、isFrist()、isLast()判断当前位置。 - 交易的四个基本要求
- 原子性、一致性、隔离行为与持续性
- 更新遗失:基本上就是指某个交易对字段进行更新的信息,因另一个交易的介入而遗失更新效力。
- 脏读:两个交易同时进行时,其中一个交易更新数据但未确认,另一个交易就读取数据,就有可能发生脏读问题。
- 无法重复的读取:某个交易两次读取同一字段的数据并不一致。
- 幻读:同一交易期间,读取到的数据笔数不一致。
- 在ResultSet时,默认可以使用next()移动数据光标至下一笔数据,而后使用getXXX()方法来取得数据
批次更新
每一次执行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错误
结对及互评
点评过的同学博客和代码
本周结对学习情况
- 20155330
- 结对学习内容
- 学习了实验二的相关内容及知识点
- 学习了第十六章的内容
上周博客互评情况
其他(感悟、思考等,可选)
这周过后按照老师的计划整本书的内容基本上都过了一遍,但是自己觉得自己学得并不扎实,有很多知识点都有似是而非的感觉,知道那个东西是什么,但是实际在敲代码的时候就不知道该怎么使用,而且在尝试使用的时候还遇到了很多错误不知道怎么解决,在前期的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程序设计》第九周学习总结的更多相关文章
- 201521123027 <java程序设计>第九周学习总结
1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2.书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什 ...
- 20145220java程序设计第九周学习总结
20145220java程序设计第九周学习总结 教材学习内容总结 JBDC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商对接口直接操作,开发人员无须接触底层数据可驱动程序的差异 ...
- 201771010134杨其菊《面向对象程序设计java》第九周学习总结
第九周学习总结 第一部分:理论知识 异常.断言和调试.日志 1.捕获 ...
- 201521044152<java程序设计>第一周学习总结
本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...
- 20145304 刘钦令 Java程序设计第二周学习总结
20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...
- 20145304 刘钦令 Java程序设计第一周学习总结
20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...
- 201621123007 Java程序设计第一周 学习总结
第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...
- 马凯军201771010116《面向对象与程序设计Java》第九周学习总结
一.理论知识部分 异常.日志.断言和调试 1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. 2.Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. 3 ...
- 201521123063 JAVA程序设计 第二周学习总结
1.本周学习重点(2.27-3.5) java中的数组 以二维数组为例,数组名为scores,则 (1)先声明数组 int[][] scores;或int scores[][];或int[] scor ...
- 《Java》第九周学习总结
下载mysql 选择mysql的管理软件 idea可以直接连接 然后用库运行程序,但是没有截图,,因为想在navicat上试试,可惜速度太慢了 打开idea又很慢,所以明天再更新
随机推荐
- 防止开放重定向,恶意篡改returnUrl
1.防止开放重定向: /// <summary> /// 防止开放重定向 /// </summary> /// <param name="url"&g ...
- MD5随机盐值生成法
public class Test3 { /** * 生成含有随机盐的密码 */ public static String generate(String password) { Random r = ...
- Android Studio Git .gitignore文件配置忽略不需要的文件
转载请标明出处: http://www.cnblogs.com/why168888/p/6440805.html 本文出自:[Edwin博客园] # Built application files * ...
- python的sys和os模块
一.sys sys.argv:实现从程序外部向程序传递参数. 其中sys.argv[0]为脚本的名称,所以要判断是否有参数传入可以:if len(sys.argv) > 1. sys.exi ...
- 【转】用JS创建json数据,并且可以动态往json数据里面添加新值,也可以修改值。
原文地址:http://blog.csdn.net/panlingfan/article/details/45562893/ 函数不需要 return,因为 json 对象会被函数直接修改. var ...
- 使用highmaps制作中国地图
Highmaps 所需文件 http://code.highcharts.com/maps/highmaps.js(地图渲染的核心文件 必须引用)http://code.highcharts.com/ ...
- gluoncv voc_detection
https://github.com/zhreshold/gluon-cv/commit/73b3986aaa2e0d0e6f3f428c12072e3a9d29905e gluoncv可能版本还没更 ...
- 一分钟掌握Spring中bean的生命周期!
Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean 的别名只能维持 ...
- 解析oracle对select加锁的方法以及锁的查询 转
转自 https://www.jb51.net/article/37587.htm 本篇文章是对oracle对select加锁的方法以及锁的查询进行了详细的分析介绍,需要的朋友参考下 解析oracle ...
- Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解
在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构struct timeval{time_t tv_sec; ...