201521123091 《Java程序设计》第14周学习总结
Java 第十四周总结
第十四周的作业。
目录
1.本章学习总结
2.Java Q&A
3.码云上代码提交记录及PTA实验总结
4.课后阅读
1.本章学习总结
以你喜欢的方式(思维导图或其他)归纳总结数据库相关内容。
- JDBC API使程序员可以通过这个API接口连接到数据库,并使用SQL完成对数据库的查找与更新。
- 根据API编写的程序都可以与驱动管理器进行通信,而驱动管理器则通过驱动程序与实际的数据库进行通信。
总之,JDBC最终是为了实现以下目标:
1.通过使用标准的SQL语句,甚至是专门的SQL扩展,程序员就可以利用Java语言开发访问数据库的应用,同时还依旧遵守Java语言的相关约定。
2.数据库供应商和数据库工具开发商可以提供底层的驱动程序。因此,他们可以优化各自数据库产品的驱动程序。
- 每个Connection对象都可以创建一个或多个Statement对象,同一个Statement对象可以用于多个不相关的命令和查询。但是,一个Statement对象最多只能有一个打开的结果集。如果需要执行多个查询操作,且需要同时分析查询结果,那么必须创建多个statement对象。
- 使用完Resultset、Statement或Connection对象后,应立即调用close方法,因为他们使用了资源,需要及时释放。
- Java SE7以后,在Statement上调用了closeOnCompletion方法,在其所有结果集都被关闭之后,该语句也会立即被自动关闭。
- 没有必要再每次开始一个查询时都建立新的查询语句,而是准备一个带有宿主变量的查询语句,每次查询时只需为该变量填入不同的字符串就可以反复多次使用该语句。这样就可以改进查询性能,因为每当数据库执行一个查询时,它总是首先通过计算来查询策略,以便高效地执行查询操作。
- 在SQL中,描述数据库或其组成部分的数据称为元数据(MetaData)。
2.Java Q&A
1. MySQL数据库基本操作
建立数据库,将自己的姓名、学号作为一条记录插入。(截图,需出现自己的学号、姓名),在自己建立的数据库上执行常见SQL语句(截图)
创建名为test的数据库,并且新建名为student的表,字段分别为id、名字、年龄和成绩。然后使用desc来显示表的结构,desc不能用于数据库。
在后面追加一个名为num的字段,表示学号,再将name字段放在num字段的后面。
将score改成double类型,然后连续插入三条记录,最后把自己的记录给删掉。
最后删除整个数据库,然后就用不了了。
2. 使用JDBC连接数据库与Statement
2.1 使用Statement操作数据库。(粘贴一段你认为比较有价值的代码,出现学号)
- 获得连接的同时也要指定用户名和密码,否则会抛出SQLException:Access denied for user ''@'localhost' (using password: NO)即没有密码无法连接。
- 不能重复创建表,但是如果只是单纯使用create命令,就需要每次运行前还要把相应的数据库删掉,实在是太麻烦了,所以加上IF NOT EXISTS语句来解决这个问题。
- 连接的关闭放在finally块中更好。
2.2 使用JDBC操作数据库主要包含哪几个步骤?
- 将所使用的数据库的驱动程序的JAR文件包括到类路径中去。这样可以自动注册驱动器类。
- 使用主机名、端口号和数据库名,这边还有用户名和密码连接数据库。
- 进行查询准备,然后执行查询或者更新。
- 处理结果。
- 关闭查询和连接。
3. PreparedStatement与参数化查询
3.1 使用PreparedStatement根据用户指定的查询条件进行查询。(粘贴一段你认为比较有价值的代码,出现学号)
3.2 批量更新-批量插入1000个学生,统计整个操作所消耗的时间。(使用方法executeBatch)
4. JDBCUtil与DAO
4.1 粘贴一段你认为比较有价值的代码,出现学号
老师的就很好:
4.2 使用DAO模式访问数据库有什么好处?
数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来。以下是数据访问对象模式的参与者。
- 数据访问对象接口(Data Access Object Interface) - 该接口定义了在一个模型对象上要执行的标准操作。
- 数据访问对象实体类(Data Access Object concrete class) - 该类实现了上述的接口。该类负责从数据源获取数据,数据源可以是数据库,也可以是 xml,或者是其他的存储机制。
- 模型对象/数值对象(Model Object/Value Object) - 该对象是简单的 POJO,包含了 get/set 方法来存储通过使用 DAO 类检索到的数据。
使用DAO的好处就是可以分离应用中不用相互了解的两个部分,即不需要知道对方的具体信息,例如业务对象只应该关注业务逻辑,不应该关心数据存取的细节。存储数据的细节在应用程序当中都是隐藏的,只要接口还是正常工作的,那么即使底层的实现发生了改变,那么DAO的用户也不会出现任何问题。DAO就像防御应用程序和数据库的中介,数据在对象和数据库的记录中移动。还有就是进行分离可以更容易进行单元测试。
DAO层使应用程序更加容易地迁移到一个不同的数据库实现。业务对象不了解低层数据实现。因而,该迁移只涉及对DAO层的变化。更进一步说,如果使用工厂策略,则有可能为每一个低层存储实现提供一个具体工厂实现。在这种情况下,迁移到不同的迁移实现意味着给应用程序提供一个新的工厂实现。同时,抽象DAO工厂可以指定需要创建的实例DAO,并交由不同的具体DAO工厂去创建。
5. 使用数据库改造购物车系统
5.1 使用数据库改造以前的购物车系统(应有图形界面)。如果以前为完成购物车系统,可编写基于数据库的学生管理系统。包括对学生的增删改查,要求使用。
修改了一下所有商品的构造器。
运行界面和之前依然一样,没有差。
5.2 相比较使用文件,使用数据库存储与管理数据有何不一样?
可以直接和数据库进行交互,而文件需要先把数据读出来,然后用数组或者是列表来存放,数据库的操作会更加方便。
6. 批量更新测试
数据库课程上,需要测试索引对查找的加速作用。然而在几百或几千的数据量上进行操作无法直观地体验到索引的加速作用。现希望编写一个程序,批量插入1000万条数据,且该数据中的某些字段的内容可以随机生成。
6.1 截图你的代码(出现学号)、统计运行时间
就10w,1kw跑不出来:
6.2 计算插入的速度到底有多快?(以条/秒、KB/秒两种方式计算)
7. 事务处理
7.1 使用代码与运行结果证明你确实实现了事务处理功能。(粘贴一段你认为比较有价值的代码,出现学号)
正常的是这样的:
然后我把数据删了,来个会出错的语句:
增加和查询共同组成一个事务,然后因为查询出现了异常。所以并没有任何数据
7.2 你觉得什么时候需要使用事务处理?
一组语句构建成一个事务。当所有语句都顺利执行之后,事务可以被提交。否则,如果其中某个语句遇到错误,那么事务将被回滚,就好像没有任何语句被执行一样。
如果要确保数据库完整性(database integrity),就要使用事务。举个最浅显的例子,比如转钱,把钱取出来,正要存入其他账号的时候,系统GG了,那么就需要撤销取款操作。
如果把语句组合成一个事务,那么事务要么成功执行所有操作并提交,要么在中间失败了,然后就回滚,就是自动撤销之前所做的更新操作以及其产生的影响。
在事务处理的时候,自动提交模式需要被关闭:'con.setAutoCommit(false);'。如果出现错误,就用rollback()方法,那么就会回滚到最开始。
当然Java提供 了保存点来更细粒度地控制回滚操作。如果一个点被保存,那么待会出错的时候就可以回滚到这个点,而不是事务的一开始。
还有,批量更新也是事务处理的常见方法,整个语句序列作为一批操作一批操作整个提交上去。
我们可以批量地插入、更新或者是删除,也可以批量创建表、批量删除表。但是,批量处理中添加选择语句的时候就会抛出异常,因为批量处理的选择语句没有意义,选择语句会返回结果集,而不是更新数据库。
3.码云上代码提交记录
3.1 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
4. 课外阅读
4.1 JDBC(TM) Database Access
Lesson: JDBC Introduction
JDBC API可以用来访问任何表格数据,甚至是放在关系型数据库中的数据。
JDBC可以使我们的Java程序:
- 连接到一个数据源,比如数据库。DriverManager连接到数据库的驱动并且登进去。
- 给数据库发送查询和更新语句。Statement发送这类的SQL语句。
- 数据库根据我们的查询提供相应的数据,我们可以处理这些数据。ResultSet取回查询的结果,并且可以放在while循环中,得到所有符合条件的结果。
JDBC包含四个东西:
- JDBC API
- JDBC驱动管理器
- JDBC测试套件
- JDBC-ODBC套件
根据API编写的程序都可以与驱动管理器进行通信,而驱动管理器则通过驱动程序与实际数据库进行通信。
关系型数据库概览
数据库是用来存放信息的一种方式。用最简单的话说,关系型数据库就是用行列组成的表现信息的表格。一个表格是用来存放具有相同类型的对象的集合。根据常见的关系,表格中的数据可以相互联系,关系型数据库的基础就是能够从表格最后那个取出相关的数据。DBMS处理存放、维护、取出数据的方式。RDBMS就是关系型数据库中的DBMS。
4.2 代码结构中Dao,Service,Controller,Util,Model是什么意思,为什么划分
【修真院“善良”系列之十六】代码结构中Dao,Service,Controller,Util,Model是什么意思,为什么划分
为了让我们的代码写出来不会是一坨的,让代码更容易阅读,协作更容易进行,所以需要一些分类来肢解整个代码结构。
- Model:用来抽象数据,Model的实例作为纯数据的集合,作为一个整个的载体在程序中被组装并且操作,即“业务逻辑映射成数据模型”。
- Util:用来描述和业务逻辑没有关系的数据处理。Util这个工具类是公用的,与私有方法相区别,私有方法是专门针对数据在某种特定场景下使用的方法。Util一般有明确的输入和明确的输出,更适合用于单元测试。
- Service:望文生义,就是服务,提供服务。比Util的概念大,包括一系列的数据处理,或者Util,或者别的服务
- Dao:负责对数据库的增删改查(CRUD),而且只负责这些东西,数据怎么来,去干吗都不管。一般会提供一个接口,然后可以用不同的容器来存放这些数据,可以是数组、列表或者是数据库,当然对于大型的应用,前面两种应该是用不上的。
- Controller:控制者,负责总的调度,发出命令,给各分类提供明确的任务。
下面我都看不懂了。
4.3 mysq数据库管理工具navicat基本使用方法
其他的操作就都差不多了,挺好用的,就是只能试用14天。