201521123005 《Java程序设计》 第十四周学习总结

1. 本周学习总结##

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

2. 书面作业##

Q1. MySQL数据库基本操作

建立数据库,将自己的姓名、学号作为一条记录插入。(截图,需出现自己的学号、姓名)
在自己建立的数据库上执行常见SQL语句(截图)
-参考:实验任务书-题目1
显示所有数据库: show databases;
201521123005 《Java程序设计》 第十四周学习总结

删除数据库:drop database test;
201521123005 《Java程序设计》 第十四周学习总结

显示所有数据库: show databases;
201521123005 《Java程序设计》 第十四周学习总结

创建数据库: create database test;
201521123005 《Java程序设计》 第十四周学习总结
连接数据库: use test;
201521123005 《Java程序设计》 第十四周学习总结

创建表create table student....

201521123005 《Java程序设计》 第十四周学习总结
查看表结构:desc student;
201521123005 《Java程序设计》 第十四周学习总结

插入数据insert into student....
201521123005 《Java程序设计》 第十四周学习总结

查询表中的数据 select * from students;
201521123005 《Java程序设计》 第十四周学习总结

查看当前打开的数据库:select database();
201521123005 《Java程序设计》 第十四周学习总结
当前数据库包含的表: show tables;
201521123005 《Java程序设计》 第十四周学习总结

Q2. 使用JDBC连接数据库与Statement

2.1 使用Statement操作数据库。
201521123005 《Java程序设计》 第十四周学习总结

201521123005 《Java程序设计》 第十四周学习总结

!注意excuteQuery是查询语句,excuteUpdate是更新语句。如果SQL语句要更新数据却用了excuteQuery,这样数据库很为难到底要干嘛。 
结论:SQL语句为查时用excuteQuery SQL语句为增、删、改时用excuteUpdate

201521123005 《Java程序设计》 第十四周学习总结

运行结果:
201521123005 《Java程序设计》 第十四周学习总结

2.2 使用JDBC操作数据库主要包含哪几个步骤?

1.创建连接数据库 Connection con=DriverManager.getConnection(JDBC URL,数据库用户名,密码);
2.通过连接发送Sql语句 Statement stmt = con.createStatement();
3.通过Sql语句获得结果集 ResultSet resultSet = statement.executeQuery(Sql);
4.处理结果 while(resultSet.next())
5.异常处理(SQLException 必须的处理的异常)
6.释放资源  按照从ResultSet->Statement->Connection的顺序关闭

-参考:实验任务书-题目2

Q3. PreparedStatement与参数化查询

3.1 使用PreparedStatement根据用户指定的查询条件进行查询。(粘贴一段你认为比较有价值的代码,出现学号)
201521123005 《Java程序设计》 第十四周学习总结

201521123005 《Java程序设计》 第十四周学习总结
201521123005 《Java程序设计》 第十四周学习总结
201521123005 《Java程序设计》 第十四周学习总结

201521123005 《Java程序设计》 第十四周学习总结

3.2 批量更新-批量插入1000个学生,统计整个操作所消耗的时间。(使用方法executeBatch)
201521123005 《Java程序设计》 第十四周学习总结

201521123005 《Java程序设计》 第十四周学习总结

从截图看整个操作所消耗的时间及其短;

参考:实验任务书-题目3
Q4. JDBCUtil与DAO

4.1 粘贴一段你认为比较有价值的代码,出现学号

//201521123005
public class StudentDaoJDBCImpl implements StudentDao {
	@Override
	public int add(Student stu) {
		// TODO Auto-generated method stub
		Connection conn = null;
		PreparedStatement pstat = null;
		String sql = "insert into student(id,name) values(?,?) ";//表中有id和name这列
		int result = -1;
		try {
			conn = JDBCUtil.getConnection();
			pstat = conn.prepareStatement(sql);
			pstat.setInt(1, stu.getId());
			pstat.setString(2, stu.getName());
			result = pstat.executeUpdate();
			
		}catch (SQLException sqle) {
			sqle.printStackTrace();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtil.realeaseAll(null,pstat, conn);
		}
		return result;
	}
	@Override
	public int delete(int sid) {
		// TODO Auto-generated method stub
		Connection conn = null;
		PreparedStatement pstat = null;
		String sql = "delete from student where id=?";//表中有id和name这列
		int result = -1;
		
		try {
			conn = JDBCUtil.getConnection();
			pstat = conn.prepareStatement(sql);
			pstat.setInt(1, sid);
			result = pstat.executeUpdate();
			
		}catch (SQLException sqle) {
			sqle.printStackTrace();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtil.realeaseAll(null,pstat, conn);
		}
		return result;
	}

	@Override
	public int update(Student stu) {
		// TODO Auto-generated method stub
		Connection conn = null;
		PreparedStatement pstat = null;
		String sql = "update student set age=? where id=?";//表中有id和name这列
		int result = -1;
		
		try {
			conn = JDBCUtil.getConnection();
			pstat = conn.prepareStatement(sql);
			pstat.setString(1,stu.getName());
			pstat.setInt(2, stu.getId());
			result = pstat.executeUpdate();
			
		}catch (SQLException sqle) {
			sqle.printStackTrace();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtil.realeaseAll(null,pstat, conn);
		}
		return result;
	}

