1. 本周学习总结

2. 书面作业

Q1. MySQL数据库基本操作

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

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

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

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

//2015013
public static int insert(Student stu) throws SQLException{
conn = DriverManager
.getConnection(url,userName,password);
//sql语句使用拼接的方式
String strsql="insert into student(stuno,name,age,birthdate)"
+ " values('"+stu.getStuno()+"','"+stu.getName()+"',"+stu.getAge()+",'"+stu.getBirthdate()+"')";
System.out.println(strsql);
st=conn.createStatement();
resultNum=st.executeUpdate(strsql);
return resultNum;
}

运行结果:

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

  1. 加载jdbc驱动
  2. 获得数据库连接,URL用来标识数据库
  3. 创建Statement,执行sql语句
  4. 处理结果
  5. 释放资源

Q3. PreparedStatement与参数化查询

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

//2015013
String sql="select * from student where name=?";
pst=conn.prepareStatement(sql);
pst.setString(1, name);
rs=pst.executeQuery();
Student student=null;
//while(rs.next())必须写,否则出现Before start of result set,因为rs是链式存储,一开始指针不在第一个数据位置,所以必须next()才能取得数据
while(rs.next()){
student=new Student(rs.getString("stuno"),rs.getString("name"),rs.getInt("age"),rs.getDate("birthdate"));
}
...
String sql="select * from student where birthdate between ? and ?";
pst=conn.prepareStatement(sql);
pst.setDate(1, java.sql.Date.valueOf(begin));
pst.setDate(2, java.sql.Date.valueOf(end));
...

运行结果:



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

//2015013
public void batchTest() throws ClassNotFoundException {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = DriverManager.getConnection(url, userName, password);
con.setAutoCommit(false);
pstmt = con.prepareStatement(strSql);
for (int i = 0; i < 1000; i++) {
pstmt.setString(1, "2015022");
pstmt.setString(2, "郭雅清");
pstmt.setInt(3, 11);
pstmt.setDate(4, java.sql.Date.valueOf("2000-09-02"));
pstmt.addBatch();
}
pstmt.executeBatch();
con.commit(); } catch (SQLException sqlE) {
sqlE.printStackTrace();
} finally {
realeaseAll(rs,pst,conn);
}

Q4. JDBCUtil与DAO

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

