1. 本周学习总结

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


2. 书面作业

1. MySQL数据库基本操作

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

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

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

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

//201521123007
public static void displayAll() {
// 显示所有学生的学号、名字和出生时间,select
String sql = "select stuno,name,birthdate from student";//关键语句
} public static int insert(Student stu) {
// 插入学生,insert
String sql = "insert into student(stuno,name,age,birthdate) " + "values('" + stu.getStuno() + "','"
+ stu.getName() + "'," + stu.getAge() + ",'" + stu.getBirth() + "');";//关键语句
} public static void displayAllOrderByIdDesc(int id) {
// 打印出学生的ID号、姓名和出生年日期,并按id降序排列。
String sql = "select * from student order by " + id + " desc;";//关键语句
} public static int deleteStudent(int id) {
// 按id删除某个学生,返回值为删除学生的个数,delete
String sql = "delete from student where id=" + id + ";";//关键语句
} public static int updateStudentAge() {
// 将每个学生的年龄+1,update语句
String sql1 = "select id,age from student;";
int resultNum = 0;
try (Connection conn = DriverManager.getConnection(URL, userName, password)) {
Class.forName(driverName);
java.sql.Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery(sql1);
while (resultSet.next()) {
java.sql.Statement statement1 = conn.createStatement();
String sql2 = "update student set age='" + resultSet.getInt("age") + 1 + "' where id="
+ resultSet.getInt("id") + ";";
resultNum += statement1.executeUpdate(sql2);
} } catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
}
return resultNum;
}

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

  1. 装载驱动,jdbc4.0后不再需要手动加载驱动;
  2. 与数据库建立连接;
  3. 向数据库发送SQL语句;
  4. 获得和处理查询更新语句返回的结果;
  5. 关闭连接,释放资源。

3. PreparedStatement与参数化查询

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