	@Override
	public List<Student> findAll() {
		// TODO Auto-generated method stub
		Connection conn = null;
		Statement stat = null;
		ResultSet rs = null;
		Student stu=null;
		List<Student> students=new ArrayList<Student>();
		String sql = "select * from student";//表中有id和name这列
		try {
			conn = JDBCUtil.getConnection();
			stat = conn.createStatement();
			rs = stat.executeQuery(sql);
			while(rs.next()){
				stu=new Student(rs.getInt("id"),rs.getString("name"));
				students.add(stu);
			}
		}catch (SQLException sqle) {
			sqle.printStackTrace();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtil.realeaseAll(rs,stat, conn);
		}
		return students;
	}

	@Override
	public Student findById(String sid) {
		// TODO Auto-generated method stub
		Connection conn = null;
		PreparedStatement pstat = null;
		ResultSet rs = null;
		String sql = "select * from student where id=?";//表中有id和name这列
		Student student = null;
		try {
			conn = JDBCUtil.getConnection();
			pstat = conn.prepareStatement(sql);
			pstat.setString(1, sid);
			rs = pstat.executeQuery();
			while(rs.next()){
				student = new Student(rs.getInt("id"),rs.getString("name"));
			}
		}catch (SQLException sqle) {
			sqle.printStackTrace();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtil.realeaseAll(rs,pstat, conn);
		}
		return student;
	}

	@Override
	public List<Student> findByName(String name) {
		// TODO Auto-generated method stub
		Student student = null;	
		Connection conn = null;
		PreparedStatement pstat = null;
		ResultSet rs = null;
		Student stu=null;
		List<Student> students=new ArrayList<Student>();
		String sql = "select * from students where name like '?%'";//表中有id和name这列
		try {
			conn = JDBCUtil.getConnection();
			pstat = conn.prepareStatement(sql);
			pstat.setString(1, name);
			rs = pstat.executeQuery();
			while(rs.next()){
				stu=new Student(rs.getInt("id"),rs.getString("name"));
				students.add(stu);
			}
		}catch (SQLException sqle) {
			sqle.printStackTrace();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtil.realeaseAll(rs,pstat, conn);
		}
		return students;
	}
}

201521123005 《Java程序设计》 第十四周学习总结

4.2 使用DAO模式访问数据库有什么好处?

DAO模式的使用相当于建立一个接口,接口中有方法。在程序中,当需要和数据进行交互的时候则使用这个接口,并且编写一个实现类来实现这个接口上的方法,可以很清晰的知道interface DAO接口的类有什么功能。而且使用AO模式访问数据库就不需要关心参数是什么类型,在之后对程序的修改,只需对DAO模式中的某个方法修改即可,不需要整个项目都进行修改。如果有创建dao包,利用JDBCUtil.java实现简单的连接数据库返回里面的所有,这样就可以实现代码复用。

参考:实验任务书-题目5
Q5. 使用数据库改造购物车系统

5.1 使用数据库改造以前的购物车系统(应有图形界面)。如果以前为完成购物车系统,可编写基于数据库的学生管理系统。包括对学生的增删改查,要求使用。
图形界面
201521123005 《Java程序设计》 第十四周学习总结

201521123005 《Java程序设计》 第十四周学习总结

使用DAO模式改造,并搜索可以用关键字来查找

201521123005 《Java程序设计》 第十四周学习总结
201521123005 《Java程序设计》 第十四周学习总结
201521123005 《Java程序设计》 第十四周学习总结
201521123005 《Java程序设计》 第十四周学习总结

201521123005 《Java程序设计》 第十四周学习总结

5.2 相比较使用文件,使用数据库存储与管理数据有何不一样?

(1)使用文件存储与管理把数据组织成相互独立的数据文件,整体无结构;而使用数据库存储与管理实现整体数据的结构化。
(2)使用文件存储与管理,硬盘空间浪费严重,容易造成数据的不一致;使用数据库存储与管理中,数据可以被多个用户、多个应用共享使用,减少了存储空间的浪费,空间利用比较合理,提高了数据的一致性和完整性。
(3)使用文件存储与管理与使用数据库存储与管理的使用方式不同。使用文件存储的话要打开文件后存放数据再关闭文件。而数据库就像是一个载体,建立好了后在里面输入存储命令存放就可以。
 (3)使用文件存储与管理的实现以文件为单位的数据共享,而使用数据库存储与管理的实现是以记录和字段为单位的数据共享。
(4)使用文件存储与管理是用文件将数据长期保存在外存上,使用数据库存储与管理是用数据库统一存储数据。

选做:Q6. 批量更新测试

数据库课程上,需要测试索引对查找的加速作用。然而在几百或几千的数据量上进行操作无法直观地体验到索引的加速作用。现希望编写一个程序,批量插入1000万条数据,且该数据中的某些字段的内容可以随机生成。
6.1 截图你的代码(出现学号)、统计运行时间
6.2 计算插入的速度到底有多快?(以条/秒、KB/秒两种方式计算)

选做:Q7. 事务处理

7.1 使用代码与运行结果证明你确实实现了事务处理功能。(粘贴一段你认为比较有价值的代码,出现学号)
7.2 你觉得什么时候需要使用事务处理?

参考:实验任务书-题目4
选做 Q8. 数据库连接池

使用数据库连接池改写题目5

参考:实验任务书-题目4
数据连接池参考资料

3. 码云##

3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
201521123005 《Java程序设计》 第十四周学习总结

4.课外阅读

4.1 JDBC(TM) Database Access
4.2 代码结构中Dao,Service,Controller,Util,Model是什么意思,为什么划分
4.3 mysq数据库管理工具navicat基