20155233 2016-2017-2 《Java程序设计》第9周学习总结
20155233 2016-2017-2 《Java程序设计》第9周学习总结
学习目标
- 了解JDBC架构
- 掌握JDBC架构
- 掌握反射与ClassLoader
- 了解自定义泛型和自定义枚举
- 会使用标准注解
教材学习内容总结
本周主要进行第十六章、第十七章、第十八章的学习。
JDBC全名Java DataBase Connectivity,是java联机数据库的标准规范。它定义一组标准类与接口,应用程序需要联机数据库时调用这组标准API。
厂商在操作JDBC驱动程序时,依方式可将驱动程序分为4种类型:
·Type 1:JDBC-ODBC Bridge Driver
·Type 2:Native API Driver
·Type 3:JDbc-Net Driver
·Type 4:Native Protocol Driver
JDBC标准主要分为两个部分:JDBC应用程序开发者接口和JDBC驱动程序开发者接口。
Connection接口的操作对象是数据库联机代表对象,要取得Connection操作对象,可以通过DriverManager的getConnection(),除了基本的用户名称、密码之外,还必须提供JDBC URL,其定义了连接数据库时的协议、子协议、数据源识别。
使用JDBC加载.class文件方法有四种:
(1)使用Class.forName()
(2)自行建立Driver操作接口类的实例(直接撰写代码java.sql.Driver driver = new com.mysql.jdbc.Driver())
(3)启动JVM时指定jdbc.drivers属性(执行java命令时java -Djdbc.drivers=com.mysql.jdbc.Driver;XXXDriver YourProgram)指定多个驱动程序类,用分号间隔
(4)设定JAR中/service/java.sql.Driver文档
可以使用addBatch()方法收集SQL,并使用executeBatch()方法将所收集的SQL传送出去。
所有收集的SQl,然后传送给数据库,再通过一次网络传送给数据库,节省了时间。
JDBC的数据列集合(电子表格、XML数据或其他具有列集合概念的数据源),可以使用RowSet对列集合进行增删查改。
JDBC中提供了java.sql.Blob与java.sql.Clob两个类分别代表BLOB与CLOB数据。
日期时间在JDBC中,并不是使用java.util.Date,这个对象可代表的日期时间格式是“年、月、日、分、秒、毫秒”,在JDBC中要表示日期,是使用java.sql.Date,其日期格式是“年、月、日”,要表示时间的话则是使用java.sql.Time,其格式时间为”时、分、秒”,java.sql.Timestamp表示“时、分、秒、微秒”的格式。
在ResultSet时,默认可以使用next()移动数据光标至下一笔数据,而后使用getXXX()方法来取得数据
在数据光标移动的API上,可以使用absolute()、afterLast()、beforeFirst()、first()、last()进行绝对位置移动,使用relative()、previous()、next()进行相对位置移动,移动成功返回true。
交易:隔离行为的支持上,JDBC可以通过Connection的getTransactionIsolation()取得数据库目前的隔离行为设定,通过setTransactionIsolation()可提示数据库设定指定的隔离行为,可设定常数是定义在Connection上对交易不设定隔离行为TRANSACTION_NONE。
教材学习中的问题和解决过程
<1>驱动的四种类型
- JDBC-ODBC Bridge Driver
- Native API Driver
- JDBC-Net Driver
- Native Protocal Driver
<2>JDBC API
- 服务接口(Service Interface): Connection
- 提供者注册API(Provider Registration API):DriverManager.registerDriver
- 服务访问API(Service Access API):DriverManager.getConnection
- 服务提供者接口:Driver
<3>连接数据库
- 注册Driver: DriverManager.registerDriver()
- 获取Connection: Connection conn = - DriverManager.getConnection(jdbcUrl, userName, password);
代码调试中的问题和解决过程
<1>方式一:反射加载Class cl = Class.forName("classname");
方式二:使用ClassLoader
URLClassLoader loader = new URLClassLoader(urls);
Class cl = loader.loadClass("classname);
这两种方式加载类 有什么区别吗? 或者说有什么联系?
- 一样的,没有区别,类装载器装载是指定装载器,forname是使用当前类装载器装载。
<2>Statement或ResultSet不使用时,close()会关掉吗?
- 肯定是会的,close肯定会关掉,Statement关闭时,所关联的ResultSet也会自动关闭。
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
Linux中使用cp命令拷贝目录时要加上(AD)选项。
A .-r
B .-directory
C .-all
D .-R正则表达式 zo* 匹配(ABCD)
A .z
B .zo
C .zoo
D .zoooooooooooooooooooooooooooSuppose 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(以上都能遍历)
结对及互评
评分标准
- 正确使用Markdown语法(加1分):
- 不使用Markdown不加分
- 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
- 排版混乱的不加分
- 模板中的要素齐全(加1分)
- 缺少“教材学习中的问题和解决过程”的不加分
- 缺少“代码调试中的问题和解决过程”的不加分
- 代码托管不能打开的不加分
- 缺少“结对及互评”的不能打开的不加分
- 缺少“上周考试错题总结”的不能加分
- 缺少“进度条”的不能加分
- 缺少“参考资料”的不能加分
教材学习中的问题和解决过程, 一个问题加1分
代码调试中的问题和解决过程, 一个问题加1分
- 本周有效代码超过300分行的(加2分)
- 一周提交次数少于20次的不加分
- 其他加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深入的加1分
- 点评认真,能指出博客和代码中的问题的加1分
- 结对学习情况真实可信的加1分
- 扣分:
- 有抄袭的扣至0分
- 代码作弊的扣至0分
- 迟交作业的扣至0分
点评模板:
- 博客中值得学习的或问题:
- xxx
- xxx
- ...
- 代码中值得学习的或问题:
- xxx
- xxx
- ...
基于评分标准,我给本博客打分:XX分。得分情况如下:xxx
点评过的同学博客和代码
- 本周结对学习情况
- 20155233潘滢昊
- 结对学习内容
- 上周错题
- 第十六、十七、十八章
- 上周博客互评情况
20155238张景禹
20145226夏艺华
20155233刘高乐
20155222卢梓杰
20155213陆忠民
20155312张竞予
其他(感悟、思考等,可选)
本周学习了解JDBC架构,掌握JDBC架构,掌握反射与ClassLoader,了解自定义泛型和自定义枚举,以及会使用标准注解,本周之后,Java这本书已经学习完毕了,在今后的实践练习中,我将进一步加深对Java的学习。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 20篇 | 200小时 | |
第一周 | 8/10 | 1/4 | 8/10 | 编写第一个Java程序HelloWorld |
第二周 | 79/89 | 1/5 | 11/21 | 学习Java基础语法 |
第三周 | 249/338 | 1/6 | 16/37 | 学习Java关于对象的重要知识 |
第四周 | 331/669 | 1/7 | 17/54 | 学习Java关于继承、接口与多态的重要知识 |
第五周 | 507/1176 | 1/8 | 18/72 | 学习Java的异常处理、Collection与Map |
第六周 | 1321/2497 | 1/9 | 16/88 | 学习Java的输入、输出与线性、并行API |
第七周 | 678/3175 | 2/11 | 18/106 | 学习Java的Lambda、时间与日期 |
第八周 | 358/3533 | 1/12 | 18/124 | 学习Java的NIO与NIO2、通用API |
第九周 | 686/4219 | 2/14 | 21/145 | 学习Java的整合数据库、反射与类加载器和自定义泛型、枚举与注释 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:20小时
实际学习时间:21小时
改进情况:学习时间比上周多,主要花费时间去使用,复习知识。
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料
最新文章
- Lambda 表达式[MSDN]
- 如果把表单数据的校验交给了javascript那么后台还有没有必要对数据做校验呢
- 分享一个linux环境下快速读取行数的命令
- 从JAVA客户端访问Redis示例(入门)
- [转载] nginx的负载均衡
- Git 的origin和master分析 push/diff/head(转)
- HDU 3357
- Classpath entry org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER will not be exported
- Spring学习之AOP
- mysql---左连接、右连接、内连接之间的区别与联系
- angularJS看MVVM
- .net中的4种事务总结
- java 反射 类装载器
- Python自学笔记-logging模块详解
- 通过geotools读写shp文件
- webrtc底层一对一连接过程探索(三)
- 小强的HTML5移动开发之路(7)——坦克大战游戏1
- Zabbix监控原理及架构
- AlphaGo原理浅析
- spring boot 注解方式 idea报could not autowire