//201521123007
public static double getAvgAbove(int age){
//显示所有年龄超过传入参数age的同学的姓名与年龄平均值(使用avg函数)
/* select name,avg(age) avgAge from student where age>?
注意:avg(age) avgAge指的是将年龄求平均后作为avgAge列输出,即列名为avgAge*/
double avgAge=0;
String sql1="select name from student where age>"+age+";";//好像是因为版本太低的问题name和avg(age)不能放一起select
String sql2="select avg(age) from student where age>"+age+";";
try(Connection conn=DriverManager.getConnection(URL,userName,password)){
Class.forName(driverName);
java.sql.Statement statement=conn.createStatement();
ResultSet resultSet1=statement.executeQuery(sql2);
resultSet1.next();
avgAge=resultSet1.getDouble("avg(age)");
ResultSet resultSet=statement.executeQuery(sql1);
while(resultSet.next())
System.out.println("name=" + resultSet.getString("name"));
resultSet.close(); } catch (SQLException | ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return avgAge;
}

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

以下是不使用executeBatch方法和使用executeBatch方法的关键代码:

//201521123007
@Test
public void slowTest() {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
SimpleDateFormat hmFromat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");// 格式化日期
String driverName = "com.mysql.jdbc.Driver"; try {
Class.forName(driverName);
con = DriverManager.getConnection(url, userName, password);
con.setAutoCommit(false);
// 根据参数的插入数据
pstmt = con.prepareStatement(strSql);
for (int i = 0; i < num; i++) {
pstmt.setString(1, "20150111");
...
pstmt.executeUpdate();
}
con.commit(); } catch (...) {...} @Test
public void batchTest() {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
SimpleDateFormat hmFromat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");// 格式化日期
String driverName = "com.mysql.jdbc.Driver"; try {
Class.forName(driverName);
con = DriverManager.getConnection(url, userName, password);
con.setAutoCommit(false);
pstmt = con.prepareStatement(strSql);
for (int i = 0; i < num; i++) {
pstmt.setString(1, "20150111");
...
pstmt.addBatch();
}
pstmt.executeBatch();
con.commit(); } catch (...) {...}

现在来看一下运行的结果

我们发现使用executeBatch方法比不使用快了很多。

4. JDBCUtil与DAO

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

//201521123007
@Override
public int add(Student stu) {//添加学生信息
int rs=0;
String sql = "insert into student(id,name) values(?,?); ";
try(Connection conn = DriverManager.getConnection(URL, userName, password)) {
Class.forName(driverName);
PreparedStatement pstat = conn.prepareStatement(sql);
pstat.setInt(1, stu.getId());
pstat.setString(2, stu.getName());
rs = pstat.executeUpdate();
}catch (SQLException | ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
} @Override
public List<Student> findByName(String name) {
List<Student> list = new ArrayList<Student>();
String sql = "select * from student where name like ?";//模糊查询
try(Connection conn = DriverManager.getConnection(URL, userName, password)) {
Class.forName(driverName);
PreparedStatement pstat = conn.prepareStatement(sql);
pstat.setString(1, "%"+name+"%");
ResultSet rs = pstat.executeQuery();
while(rs.next()){
list.add(new Student(rs.getInt("id"),rs.getString("name")));
}
} catch (SQLException | ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
} public Map<String,Student> maptest(){//把所有学生信息放入一个Map
Map<String,Student> smap=new HashMap<String,Student>();
List<Student> list =findAll();
for (Student e : list) {
smap.put(e.getName(), e);
}
return smap;
} public Student findByName1(String name){
String sql="select *from student where name="+name;//按指定姓名查询
Student stu=null;
try(Connection conn=DriverManager.getConnection(URL, userName, password)){
Class.forName(driverName);
Statement st=conn.createStatement();
ResultSet rs=st.executeQuery(sql);
rs.next();
stu=new Student(rs.getInt("id"),rs.getString("name"));
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return stu;
}

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

以下是搜到的

DAO使程序层次分明,把对数据库的操作都放在这一层,这样其他层的逻辑控制就变得清晰明了了。

对于实现业务逻辑而言,DAO层是基石。

而且分层后DAO的代码维护与变更等也变得清晰可理解。

DAO的存在大部分是为了理清思路,代码简洁易懂

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

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

	private static PreparedStatement ps = null;

	private static ResultSet rs = null;

	public static ArrayList<Goods> getAllGoods() {// 获取购物车商品的信息
ArrayList<Goods> alist = new ArrayList<Goods>();
try (Connection ct = new Connect().getConn();) { String sql = "select * from goodsbean where name in (";
Iterator<String> it = hm.keySet().iterator();
while (it.hasNext()) {
String goodsname = it.next();
if (it.hasNext()) {
sql +="'"+ goodsname + "',";
} else {
sql += "'"+goodsname + "')";
}
}
ps = ct.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
alist.add(new Goods(rs.getInt("id"), rs.getString("name"), Double.parseDouble(rs.getString("price"))));
}
} catch (Exception e) {
e.printStackTrace();
}
return alist;
}

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

减少了数据的冗余度,从而大大地节省了数据的存储空间;实现数据资源的充分共享

操作直观,使用灵活,编程方便,环境适应广泛


3. 码云

3.1. 码云代码提交记录

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

201521123007《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. python伪装浏览器爬虫

    待完善 import urllib2,urllib,cookielib urllib.getproxies_registry=lambda:{} request=urllib2.Request(&qu ...

  2. JMeter请求执行次数设置

    今天介绍下JMeter如何控制请求执行次数 主要有两种方式: 方式一:通过循环控制器控制每个请求的执行次数 例如:脚本执行规律是这样的,login-->customerPage-->sea ...

  3. JMeter安装和简介

    1.Apache jmeter 是一个100%的纯java桌面应用,用于压力测试和性能测量.它最初被设计用于Web应用测试但后来扩展到其他测试领域,可以用于对静态的和动态的资源(文件,Servlet, ...

  4. Git初学二(SSH免密)

    在管理Git项目上,初学者使用HTTPS直接克隆项目到本地是最方便的.但是之后的fetch和push代码需要输入账号和密码也是比较烦的. 这章在上一章的基础上,将HTTPS切换成SSH.SSH的优点就 ...

  5. 如何生成转储(dmp)文件--工具篇

    转储文件也就是我们常说的dump文件.可以把转储文件看成软件的某个时刻的一个快照.转储文件一般都是在软件出现问题时手动生成或者程序自动生成.下面我们介绍几种生成转储文件的方法. 1. 任务管理器 任务 ...

  6. VS2015 安装nuget离线包nupkg文件

    最近在做项目进度管理时,想通过安装net.sf.mpxj-for-csharp包读取.mpp格式文件,通过Nuget在线安装时,出现以下情况,无法安装,故开启离线安装道路. 离线安装步骤如下: 一.下 ...

  7. Atomic类和CAS

    说Atomic类之前,先聊一聊volatile. 对volatile的第一印象就是可见性.所谓可见性,就是一个线程对共享变量的修改,别的线程能够感知到. 但是对于原子性,volatile是不能保证的. ...

  8. hdu3081 Marriage Match II(二分+并查集+最大流)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3081 题意: n个女生与n个男生配对,每个女生只能配对某些男生,有些女生相互是朋友,每个女生也可以跟她 ...

  9. Java对象中的finalize()方法使用说明

    我在写java程序的时候,从来没有遇见过是用Object.finalize()的时候,但是在学习Java虚拟机的垃圾回收机制时,虚拟机在进行垃圾回收时需要使用finalize()方法来进行对象清理.下 ...

  10. 12块钱搭建一个ss(包括一个免费服务器)

    AWS搭建ss(shadow socks) 如果你符合以下条件,那么继续看还是有点帮助的: 想搞个服务器(包括windows Linux)(免费) 想科学上网(也免费) 之前也从网上搜过本文内容,但手 ...