201621123031 《Java程序设计》第14周学习总结
1. 本周学习总结
1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容。

2. 使用数据库技术改造你的系统
2.1 简述如何使用数据库技术改造你的系统。要建立什么表?截图你的表设计。
答:设置两个dao接口,分别用于管理用户模块和图书模块,其中要建立一个图书表books 用于存放图书馆里的所有书籍,然后要建立一个用户表users 用于存放用户,然后每个用户要拥有一个借阅表,表名以用户ID前加一个字母a (表名不能全为数字)命名。
books表:


users表:


借阅表:


2.2 系统中使用到了JDBC中什么关键类?
- 1.DriverManager类:用于管理数据库中的所有驱动程序
- 2.Connection接口:用于与特定数据库进行连接
- 3.PreparedStatement接口:用于动态执行SQL语句
- 4.ResultSet接口:用于暂时存放数据库查询操作所获得的结果集
2.3 截图数据库相关模块的关键代码。关键行需要加注释。








2.4 选做:使用JDBCUtil进行改造系统。


2.6 选做:使用事务改造系统

3. 代码量统计
3.1 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中。

| 周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
|---|---|---|---|---|
| 2 | 607 | 607 | 15 | 15 |
| 3 | 1642 | 1035 | 33 | 18 |
| 5 | 2044 | 402 | 42 | 9 |
| 6 | 2874 | 830 | 57 | 15 |
| 7 | 3161 | 287 | 63 | 6 |
| 8 | 4299 | 1138 | 72 | 9 |
| 9 | 4831 | 532 | 81 | 9 |
| 10 | 5475 | 644 | 93 | 12 |
| 11 | 5958 | 483 | 102 | 9 |
| 12 | 6819 | 861 | 116 | 14 |
| 13 | 7408 | 589 | 127 | 11 |
| 14 | 8348 | 940 | 141 | 14 |
| 15 | 9296 | 948 | 156 | 15 |
选做:4. 数据库学习指导
1. MySQL数据库基本操作
建立数据库,将自己的姓名、学号作为一条记录插入。(截图,需出现自己的学号、姓名)
在自己建立的数据库上执行常见SQL语句(自己完成,不必截图)


2. 使用JDBC连接数据库与Statement
2.1 使用Statement操作数据库。完成实验任务书-题目2。截图其中的public static void displayAll()与public static int insert(Student stu)的关键代码并出现自己的学号。





2.2 如果要完成根据指定姓名查询学生数据,即完成函数public Student findStuByName(String name),其中的sql语句怎么写?



2.3 你认为使用JDBC操作数据库的套路是什么?
- 1.加载数据库驱动
- 2.建立数据库的连接
- 3.创建数据库的操作对象
- 4.定义操作的SQL语句
- 5.执行数据库的操作
- 6.获取并操作结果集
3. PreparedStatement与参数化查询
3.1 使用PreparedStatement,编写public Student findStuByName(String name),实现根据name进行查找, 。(粘贴关键代码及运行截图,运行截图中需出现学号,比较2.2,说明两种实现的不同)



答:使用PreparedStatement对象和使用Statement对象的主要区别是前者采用了”?”占位符,用于执行参数化查询,它通过connection.preparedStatement(strSql)方法可以可以让数据库对其strSql语句进行预编译,这样这条语句就能在后续的查询中重用,在速度上的优越性大于Statement对象的查询速度。
3.2 如果要实现模糊查找,怎么修改?比如编写public List findStusByName(String name),可根据name进行模糊匹配,如将姓名中包含zhang的同学都找出来。
先插入一些相关数据:

findStusByName方法:

测试:

运行结果:

4. 批量更新测试
数据库课程上,需要测试索引对查找的加速作用。然而在几百或几千的数据量上进行操作无法直观地体验到索引的加速作用。现希望编写一个程序,批量插入10万条数据,且该数据中的某些字段的内容可以随机生成。
4.1 截图你的代码(出现学号)、统计运行时间(使用JUint4测试,需要出现时间对比截图)。
答:十万条对于普通方法来说要跑太久了(一万条其实也好久了),就改成一万条了。




用10万的测试数据来单独测试了一遍batchTest,可以看到速度也是很快的。

5. JDBCUtil与DAO
5.1 完成试验任务-题目5中的第4小点,即编写StudentDao接口及其实现类StudentDaoJDBCImpl。
StudentDao接口:

StudentDaoJDBCImpl类:






Test类:




5.2 使用DAO模式访问数据库有什么好处?请使用4.1的代码说明,需对比传统的模式与使用DAO模式访问数据库的代码。
答:数据库不同,其使用它们的命令语句也不同,使用DAO模式访问数据库可以屏蔽不同数据库实现差异性,它只关注怎么将数据写入数据库和怎么取出来,对底层访问提供了很好的支持。在这一题中,因为只写了一种实现方法,所以它的优越性没有很好的体现出来,但如果我们要使用DAO模式来访问另外一个数据库,那么我们只需要写一个新的实现类来实现DAO接口中所定义的方法,然后使用的时候就可以根据我们的需要使用接口.实现类语句来选择使用哪一个数据库,但如果我们用的是传统的模式,那我们就得写两个独立程序来实现这个功能,不仅增加了代码量,还不方便程序的拓展与维护。
5.3 使用JDBCUtil改造题目3.1。




