第14周-数据库

1. 本周学习总结

1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容。

2. 书面作业

1. MySQL数据库基本操作

建立数据库,将自己的姓名、学号作为一条记录插入。(截图,需出现自己的学号、姓名)

在自己建立的数据库上执行常见SQL语句(截图)




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

2.1 使用Statement操作数据库。(粘贴一段你认为比较有价值的代码,出现学号)

//201521123094
String URL = "jdbc:mysql://localhost:3306/students";
String driverName = "com.mysql.jdbc.Driver";
String sql = "XXX";  //输入指令
String userName = "root"; //账户
String password = "******"; //密码
Connection conn = null;
try {
		Class.forName(driverName);  //注册驱动
	} catch (ClassNotFoundException e1) {
		e1.printStackTrace();
	}
try {
	conn = DriverManager.getConnection(URL,userName,password);
	Statement statement = conn.createStatement();
	ResultSet resultSet = statement.executeQuery(sql);
	} catch (SQLException e) {
		e.printStackTrace();
	}finally{
		if(conn!=null)
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		conn = null;  //关闭连接
	}

相关截图:

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

答:
(1)Class.forName(driverName)——注册驱动
(2)Connection——与数据库建立连接
(3)Statement——向数据库发送SQL语句
(4)ResultSet——获得和处理SQL语句返回的结果
(5)关闭连接,释放资源

3. PreparedStatement与参数化查询

3.1 使用PreparedStatement根据用户指定的查询条件进行查询。(粘贴一段你认为比较有价值的代码,出现学号)

//201521123094
conn = DriverManager.getConnection(URL, userName, password);
String strSql = "select *查看条件* from *表名* where *筛选条件*?";
pStatement = conn.prepareStatement(strSql);
pStatement.set类型(1, *要筛选的值*);
resultSet = pStatement.executeQuery();
resultSet.next();  //多SQL语句可用

//      还有一些释放资源的代码
            if (resultSet != null)
                try {
                	resultSet.close();
                	resultSet = null;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            if (pStatement != null)
                try {
                    pStatement.close();// 关闭语句
                    pStatement = null;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            if (conn != null) {
                try {
                    conn.close();// 关闭连接
                    conn = null;
                } catch (Exception e) {
                    e.printStackTrace();
                }

相关截图:

3.2 批量更新-批量插入1000个学生,统计整个操作所消耗的时间。(使用方法executeBatch)

答:
我的代码

查看表结果

整个操作所消耗的大概时间如图所示。

4. JDBCUtil与DAO

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

//201521123094(两个编写的类型格式比较不同)
@Override
public int add(entity.Student stu) {
    Connection conn = null;
	PreparedStatement pstat = null;
	String sql = "insert into students(stuno,name,age,birthdate) values(?,?,?,?)";
	int result = -1;
	try {
		conn = JDBCUtil.getConnection();
		pstat = conn.prepareStatement(sql);
		pstat.setString(1, stu.getStuno());
		pstat.setString(2, stu.getName());
		pstat.setInt(3, stu.getAge());
		pstat.setString(4, stu.getBirthdate());
		result = pstat.executeUpdate();
	} catch (SQLException sqle) {
		sqle.printStackTrace();
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		JDBCUtil.realeaseAll(null, pstat, conn);
	}
	return result > 0 ? 1 : -1;
}

@Override
public List<entity.Student> findAll() {
	Connection conn = null;
	PreparedStatement pstat = null;
	ResultSet rs = null;
	List<entity.Student> students = new ArrayList<Student>();
	String sql = "select * from students;";
	try {
		conn = JDBCUtil.getConnection();
		pstat = conn.prepareStatement(sql);
		rs = pstat.executeQuery();
		while(rs.next()){
			int id = rs.getInt("id");
			String stuno = rs.getString("stuno");
			String name = rs.getString("name");
			int age = rs.getInt("age");
			String date = rs.getString("birthdate");
			Student stu = new Student(id, stuno, name, age, date);
			students.add(stu);
		}
	} catch (SQLException sqle) {
		sqle.printStackTrace();
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		JDBCUtil.realeaseAll(null, pstat, conn);
	}
	return students;
}

相关截图:

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

答:
(1)DAO(Database Access Object) ——数据库访问接口
(2)使程序层次分明,不需要知道层次直接的具体关系,便于管理。
(3)如果只是一层出错只要处理那一层的程序,一般不会影响其他。

5. 使用数据库改造购物车系统

5.1 使用数据库改造以前的购物车系统(应有图形界面)。如果以前未完成购物车系统,可编写基于数据库的学生管理系统。包括对学生的增删改查,要求使用。

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

答:
(1)文件存储需要处理的步骤比较多,读写文件比较麻烦。
(2)数据库存储与管理数据可以直接交互,且数据永久保存,数据通过SQL语句就能进行管理。

选做:6. 批量更新测试

数据库课程上,需要测试索引对查找的加速作用。然而在几百或几千的数据量上进行操作无法直观地体验到索引的加速作用。现希望编写一个程序,批量插入1000万条数据,且该数据中的某些字段的内容可以随机生成

6.1 截图你的代码(出现学号)、统计运行时间

6.2 计算插入的速度到底有多快?(以条/秒、KB/秒两种方式计算)

选做:7. 事务处理

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

7.2 你觉得什么时候需要使用事务处理?

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

选做 8. 数据库连接池

使用数据库连接池改写题目5
参考:实验任务书-题目4

3. 码云

3.1. 码云代码提交记录

——在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

4.课外阅读

4.1 JDBC(TM) Database Access

4.2 代码结构中Dao,Service,Controller,Util,Model是什么意思,为什么划分

4.3 mysq数据库管理工具navicat基本使用方法

posted @ 2017-05-28 20:50  wuht  阅读(334)  评论(0编辑  收藏  举报