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程序设计>第九周学习总结 课堂内容总结 两个类有公用的东西放在父类里. 面向对象的三要素 封装 继承 多态:用父类声明引用,子类生成对象 ...
随机推荐
- sql数据库设置自定义消息
第一步 EXEC sp_addmessage @msgnum = 50005 , @severity = 10 , @msgtext = '更新失败' , @l ...
- GridView 翻页 索引超出范围
事件回顾 今天GridView翻页时,又遇到错误:索引超出范围.必须为非负值并小于集合大小. 这是当时的PageIndexChanging和RowCommand两个事件的后台代码 protected ...
- [Luogu3377]【模板】左偏树(可并堆)
题面戳我 题目描述 如题,一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或第y个数已经被删除或第x和第y个数 ...
- [SCOI2008]奖励关
题面在这里 题意 不好描述.....大家还是看luogu上的吧(资磁洛谷!) sol \(n<=15\)的良心数据肯定是状压啦 只是设状态的时候有点头疼 首先思考我们在无法预知之后宝物的情况下如 ...
- [BZOJ1030] [JSOI2007] 文本生成器 (AC自动机 & dp)
Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ...
- [BZOJ1087] [SCOI2005] 互不侵犯King (状压dp)
Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行,包 ...
- html2canvas不能识别svg的解决方案
最新有个功能需要截取网页成图片,于是用到比较流行的html2canvas,本来以为能顺顺利利的搞定,后来发现网页上的流程图连接线不在截图中.于是各种百度.bing,也搜到好多,但是感觉没有一个完整的代 ...
- Devstack 安装OpenStack Pike版本(单机环境)
问题背景 最近在研究OpenStack的时候,需要对其源代码进行调试,公司服务器上部署的OpenStack环境又不能随意的进行折腾,为了研究的持续性和方便性,就决定再自己的虚拟机上面使用Devstac ...
- Java对于特殊字符做间隔读入的处理(1.3.4)
先读进字符串,然后再用split分割,注意当默认间隔符有其他意义时,要用\转义字符转义 这道题是pat的一道题,主要读入方法看前面就行了 import java.util.Scanner; publi ...
- setup命令的安装
2018-03-01 10:25:18 最小化安装的Linux系统,setup命令使用不了 安装方法:yum install setuptool #安装完以后,只要直接输入 setup,就会出 ...