6. 事务处理
6.1 使用代码与运行结果证明你确实实现了事务处理功能,并说明事务处理时在编码时需要注意哪些?注意:要比较运行成功与运行失败两种情况下对数据库的更改情况。(粘贴一段你认为比较有价值的代码,出现学号)
答:在数据库中,一项事务是指由一条或多条对数据库更新的语句组成的一个工作单元,事务处理机制是指在处理事务时,只有当事务中所有操作都正常完成以后,事务才能被提交到数据库,如果一项未完成都要撤销工作。
在jdbc的api中,系统默认会自动提交事务,因此要将多条语句组成一个事务,就得使用setAutoCommit(false)语句来禁止提交,当整体都正常执行以后再使用’commit()’来提交,否则就要调用’rollback()’方法来撤销事务。
数据表内容:


正常运行:



异常运行:




数据表内容(发现MySQL的可视化界面用起来更方便嘞,个人感觉比命令行好使):
6.2 你觉得什么时候需要使用事务处理?
答:在数据库的操作中,事务是多条操作语句组成一个不可分割的整体,只有其中所有的操作都成功才能够算整个事务的成功,因此要实现这种功能,就需要用到事务处理,可以在发生错误时及时撤销之前的事务。`
201621123031 《Java程序设计》第14周学习总结的更多相关文章
- 2018面向对象程序设计(Java)第14周学习指导及要求
2018面向对象程序设计(Java)第14周学习指导及要求(2018.11.29-2018.12.2) 学习目标 (1) 掌握GUI布局管理器用法: (2) 掌握各类Java Swing组件用途及 ...
- 面向对象程序设计(JAVA) 第14周学习指导及要求
2019面向对象程序设计(Java)第14周学习指导及要求 (2019.11.29-2019.12.2) 学习目标 (1)掌握GUI布局管理器用法: (2)掌握Java Swing文本输入组件用途 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 201521123038 《Java程序设计》 第九周学习总结
201521123038 <Java程序设计> 第九周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 ...
- 20155303 2016-2017-2 《Java程序设计》第二周学习总结
20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...
- 20175221 2018-2019-2 《Java程序设计》第一周学习总结
20175221 2018-2019-2 <Java程序设计>第一周学习总结 教材学习内容总结 本周通过观看书本配套视频,学到了如解释器,编译器等一些简单概念. 还懂得了java的一些简单 ...
- 20175314 《Java程序设计》第九周学习总结
20175314 <Java程序设计>第九周学习总结 教材学习内容总结 根据课本的介绍下载了MySQL和Navicat for MySQL并成功对后者进行破解 MySQL客户端管理工具(如 ...
- 20175314 《Java程序设计》第二周学习总结
20175314 <Java程序设计>第二周学习总结 教材学习内容总结 我在APPstore上发现了一个可以支持我们在IOS系统上学习实践Java程序的开发环境,只需要购买专业版就可以使用 ...
- 20155312 2016-2017-2 《Java程序设计》第九周学习总结
20155312 2016-2017-2 <Java程序设计>第九周学习总结 课堂内容总结 两个类有公用的东西放在父类里. 面向对象的三要素 封装 继承 多态:用父类声明引用,子类生成对象 ...
随机推荐
- tp5时间戳转日期的方法
{:date('Y-m-d H:i',$vo['create_time'])}
- CSS3盒子模型
web前端必须了解的CSS3盒子模型 1.需要了解的属性以及属性值 display:box或者display:inline-box box-orient:horizontal | vertical ( ...
- RobotFramework下的http接口自动化Follow Response关键字的使用
Follow Response 关键字用于处理http中的重定向请求,常见的http 重定向请求包含http code为301和302 两种重定向请求,代表着某个URL地址发生了转移. http co ...
- Java双等号,Equals(),HashCode()小结
默认情况 - 双等号==,比较的是内存地址. - equals(),默认比较的是内存地址. - hashCode(),默认返回的是object的内存地址. String中方法改写的情况 经常会遇到需要 ...
- Liunx2:Liunx目录结构
Liunx目录图 进入根目录,使用ll命令看一下Liunx整个根目录图: 这里面所有的目录都是买完服务器之后最初始的目录,没有进过任何加工.Liunx以树的结构组织所有目录,用一张图表示一下Liunx ...
- WPF-悬浮窗(类似于360)
boss要求开发一个类似于360的悬浮窗,如下图所示: 目前采用的是wpf做的客户端,之前有个winform的项目,我参考了下,完成了wpf版的悬浮窗. Height=" WindowSta ...
- [转]Nginx基本功能极速入门
原文链接:Nginx基本功能极速入门 | 叉叉哥的BLOG 本文主要介绍一些Nginx的最基本功能以及简单配置,但不包括Nginx的安装部署以及实现原理.废话不多,直接开始. 1.静态HTTP服务器 ...
- Linux性能分析工具与图形化方法
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~. 作者:赵坤|腾讯魔王工作室后台开发工程师 在项目开发中,经常会遇到程序启动时间过长.CPU使用率过高等问题,这个时候需要依靠性能分析工具来 ...
- WordPress禁止版本修订历史、自动保存和自动草稿最新方法汇总
提醒:我这里汇总的方法有一些只支持以前老版本的WordPress,对于新版本的WordPress,有些功能是不支持的,所以操作前请做好备份.我的WordPress版本目前是4.3.1,我会在我测试有效 ...
- Unity3D UGUI强制刷新Layout(布局)组件
UGUI的Layout布局组件确实节省了我们很多代码 如果不使用Layout组件 那么光在计算UI的布局上就要花费很大的功夫 特别是动态生成其组件的时候 当然,Layout组件在大多数时候是非常好用的 ...