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程序设计>第九周学习总结 课堂内容总结 两个类有公用的东西放在父类里. 面向对象的三要素 封装 继承 多态:用父类声明引用,子类生成对象 ...
随机推荐
- Linux内存详解
--Linux内存详解 -----------------2014/05/24 Linux的内存上表现的不像windows那么直观,本文准备详细的介绍一下Linux的内存. 请看这下有linux命令f ...
- java 分解质因数 基础增强
题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 为了熟悉加强基础练习,搞搞经典小demo..话不多说,直接贴代码,看注释.package www.test;import j ...
- 漫谈ELK在大数据运维中的应用
漫谈ELK在大数据运维中的应用 圈子里关于大数据.云计算相关文章和讨论是越来越多,愈演愈烈.行业内企业也争前恐后,群雄逐鹿.而在大数据时代的运维挑站问题也就日渐突出,任重而道远了.众所周知,大数据平台 ...
- 给出打印结果-setTimeout
问题: 请给出打印结果: for(var i=0;i<5;i++){ setTimeout(function(){ console.log(i); },0); } 解析: 考的是setTimeo ...
- Json安全
1.不要使用顶级JSON数组,避免被<script>标签引用. 2.使用POST+密钥获取JSON,尽量不要用GET方式. 3.不要使用eval()将对象放入内存,eval()会执行所传入 ...
- linux source命令与export命令的区别
shell与export命令 用户登录到Linux系统后,系统将启动一个用户shell.在这个shell中,可以使用shell命令或声明变量,也可以创建并运行shell脚本程序.运行shell脚本程序 ...
- ssh框架知识点回顾
=========================================================================================== ======== ...
- Django创建博客
拜读http://www.cnblogs.com/fnng/p/3737964.html 后自操作步骤,mark一下 我的想法: modles.py中只负责添加类,定义数据结构,至于将该类添加到adm ...
- MySql数据库导入导出
1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 存放位置 比如: mysqldump -u root -p project > c:/a. ...
- 使用CefSharp 在C#用户控件中嵌入Chrome浏览器使用方法
CEF(Chromium Embedded Framework, 嵌入式Chromium框架)是C/C++开发的库 目前 Google Chrome(Google浏览器),Chromium浏览器,Op ...