1. 本章学习总结

2. 书面作业

1. MySQL数据库基本操作

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

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

利用MySQL workbench进行操作,其自动生成语句帮助建库。

增删查改都借由图形化界面生成代码即可。

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

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

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

2.1

采用maven管理项目,添加Mysql依赖。

    </dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
</dependencies>

代码如下:

//201521123055

public DBHelper() {                       //连接数据库
try {
Driver driver = new com.mysql.cj.jdbc.Driver();
DriverManager.registerDriver(driver);
String url = "jdbc:mysql://localhost:3306/student?serverTimezone=UTC&useSSL=false";
String user = "root";
String password = "123456";
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
} public void searchByStm()
{ //遍历输出 try {
statement=conn.createStatement();
ResultSet rs = statement.executeQuery(querySql);
while(rs.next())
{
String uname = rs.getString(1);
String uid = rs.getString(2);
System.out.println(uid + "\t" + uname );
}
}catch(Exception e)
{
e.printStackTrace();
} }

2.2

1.加载数据库所需驱动到JVM

2.提供JDBC所连接的URL

3.创建连接

4.创建Statement实例

5.执行sql语句

6.关闭JDBC对象

3. PreparedStatement与参数化查询

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

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

3.1

//201521123055
public void searchByPst()
{
ArrayList<Long> arr=new ArrayList<Long>();
try{
pst=conn.prepareStatement(querySql);
rs=pst.executeQuery();
while(rs.next())
{
arr.add(rs.getLong("ID"));
}
System.out.println(arr);
this.pst.close();
}catch (Exception e)
{
e.printStackTrace();
}
}

3.2

做一个简单的时间测试,就不动用junit了(其实是我还在熟悉IDEA的maven配置下junit的使用...)

public void addByPst()
{
String sql= "insert into lin (Name,ID) values(?,?)";
try{
pst=conn.prepareStatement(sql);
long btime=System.currentTimeMillis();
for(int i=0;i<1000;i++)
{
pst.setString(1,"lin");
pst.setString(2,"100");
int n=pst.executeUpdate();
}
long atime=System.currentTimeMillis();
System.out.println(atime-btime+"ms");
pst.close();
}catch (Exception e)
{
e.printStackTrace();
}
}

4. JDBCUtil与DAO

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

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

4.1

StudentDao类代码:

//201521123055
class StudentDao
{ public Connection conn = null;
public Statement statement = null;
public PreparedStatement pst=null;
public ResultSet rs=null;
private static String querySql ="select * from lin"; public StudentDao() {
try {
Driver driver = new com.mysql.cj.jdbc.Driver();
DriverManager.registerDriver(driver);
String url = "jdbc:mysql://localhost:3306/student?serverTimezone=UTC&useSSL=false";
String user = "root";
String password = "123456";
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
} public boolean add(Student stu)
{
boolean flag=true;
String sql= "insert into lin (Name,ID) values(?,?)";
try{
pst=conn.prepareStatement(sql);
pst.setString(1,stu.name);
pst.setInt(2,stu.id);
int i=pst.executeUpdate();
if(i==0){
flag=false;
} }catch (Exception e)
{
e.printStackTrace();
}
finally {
try {
pst.close();
}catch(SQLException e) {}
} return flag;
} public boolean delete(Student stu)
{
boolean flag=true;
String sql="delete from user where id=?";
try{
pst=conn.prepareStatement(sql);
pst.setInt(1,stu.id);
int i=pst.executeUpdate();
if(i==0){
flag=false;
}
}catch(Exception e)
{
e.printStackTrace();
}
finally {
try {
pst.close();
}catch(SQLException e) {}
} return flag;
} public boolean update(Student stu)
{
boolean flag=true;
String sql="update lin set Name=? where ID=?";
try{
pst=conn.prepareStatement(sql);
pst.setString(1,stu.name);
pst.setInt(2,stu.id);
int i=pst.executeUpdate();
if(i==0){
flag=false;
}
}catch (Exception e)
{
e.printStackTrace();
}
finally {
try {
pst.close();
}catch(SQLException e) {}
} return flag;
} public List<Student> findAll()
{
List<Student> students=new ArrayList<Student>();
try{
pst=conn.prepareStatement(querySql);
rs=pst.executeQuery();
while(rs.next())
{
students.add(new Student(rs.getString("Name"),rs.getInt("ID")));
}
}catch (Exception e)
{
e.printStackTrace();
}
finally {
try {
rs.close();
pst.close();
}catch(SQLException e) {}
} return students;
} public Student findById(int id)
{
Student stu=new Student();
String sql="SELECT * FROM lin where id=?"; try{
pst=conn.prepareStatement(sql);
pst.setInt(1,id);
rs=pst.executeQuery();
stu.name=rs.getString("Name");
stu.id=rs.getInt("ID");
}catch(Exception e)
{
e.printStackTrace();
}
finally{
try {
rs.close();
pst.close();
}catch(SQLException e) {}
} return stu; } public List<Student> findByName(String name)
{
String sql="SELECT * FROM lin where Name like \"?%\"";
List<Student> students=new ArrayList<Student>();
try{
pst=conn.prepareStatement(sql);
pst.setString(1,name);
rs=pst.executeQuery();
while(rs.next())
{
students.add(new Student(rs.getString("Name"),rs.getInt("ID")));
}
}catch (Exception e)
{
e.printStackTrace();
}
finally {
try{
rs.close();
pst.close();
}catch (SQLException e){}
} return students;
}
}

4.2

使用DAO模式集成了各类操作,形成一个工具类,这样操作的优势之前就以前说过,在于将操作集中于一个工具类,方便用户调用,并且通过写成私有方法并提供外部调用的入口,这样写安全可靠。

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

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

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

5.1

用搜索功能做一个示范:

public List<Commodity> findByName(String name)
{
String sql="SELECT * FROM Commodity where Name like \"?%\"";
List<Commodity> students=new ArrayList<Commodity>();
try{
pst=conn.prepareStatement(sql);
pst.setString(1,name);
rs=pst.executeQuery();
while(rs.next())
{
students.add(new Commodity(rs.getInt("ID")rs.getString("Name"),rs.getDouble("Price")));
}
}catch (Exception e)
{
e.printStackTrace();
}
finally {
try{
rs.close();
pst.close();
}catch (SQLException e){}
} return students;
}

图形界面没什么变化,主要是存储数据的方式发生了改变。

5.2

数据库方便管理,并且读取速度快效率高,容量极大。最关键最关键的还是快这个优势,如果是简单的数据存储,那用excel就可以,但作为一些软件的后台数据管理,就必须利用数据库进行操作。

6. 批量更新测试

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

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

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

6.1

就拿10000条做测试了。。

public void batchupdate()
{ try {
long btime=System.currentTimeMillis();
statement=conn.createStatement();
for (int i = 0; i < 10000; i++) { String sql = "insert into lin (Name,ID) values(\"lin\","+i+")";
statement.addBatch(sql); } statement.executeBatch();
long atime=System.currentTimeMillis();
System.out.println(atime-btime+"ms"); }catch(Exception e)
{
e.printStackTrace();
}
finally {
try {
statement.close();
}catch (SQLException e){}
} }

运行时间为:9187ms

6.2

每条数据插入时间:0.9187ms

1kb数据插入时间:5.919ms

(SELECT sum(DATA_LENGTH)+sum(INDEX_LENGTH) FROM information_schema.TABLES where TABLE_SCHEMA='数据库名';

此命令用于查询数据库大小,得到的结果为字节数,自行运算可得到kb或Mb)

7. 事务处理

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

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

7.1

//201521123055
public 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 {
pst = conn.prepareStatement(sql1);
conn.setAutoCommit(false);
if (a.balance - x >= 0) {
pst.setDouble(1, a.balance - x);
pst.setString(2, a.name);
pst.executeUpdate();
pst = conn.prepareStatement(sql2);
pst.setDouble(1, b.balance + x);
pst.setString(2, b.name);
pst.executeUpdate();
conn.commit();
conn.setAutoCommit(true);
} else throw (new Exception("余额不足"));
}catch (Exception e)
{
conn.rollback();
e.printStackTrace();
}
finally {
pst.close();
}
}

