201521123055 《Java程序设计》第14周学习总结
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周学习总结的更多相关文章
- 2018面向对象程序设计(Java)第14周学习指导及要求
2018面向对象程序设计(Java)第14周学习指导及要求(2018.11.29-2018.12.2) 学习目标 (1) 掌握GUI布局管理器用法: (2) 掌握各类Java Swing组件用途及 ...
- 面向对象程序设计(JAVA) 第14周学习指导及要求
2019面向对象程序设计(Java)第14周学习指导及要求 (2019.11.29-2019.12.2) 学习目标 (1)掌握GUI布局管理器用法: (2)掌握Java Swing文本输入组件用途 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 201521123038 《Java程序设计》 第九周学习总结
201521123038 <Java程序设计> 第九周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 ...
- 20155303 2016-2017-2 《Java程序设计》第二周学习总结
20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...
- 20175221 2018-2019-2 《Java程序设计》第一周学习总结
20175221 2018-2019-2 <Java程序设计>第一周学习总结 教材学习内容总结 本周通过观看书本配套视频,学到了如解释器,编译器等一些简单概念. 还懂得了java的一些简单 ...
- 20175314 《Java程序设计》第九周学习总结
20175314 <Java程序设计>第九周学习总结 教材学习内容总结 根据课本的介绍下载了MySQL和Navicat for MySQL并成功对后者进行破解 MySQL客户端管理工具(如 ...
- 20175314 《Java程序设计》第二周学习总结
20175314 <Java程序设计>第二周学习总结 教材学习内容总结 我在APPstore上发现了一个可以支持我们在IOS系统上学习实践Java程序的开发环境,只需要购买专业版就可以使用 ...
- 20155312 2016-2017-2 《Java程序设计》第九周学习总结
20155312 2016-2017-2 <Java程序设计>第九周学习总结 课堂内容总结 两个类有公用的东西放在父类里. 面向对象的三要素 封装 继承 多态:用父类声明引用,子类生成对象 ...
随机推荐
- 常见C++面试题及基本知识点总结(一)
[转载请注明出处]:http://www.cnblogs.com/LUO77/p/5771237.html 1. 结构体和共同体的区别. 定义: 结构体struct:把不同类型的数据组合成一个整体, ...
- JavaScript入门(一)
一.什么叫JS? 1.JS的概念JS,是JavaScript的缩写形式,而JavaScript是一种基于对象和事件驱动并且具有相对安全性的客户端脚本语言.它在Web开发中JS占据着举足轻重的地位,所有 ...
- 立即表达式的多种写法与注意点以及in操作符的作用
立即表达式,在javascript中非常常见, 采用立即表达式可以形成一个局部作用域, 常配合闭包实现模块化编程等其他用途,接下来我们看看,在大多数的框架中,立即表达式都有哪些写法,以及需要注意的点, ...
- Linux下进程描述(1)—进程控制块
进程概念介绍 进程是操作系统对运行程序的一种抽象. • 一个正在执行的程序: • 一个正在计算机上执行的程序实例: • 能分配给处理器并由处理器执行的实体: • 一个具有普以下特征的活动单元:一组指令 ...
- Android手机客户端测试点(全)
网上看到一个整理比较完善的手机客户端测试:
- cat命令汇总整理
Cat命令:一般用作打开文件,查看文件内容(可以一次查看多个文件),参数有如下几个: -a 或 –all,显示全部 -b 或--number-nonblank 对非空输出行编号 -n 或 --numb ...
- react+flux编程实践(一) 基础篇
1. React概览 最初听到React而还未深入了解它时,大多数人可能和我的想法一样:难道又是一个新的MVC/MVVM前端framework?深入了解后发现不是这么一回事,React关注的东西很单纯 ...
- 2017-04-21周C语言学习笔记
C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...
- Oracle异常汇总
持续更新中,可参见https://hnuhell.gitbooks.io/oracle_errmg/content/或https://hnuhell.github.io/Oracle_ERRMG/上的 ...
- Druid使用记录
最近项目稳定下来,就像折腾一下看看系统的运行情况,但是我们搞java的毕竟不是专业运维,看看数据库的运行情况就ok了. 1 Druid介绍 官方地址 https://github.com/alibab ...