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程序设计>第九周学习总结 课堂内容总结 两个类有公用的东西放在父类里. 面向对象的三要素 封装 继承 多态:用父类声明引用,子类生成对象 ...
随机推荐
- 公网访问阿里云数据库MongoDB——填坑日记
业务情景 两台服务器,一台阿里云ECS云服务器(专用网络),另一台是阿里云数据库MongoDB,处于安全考虑MongoDB是不运行外网连接的,那接下来就看怎么实现公网访问. 看到上面红色的网络类型描述 ...
- 对于Hibernate和MyBatis的区别与利弊,谈谈你的看法
Hibernate与MyBatis的对比: 1.MyBatis非常简单易学,与Hibernate相对复杂,门槛较高: 2.两者都是比较优秀的开源产品: 3.当系统属于二次开发,无法对于数据库结构做到控 ...
- 自己用的reset.css,大部分转载,加上自己常用的设置
@charset "UTF-8";/*KISSY CSS Reset理念:清除和重置是紧密不可分的特色:1.适应中文 2.基于最新主流浏览器维护:玉伯(lifesinger@gma ...
- 总结各类错误(always online)
最近发现打暴力(还有梦想中的正解)都会打错,决定好好总结一下各种坑比错误QAQ 1.一定要好好看数据范围,接近int类型上限,如果要求和,一定要开long long并且改大你的inf值(TAT暴力分流 ...
- [SHOI2012]随机树
[SHOI2012]随机树 题目大意( 网址戳我! ) 随机树是一颗完全二叉树,初始状态下只有一个节点. 随机树的生成如下:每次随机选择一个叶子节点,扩展出两个儿子. 现在给定一个正整数\(n\)(\ ...
- Kafka最佳实践
一.硬件考量 1.1.内存 不建议为kafka分配超过5g的heap,因为会消耗28-30g的文件系统缓存,而是考虑为kafka的读写预留充足的buffer.Buffer大小的快速计算方法是平均磁盘写 ...
- UWP 图片模糊
先看一下效果: 这是微识别的个人中心页面,顶部有头像,以及背景图片模糊. 要实现这样的效果,有两种方法. 第一种麻烦点,也是我现在用的.想看简单的,翻到最后 1. 首先看一下xaml代码: <S ...
- php notice提示
php页面内添加error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE ); OK.
- Error400
关于Error400,研究了几天终于弄明白了.不是FQ的问题,也不是DNS污染的问题.之前网上很多帖子说Error400可以通过删除 cookies来解决.但是其实这个并不管用.也就是说.原因并不是由 ...
- MSIL实用指南-创建方法和定义参数
本篇讲解实现创建方法.指定参数的名称.实现参数加out和ref修饰符.以及参数加默认值. 创建方法 创建方法用类TypeAttributes的 DefineMethod(string name, Me ...