7.2

Java通过JDBC与数据库进行交互,这是一个如今多数程序员都不会直接使用的技术,我们更倾向于使用hibernate和Mybatis,Java的事务处理之所以这么简单是因为框架在背后为我们做了太多的工作。这样,我们虽然可以快速地完成开发工作,但是一旦程序出现问题,在一阵google和stackoverflow之后,你估计还是一筹莫展。作为一个有技术追求的程序员,你应该了解Java事务的底层工作原理。

为了安全性以及代码的调试来看,事务处理还是必须得学习以及应用。

3. 码云

3.1. 码云代码提交记录

201521123055 《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. Xcode部分快捷键

    编译调试: command+B 编译 command+R 编译并运行 command+shift+O 单步调试 command+shift+I 执行进入函数 command+shift+T 执行跳出函 ...

  2. 新入门的小白,整理一下特别简单实用的div+css兼容性的问题。

    最近整理了一下特别简单的div+css的不同浏览器的兼容性的问题,跟大家分享一下,只适合刚入门的新手,欢迎大牛们给提出意见. 1. 默认的内外边距不同 问题: 各个浏览器默认的内外边距不同 解决: * ...

  3. JVM内存概览与GC初步

    一.JVM内存空间概览 Java虚拟机使用的内存块包含 栈空间Stack (虚拟机栈.本地方法栈).堆空间 Heap Memory .永久区 Perm Gen(related to method ar ...

  4. python中列表 元组 字典 集合的区别

    列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计 ...

  5. 23个适合Java开发者的大数据工具和框架

    转自:https://www.yidianzixun.com/article/0Ff4gqZQ?s=9&appid=yidian&ver=3.8.4&utk=6n9c2z37 ...

  6. Django创建应用、模型、配置后台自动管理

    1.创建应用 python manage.py startapp myblog 2.应用结构 3.创建模型(models.py) from django.db import models # Crea ...

  7. 微信小程序实例--仿豆瓣电影

    最近不想写论文,就想捣鼓点新东西吧,就边看官方文档,花了3天时间写了一个简单的仿豆瓣电影的微信小程序,给大家分享一下教程吧. 源码&效果图 源码点击这里,欢迎star 运行方法: 下载微信we ...

  8. Gitlab-CI持续集成之Runner配置和CI脚本

    p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; f ...

  9. ctf常见php弱类型分析

    1. 布尔反序列化 $unserialize_str = $_POST['password']; $data_unserialize = unserialize($unserialize_str); ...

  10. snowflake主键生成策略

    1.snowflake简介 在分布式系统中,我们需要各种各样的ID,既然是ID那么必然是要保证全局唯一,除此之外,不同当业务还需要不同的特性,比如像并发巨大的业务要求ID生成效率高,吞吐大:比如某些银 ...