201521123004 《Java程序设计》第 14 周学习总结
0. 本周课程设计发布
1. 本周学习总结
1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容。
1.思维导图如下:
2.补充:
- 数据库
- 为了实现一定目的按某种规则组织起来的“数据”的“集合”
- 关系型数据库系统:使用表(table)来存储数据;使用行(row)区分不同记录,每行代表一条记录,每一行由若干列(column,字段)组成;表中一列中的数据类型必须一致
- 主键:通过主键可以唯一的确定一条记录,也可以通过多个列的联合确定主键
- 数据库的完整性规则
- 关系表中的行必须是唯一的,所以必须有主键,且主键不能为空。
- 列是不可分的
- 某些行的某些列的值可以为null
- 注意:null代表没有赋值,而不是指空值或者0
- MySql数据库简单操作
- 显示所有数据库: show databases;
- 创建数据库: create database test;
- 删除数据库: drop database test;
- 连接数据库: use test;//使用数据库前,要先连接数据库
- 查看当前连接的数据库: select database();
- 当前数据库包含的表: show tables;
- 退出MySQL:quit或exit
- 删除表 drop table students;
- 插入数据 insert into students(stuno,name,gender,birthdate,major,age) values('201010001', 'zhangsan', 'm', '1992-10-01','cs',25);
- 查询表中的数据 select * from students;
- 删除表中数据->删除students表中编号为1 的记录 delete from students where id = 1;
- 常见的SQL语句主要分为两大类:查 与 增、删、改
- 查-select * from students where name='张三'
- 改-update 更新 : update student set name = '李四' where id = 1
- 增-insert 插入:insert into students(stuno,name,gender) values('201500001','李四','m');
- 删-delete 删除:delete from students where id = 1;
- JDBC编程一般步骤
- 装载驱动 //jdbc 4.0不再需要手动加载
- 与数据库建立连接(Connection)
- 向数据库发送SQL语句(statement)
- 获得和处理查询或更新语句返回的结过(注:使用查询语句可获得ResultSet)
- 关闭连接,释放资源
- JDBC的工作原理
- PreparedStatement
- PreparedStatement接口继承自Statement接口
- PreparedStatement比普通的Statement对象使用起来更加灵活,更有效率
- 在SQL字符串中,使用问号(?)作为参数,在运行时动态加载
2. 书面作业
1. MySQL数据库基本操作
建立数据库,将自己的姓名、学号作为一条记录插入。(截图,需出现自己的学号、姓名)
在自己建立的数据库上执行常见SQL语句(截图)
-参考:实验任务书-题目1
答:操作过程截图如下,其中红色的字为注释
2. 使用JDBC连接数据库与Statement
2.1 使用Statement操作数据库。(粘贴一段你认为比较有价值的代码,出现学号)
//201521123004
Connection con = null;
Statement statement = null;
ResultSet rs = null;
try {
int resultNum = 0;
String driverName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GBK";
String userName = "root";
String password = "123456";
try {
Class.forName(driverName); //加载MySql的驱动程序,jdbc4.0不再需要
} catch (ClassNotFoundException e) {
System.out.println("无法找到驱动类");
}
//连接test数据库,userUnicode和characterEncoding是正常插入中文所需要的,用户名为root,密码为123456
con = DriverManager
.getConnection(url,userName,password);
//演示如何插入记录
String strSql = "insert into students(stuno,name,gender,birthdate,major,age) values('201010005', '周杰伦', 'm',now(),'音乐',21);";
statement = con.createStatement();
resultNum = statement.executeUpdate(strSql);
System.out.println(resultNum+"条记录已经插入");
//第一次执行Sql语句完,因为后面还要执行sql语句,所以不需要把statement和connection关闭
//下面演示如何删除记录
strSql = "delete from students where id='2'";//删除id=2的数据
resultNum = statement.executeUpdate(strSql);
System.out.println(resultNum+"条记录删除完毕");
//下面演示如何更新记录
strSql = "update students set major='中文' where id='1'";//更新id=2的数据
resultNum = statement.executeUpdate(strSql);
System.out.println(resultNum+"条记录更新完毕");
//数据库现有记录数
strSql = "select count(*) from students";//查询news表中的记录数量
rs = statement.executeQuery(strSql);
if(rs.next()){
resultNum = rs.getInt(1);//取出第一列的值,注意:返回只有一列
System.out.println("数据库存在"+resultNum+"条记录数据库");
}
//数据库中存在如下记录
//strSql = "select * from news";
strSql = "select stuno,name,birthdate,major from students";
rs = statement.executeQuery(strSql);
System.out.println("学号\t\t姓名\t出生日期\t\t专业");
while(rs.next()){
System.out.print(rs.getString("stuno")+"\t");//根据列名取值
System.out.print(rs.getString(2)+"\t");//根据列的顺序取值,如name在上述Sql语句中的第2列
System.out.print(rs.getDate("birthdate")+"\t");//根据列名取值
System.out.print(rs.getString(4)+"\t\n");//根据列的顺序取值,如major在第4列
}
} catch (SQLException sqlE) {
sqlE.printStackTrace();
} finally {
System.out.println("释放所有资源....");
try {
if (con != null)
con.close();//关闭连接
con = null; //促使GC尽快回收资源
} catch (Exception ex) {
ex.printStackTrace();
}
}
2.2 使用JDBC操作数据库主要包含哪几个步骤?
-参考:实验任务书-题目2
一般步骤:
1.装载驱动 //jdbc 4.0不再需要手动加载
2.与数据库建立连接(Connection)
3.向数据库发送SQL语句(statement)
4.获得和处理查询或更新语句返回的结果
注:使用查询语句可获得ResultSet
5.关闭连接,释放资源
- 在Eclipse中导入连接数据库所需要的jar文件。
- 步骤
- a. 在项目下新建lib目录
- b. 将相关jar包拷贝到lib目录
- c. 在项目的Build Path中导入该jar包
- d. 在项目中导入ConnectMySQL.java,尝试运行。
- 常见问题:
- No suitable driver found….-没有导入相应的数据库驱动jar包
- Access denied….-一般是用户名密码错误
- Table xxx doesn’t exist..-xxx表不存在,一般来说是表名写错
- unknown column xxx in ‘field list’-列名xxx不在表中,一般来说是列名写错
- 使用Statement操作数据库
小技巧:在java代码中编写SQL语句之前,先在MySQL命令行下调试好SQL语句。
- 编写如下方法:
- public static void displayAll(){....} //显示所有学生的学号、名字和出生时间,select
- public static int insert(Student stu){.....} //插入学生,insert
- public static void displayAllOrderByIdDesc(int id){.....} //打印出学生的ID号、姓名和出生年日期,并按id降序排列。
- public int deleteStudent(int id){....} //按id删除某个学生,返回值为删除学生的个数,delete
- public static int updateStudentAge(){...}//将每个学生的年龄+1,update语句
- 编写如下方法:
3. PreparedStatement与参数化查询
3.1 使用PreparedStatement根据用户指定的查询条件进行查询。(粘贴一段你认为比较有价值的代码,出现学号)
Connection con = null;
Statement statement = null;
ResultSet rs = null;
try {
int resultNum = 0;
String driverName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GBK";
String userName = "root";
String password = "123456";
try {
Class.forName(driverName); //加载MySql的驱动程序,jdbc4.0不再需要
} catch (ClassNotFoundException e) {
System.out.println("无法找到驱动类");
}
//连接test数据库,userUnicode和characterEncoding是正常插入中文所需要的,用户名为root,密码为123456
con = DriverManager
.getConnection(url,userName,password);
//插入记录
String strSql = "insert into students(stuno,name,age,birthdate) values(?,?,?,?);";
statement = con.createStatement();
resultNum = statement.executeUpdate(strSql);
System.out.println(resultNum+"条记录已经插入");
//第一次执行Sql语句完,因为后面还要执行sql语句,所以不需要把statement和connection关闭
//删除记录
strSql = "delete from students where id='2'";//删除id=2的数据
resultNum = statement.executeUpdate(strSql);
System.out.println(resultNum+"条记录删除完毕");
//更新记录
strSql = "update students set major='中文' where id='1'";//更新id=2的数据
resultNum = statement.executeUpdate(strSql);
System.out.println(resultNum+"条记录更新完毕");
//数据库现有记录数
strSql = "select count(*) from students";//查询news表中的记录数量
rs = statement.executeQuery(strSql);
if(rs.next()){
resultNum = rs.getInt(1);//取出第一列的值,注意:返回只有一列
System.out.println("数据库存在"+resultNum+"条记录数据库");
}
//数据库中存在如下记录
//strSql = "select * from news";
strSql = "select stuno,name,birthdate,major from students";
rs = statement.executeQuery(strSql);
System.out.println("学号\t\t姓名\t出生日期\t\t专业");
while(rs.next()){
System.out.print(rs.getString("stuno")+"\t");//根据列名取值
System.out.print(rs.getString(2)+"\t");//根据列的顺序取值,如name在上述Sql语句中的第2列
System.out.print(rs.getDate("birthdate")+"\t");//根据列名取值
System.out.print(rs.getString(4)+"\t\n");//根据列的顺序取值,如major在第4列
}
} catch (SQLException sqlE) {
sqlE.printStackTrace();
} finally {
System.out.println("释放所有资源....");
try {
if (con != null)
con.close();//关闭连接
con = null; //促使GC尽快回收资源
} catch (Exception ex) {
ex.printStackTrace();
}
}
3.2 批量更新-批量插入1000个学生,统计整个操作所消耗的时间。(使用方法executeBatch
)
1.关键代码
2.时间统计
参考:实验任务书-题目3
4. JDBCUtil与DAO
4.1 粘贴一段你认为比较有价值的代码,出现学号
1.将数据写入表格
2.将表中数据读出
3.输出表中全部信息
4.2 使用DAO模式访问数据库有什么好处?
1.使用AO模式访问数据库就不需要关心参数是什么类型,在之后对程序的修改,只需对DAO模式中的某个方法修改即可,不需要整个项目都进行修改。
2.相对于servlet,DAO的存在大部分是为了理清思路,代码简洁易懂,将各个部分的代码分开写,思路要清更加晰些,而且方便维护
5. 使用数据库改造购物车系统
5.1 使用数据库改造以前的购物车系统(应有图形界面)。如果以前为完成购物车系统,可编写基于数据库的学生管理系统。包括对学生的增删改查,要求使用。
1.数据库Book表
2.表的创建
id int not null primary key auto_increment,
name char(12) not null,
price double not null,
num int not null);
3.数据插入
insert into Book(name,price,num) values('java',100.00,15);
3.图形界面
5.2 相比较使用文件,使用数据库存储与管理数据有何不一样?
首先,数据库存储比文件存储能更方便与程序结合;
其次,一旦数据量庞大,用文件管理对数据进行操作是十分吃力的,好比大海捞针,但是相反,数据库对于大量的数据也能很高效;
再者,数据库相对于文件会更安全。
选做: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基本使用方法
201521123004 《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程序设计>第九周学习总结 课堂内容总结 两个类有公用的东西放在父类里. 面向对象的三要素 封装 继承 多态:用父类声明引用,子类生成对象 ...
随机推荐
- xhost和DISPLAY
xhost是用来控制X server访问权限的. 通常当你从hostA登陆到hostB上运行hostB上的应用程序时,做为应用程序来说,hostA是client,但是作为图形来说,是在hostA上显示 ...
- Go语言中函数的实现
Go 语言函数 函数是基本的代码块,用于执行一个任务. Go 语言最少有个 main() 函数. 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务. 函数声明告诉了编译器函数的名称,返回 ...
- 为什么我们要使用Async、Await关键字
前不久,在工作中由于默认(xihuan)使用Async.Await关键字受到了很多质问,所以由此引发这篇博文“为什么我们要用Async/Await关键字”,请听下面分解: Async/Await关键字 ...
- destoon源码分析一
#0x01 先记录一些之前模糊的小知识点,补充一下 set_magic_quotes_runtime() -- 设置magic_quotes_runtime配置激活状态(php 5.3 被弃用,php ...
- centos7破解mariadb密码
第一步,停止运行mysql: systemctl stop mariadb.service 第二步,使用" -skip-grant-tables"参数重新启动mysql: mysq ...
- easyUI自带的时间插件日期选择、月份选择、时间选择的使用(转)
1.日期选择 只要将class设置成easyui-datebox就可以了,当然前提是已经应用了easyui的js <input type="text" class=" ...
- [js高手之路]使用原型对象(prototype)需要注意的地方
我们先来一个简单的构造函数+原型对象的小程序 function CreateObj( uName, uAge ) { this.userName = uName; this.userAge = uAg ...
- 80C51学习 闪烁灯
//引入头文件 #include <reg52.h> typedef unsigned char u8; typedef unsigned int u16; //位定义 sbit LED= ...
- 你所不知道的 CSS 动画技巧与细节
怕标题起的有点大,下述技巧如果你已经掌握了看看就好,欢迎斧正,本文希望通过介绍一些 CSS 不太常用的技巧,辅以一些实践,让读者可以更加深入的理解掌握 CSS 动画. 废话少说,直接进入正题,本文提到 ...
- Andrew Ng机器学习课程笔记--汇总
笔记总结,各章节主要内容已总结在标题之中 Andrew Ng机器学习课程笔记–week1(机器学习简介&线性回归模型) Andrew Ng机器学习课程笔记--week2(多元线性回归& ...