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程序设计>第九周学习总结 课堂内容总结 两个类有公用的东西放在父类里. 面向对象的三要素 封装 继承 多态:用父类声明引用,子类生成对象 ...
随机推荐
- javascript右键菜单分析
右键菜单 思路 1.遮蔽原来的默认右键菜单 2.新建右键菜单跟随鼠标移动 3.注意边界处的位置变化 4.自定义右键内容的具体效果 具体 这样的事件涉及到有关contextmenu事件,阻止默认事件,获 ...
- as版本切换导致项目损坏,无法启动。环境依赖混乱
以下方法都不管用, 新建一个项目setting的 把main拷过去就行了!!!! Error:(5, 0) Gradle DSL method not found: 'google()'Possibl ...
- SPOJ3267:D-query
题面 SPOJ3267 Sol 给定\(N\)个正整数构成的序列,将对于指定的闭区间查询其区间内的不同的数的个数 主席树 不是权值线段树 维护位置 如果插入一个数时发现之前有过了 那么修改当前的,那个 ...
- iOS学习——iOS原生实现二维码扫描
最近项目上需要开发扫描二维码进行签到的功能,主要用于开会签到的场景,所以为了避免作弊,我们再开发时只采用直接扫描的方式,并且要屏蔽从相册读取图片,此外还在二维码扫描成功签到时后台会自动上传用户的当前地 ...
- 基于Redis的简单分布式锁的原理
参考资料:https://redis.io/commands/setnx 加锁是为了解决多线程的资源共享问题.Java中,单机环境的锁可以用synchronized和Lock,其他语言也都应该有自己的 ...
- office 2013补丁包更新
总是有客户发现使用office 2013 下的插件有问题,这个问题出现在低版本上,所以要给office 2013打上补丁,打上后,运行插件ok,出现的bug解决掉了.那么给office打补丁包就成了解 ...
- UWP:使用Composition实现类似安卓的水波纹Ripple效果
先放效果图: 首先,建立一个RippleHelper.cs文件,然后建立以下附加属性: IsFillEnable:是否扩大到整个控件 RippleDuration:持续时间 RippleRadius: ...
- 《阿里巴巴Android编码规范》阅读纪要(二)
版权声明:本文出自汪磊的博客,转载请务必注明出处. 本篇继续上一篇<阿里巴巴Android编码规范>阅读纪要(一) ,还是建议各位同学有时间完整阅读一下<阿里巴巴Android编码规 ...
- NOIP2017 总结
联赛结束,但是我并没有得到预期的结果,特写此文分析原因,希望我不会就此退役. 回顾一年,我做了什么? 2016年联赛,我水了两天,抱着挂掉的心态拿到了1=. 2016-2017寒假,参加集训,三天考试 ...
- 什么是IPFS?(二)
IPFS的的"宏伟"目标是取代HTTP, 那么先来看看IPFS是如何工作的? IPFS为每一个文件分配一个独一无二的哈希值(文件指纹: 根据文件的内容进行创建), 即使是两个文件内 ...