//2015013
@Override
public int add(Student stu) {
// TODO Auto-generated method stub
Connection conn=null;
PreparedStatement pst=null;
String sql="insert into students(name) values(?)";
int result=1;
try {
conn=JDBCUtil.getConnection();
pst=conn.prepareStatement(sql);
pst.setString(1, stu.getName());
result=pst.executeUpdate();
if(result<0){
result=-1;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JDBCUtil.realeaseAll(null, pst, conn);
}
return result;
}
...
public Map<String,Student> fun(List<Student> stulist){
Map<String,Student> map=new HashMap<String,Student>();
for (int i = 0; i < stulist.size(); i++) {
map.put(stulist.get(i).getName(),stulist.get(i));
}
return map;
}

运行结果:

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

  • 数据访问和业务逻辑分离,便于数据维护,业务逻辑不需要了解访问细节,如数据源是数据库、文件、数组、List等。

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

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

界面:



管理员(插入、删除):





用户(读取):



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

  • 使用文件,数据冗余度答,浪费存储空间,而使用数据库存储,数据是面向整个系统的,数据可以被多个用户、应用共享,减少冗余。
  • 当使用文件时,当文件变大时,使用文件访问速度会变得很慢,而使用数据库访问速度比使用文件访问更快。

选做:6. 批量更新测试

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

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



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

  • 约5747条/秒
  • ibd文件(数据+索引)

选做:7. 事务处理

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

//2015013
public static void transfer(Account a, Account b, double x) throws Exception
{
String sql1="update account set balance=? where name=?";
String sql2="update account set balance=? where name=?";
try {
conn=DriverManager.getConnection(url, userName, password);
conn.setAutoCommit(false);
if(a.getBalance()>=x){
pst = conn.prepareStatement(sql1);
pst.setDouble(1, a.getBalance()-x);
pst.setString(2, a.getName());
pst.executeUpdate();
pst = conn.prepareStatement(sql2);
pst.setDouble(1, b.getBalance()+x);
pst.setString(2, b.getName());
pst.executeUpdate();
conn.commit();
System.out.println("转账成功");
}else{
throw new SQLException("余额不足");
}
}catch (SQLException e){
e.printStackTrace();
if (conn != null) {
try{
System.err.print("事务正在回滚");
conn.rollback();
} catch(SQLException excep) {
excep.printStackTrace();
}
}
}
finally {
pst.close();
conn.close();
}
}

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

事务是并发控制的单位,是用户自定义的一个操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位。当需要对数据库进行统一的提交和回滚时,比如当进行转账时,必须账户两边更改数据,要么成功要么失败,如果某一操作出错,则回滚之前所有的操作。

3. 码云

3.1. 码云代码提交记录

201521123013 《Java程序设计》第14周学习总结的更多相关文章

  1. 2018面向对象程序设计(Java)第14周学习指导及要求

    2018面向对象程序设计(Java)第14周学习指导及要求(2018.11.29-2018.12.2)   学习目标 (1) 掌握GUI布局管理器用法: (2) 掌握各类Java Swing组件用途及 ...

  2. 面向对象程序设计(JAVA) 第14周学习指导及要求

    2019面向对象程序设计(Java)第14周学习指导及要求 (2019.11.29-2019.12.2)   学习目标 (1)掌握GUI布局管理器用法: (2)掌握Java Swing文本输入组件用途 ...

  3. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 201521123038 《Java程序设计》 第九周学习总结

    201521123038 <Java程序设计> 第九周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 ...

  6. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

  7. 20175221 2018-2019-2 《Java程序设计》第一周学习总结

    20175221 2018-2019-2 <Java程序设计>第一周学习总结 教材学习内容总结 本周通过观看书本配套视频,学到了如解释器,编译器等一些简单概念. 还懂得了java的一些简单 ...

  8. 20175314 《Java程序设计》第九周学习总结

    20175314 <Java程序设计>第九周学习总结 教材学习内容总结 根据课本的介绍下载了MySQL和Navicat for MySQL并成功对后者进行破解 MySQL客户端管理工具(如 ...

  9. 20175314 《Java程序设计》第二周学习总结

    20175314 <Java程序设计>第二周学习总结 教材学习内容总结 我在APPstore上发现了一个可以支持我们在IOS系统上学习实践Java程序的开发环境,只需要购买专业版就可以使用 ...

  10. 20155312 2016-2017-2 《Java程序设计》第九周学习总结

    20155312 2016-2017-2 <Java程序设计>第九周学习总结 课堂内容总结 两个类有公用的东西放在父类里. 面向对象的三要素 封装 继承 多态:用父类声明引用,子类生成对象 ...

随机推荐

  1. Apriori关联分析算法概述

    概念 关联分析:从大规模数据集中寻找物品间的隐含关系.物品间关系又分为两种:频繁项集或关联规则,频繁项集是经常出现一块的物品集合:关联规则则暗示物品间存在很强的联系 关联评判标准:支持度和可信度.支持 ...

  2. 朱世杰恒等式的应用-以CF841C为例

    题目大意 Codeforces 841C Leha and Function. 令\(F(n,k)\)为在集合\(\{x|x \in [1,n]\}\)中选择一个大小为k的子集,最小元素的期望值. 给 ...

  3. PYTHON:新闻聚合

    这个项目看了有段时间,因为一直没跑通,而且关于NNTP也不是特别理解.这里是转载code123的分析. 原文地址:http://www.code123.cc/1327.html 书中的第四个练习,新闻 ...

  4. 安装完iis后本机用IP可以访问,别的电脑不能访问

    局域网IIS无法访问的解决方法 无法访问局域网内其它电脑中的IIS,自己可以访问,但别的电脑不行一般发生这种情况时操作系统是XP第二版. 具体操作如下:1.打开控制面版2.打开Windows防火墙 5 ...

  5. Thinkphp报错 -- “_STORAGE_WRITE_ERROR_”

    磁盘满了 没有写入权限 解决方法:   chmod -R 777 Runtime目录路径

  6. anaconda安装加速镜像问题解决

    Anaconda使用conda连接网络出现错误 我使用的是windows10 64bit下的Anaconda2,在安装和更新包的时候出现以下报错信息. 这是使用默认源安装包的报错信息: C:Users ...

  7. log4j日志框架学习

    初识Log4j:      log4j有三个部分:           1.loggers 负责捕获日志信息.           2.appenders  负责输出信息到不同的目的地         ...

  8. POI单元格添加公式以及读取公式结果的值

    POI提供了为单元格添加条件样式的方法,但是我并没有找到获取单元格改变后样式的方法,获取到样式依旧是没有改变之前的. 比如为单元格添加条件样式用于监听单元格值是否被修改,如果单元格值被修改那么字体颜色 ...

  9. 去掉vue地址栏中分隔#问题

    你需要开启HTML5 History 模式vue-router 默认 hash 模式 -- 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载.如果不想要很 ...

  10. 比较三个 CSS 预处理器:Sass、LESS 和 Stylus(上)

    前沿 : 第一次写不够成熟,可能描述有所错误,还请大家修改指正,我会对已完成的文章进行修改. 一.什么是CSS预处理器 CSS预处理器定义了一种新的语言,基本的思想是用一种专门的编程语言,开发者只需要 ...