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程序设计>第九周学习总结 课堂内容总结 两个类有公用的东西放在父类里. 面向对象的三要素 封装 继承 多态:用父类声明引用,子类生成对象 ...
随机推荐
- android学习笔记WebView的基本使用
WebView可以看做是一个浏览器,它使用了WebKit渲染引擎加载显示网页. WebView的使用需要掌握下面几点, 1,首先需要开启应用网络访问权限 在AndroidMinafest.xml中添加 ...
- 删除oracle数据库[转]
--===================== -- 手动删除oracle数据库 --===================== 在很多情况下,或无法使用dbca工具的时候,我们需要手动来删除数据库. ...
- Vue内容分发slot
前面的话 为了让组件可以组合,需要一种方式来混合父组件的内容与子组件自己的模板.这个过程被称为 内容分发 (或 “transclusion” ).Vue实现了一个内容分发 API,参照了当前 Web ...
- GitHub Student Developer Pack创建个人网站
链接:https://zhuanlan.zhihu.com/p/20531579 这个开发包里有什么?作为学生开发者,如何最大化利用它的价值? Atom编辑器,GitHub推出的编辑器,和Sublim ...
- 安装完iis后本机用IP可以访问,别的电脑不能访问
局域网IIS无法访问的解决方法 无法访问局域网内其它电脑中的IIS,自己可以访问,但别的电脑不行一般发生这种情况时操作系统是XP第二版. 具体操作如下:1.打开控制面版2.打开Windows防火墙 5 ...
- C++中的继承(3)作用域与重定义,赋值兼容规则
作用域与重定义(同名隐藏) 一样的,先上代码 1 class A 2 { 3 public: 4 int a_data; 5 void a() 6 { 7 cout << "A& ...
- 关于视频编辑SDK的接入说明
一.运行环境 Android 4.1(api 16)以上: 处理器:双核 1GHz以上CPU(目前只支持ARM CPU, X86.MIPS暂不支持):推荐四核1.2GHz以上CPU 内存:1 GB以上 ...
- 微服务架构下的API网关
顾名思义,是出现在系统边界上的一个面向API的.串行集中式的强管控服务,这里的边界是企业IT系统的边界,主要起到隔离外部访问与内部系统的作用.在微服务概念的流行之前,API网关的实体就已经诞生了,例如 ...
- 复杂JSON反序列化为类对象
有3种常用的反序列化库,gson和fastjson都很棒,json-lib有很大的局限性不推荐使用! 1. net.sf.json(json-lib) 只能用于解析简单的JSON,稍微复杂点的例如,类 ...
- Unresolved reference issue in PyCharm
Add src as a source content root: Then make sure to add add sources to your PYTHONPATH: Now imports ...