JDBC
一、引言

1.1 如何操作数据

使用客户端工具访问数据库,需要手工建立链接,输入用户名和密码登录,编写SQL语句,点击执行,查看操作结果(结果集或受影响行数)。

1.2 实际开发中,会采用客户端操作数据库吗?

在实际开发过程中,当用户的数据发生改变时,不可能通过客户端操作执行SQL语句,因为操作量过大!无法保证效率和正确性

二、JDBC(Java DataBase Connectivity)

2.1 什么是JDBC?

JDBC(Java DataBase Connectivity) Java连接数据库,可以使用Java语言连接数据库完成CRUD操作

2.2 JDBC核心思想

Java中定义了访问数据库的接口,可以为多种关系型数据库提供统一的访问方式。

由数据库厂商提供驱动实现类(Driver数据库驱动)

2.2.1 MySQL数据库驱动

mysql-connector-java-5.1.X 适用于5.X版本
mysql-connector-java-8.0.X 适用于8.X版本
2.2.2 JDBC API

JDBC 是由多个接口和类进行功能实现

类型 全限定名 简介
class java.sql.DriverManager 管理多个数据库驱动类,提供了获取数据库连接的方法
interface java.sql.Connection 代表一个数据库连接(当Connection不是NULL时,表示已连接一个数据库)
interface java.sql.Statement 发送SQL语句到数据库的工具
interface java.sql.ResultSet 保存SQL查询语句的结果数据(结果集)
class java.sql.SQLException 处理数据库应用程序时所发生的异常

2.3 环境搭建

在项目下新建 lib 文件夹,用于存放 jar 文件
将MySQL驱动文件mysql-connector-java-5.1.25-bin.jar 复制到项目的lib文件夹中
选中lib文件夹 右键选择 add as library,点击OK
三、JDBC开发步骤【重点】

3.1 注册驱动

使用Class.forName(“com.mysql.jdbc.Driver”); 手动加载字节码文件到JVM中

Class.forName(“com.mysql.jdbc.Driver”);
1
3.2 连接数据库

通过DriverManager.getConnection(url,user,password);获得数据库连接对象

URL:jdbc:mysql://localhost:3306/database

user:root

password:1234

Connection connection = DriverManager.getConnection(“jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8”,“root”,“1234”);

URL(Uniform Resource Locator)统一资源定位符:由协议、IP、端口、SID(程序实例名称)组成

3.3 获取发送SQL的对象

通过Connection对象获得Statement对象,用于对数据库进行通用访问的

Statement statement = connection.createStatement();
1
3.4 执行SQL语句

编写SQL语句,并执行,接收执行后的结果

int result = statement.executeUpdate(“update stu set student_name=‘高强’,sex=‘女’ where student_id = ‘S1003’”);
1
注意:在编写DML语句时,一定要注意字符串参数的符号是单引号 ‘值’
DML语句:增、删、改时,执行的结果是受影响行数(int类型)。
DQL语句:查询时,返回的是数据结果集(ResultSet结果集)
3.5 处理结果

接收并处理操作结果

if(result > 0){
System.out.println(“执行成功”);
}
1
2
3
受影响行数:逻辑判断,方法返回
查询结果集:迭代、依次获取
3.6 释放资源

遵循的是先开后关的原则,释放过程中用到的所有资源对象

statement.close();
connection.close();
3.7 综合案例

综合核心六步,实现增删改

 public static void main(String[] args)throws Exception {//1.注册驱动Class.forName("com.mysql.jdbc.Driver");//2.连接数据库String url = "jdbc:mysql://localhost:3306/companydb?useUnicode=true&characterEncoding=utf8";String user = "root";String password="1234";Connection connection=DriverManager.getConnection(url,user,password);//3.获取发送SQL的对象Statement statement = connection.createStatement();//4.编写SQL语句,执行SQL语句(返回受影响行数)//新增
//        String sql = "insert into stu(student_id,student_name,sex,birthday,phone,GradeId) values ('S1005','高强','女','1999-09-09','15612341234',3)";
//        String sql = "delete from stu where student_id = 'S1005'";删除//修改String sql = "update stu set student_name='高强',sex='女' where student_id = 'S1003'";int result = statement.executeUpdate(sql);//5.处理数据if(result > 0){System.out.println("执行成功!");}//6.释放资源 先开后关statement.close();connection.close();}

四、 ResultSet(结果集)

在执行查询SQL后,存放查询到的结果集数据

4.1 接收结果集

ResultSet rs = statement.executeQuery(sql)

ResultSet rs = statement.executeQuery(“SELECT * FROM stu”);
1
4.2 遍历ResultSet中的数据

ResultSet以表(Table)结构进行临时结果的存储,需要通过JDBC API将其中的数据进行依次获取

数据行指针:初始位置在第一行数据前,每调用一次boolean next()方法,ResultSet中指针向下移动一行,结果为true,表示当前行有数据

rs.getXxx(“列名”); 根据列名获得数据

rs.getXxx(整数下标); 代表根据列的编号顺序获得!从1开始

boolean next() throws SQLException;//判断rs结果集中下一行是否有数据

4.2.1 遍历方法

int getInt(int columnIndex) throws SQLException;//获得当前行的第N列的int值
int getInt(String columnLabel) throws SQLException;//获得当前行columnLabel列的int值
1
2
注意:列的编号从1开始
4.3 综合案例

对stu表所有的数据进行遍历

4.3.1 根据列的名称获取

package com.qf.day42.t2.basic;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class TestDql {public static void main(String[] args)  throws Exception{//1.注册驱动Class.forName("com.mysql.jdbc.Driver");//2.获得连接Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/companydb?useUnicode=true&characterEncoding=utf8","root","1234");//3.获取执行SQL的对象Statement statement = connection.createStatement();//4.编写SQL语句String sql = "select student_id,student_name,sex,birthday,phone,GradeId from stu;";ResultSet resultSet = statement.executeQuery(sql);//5.处理结果 (结果集!)while(resultSet.next()){//判断结果集中是否有下一行!//根据列名获取当前行每一列的数据String student_id = resultSet.getString("student_id");String student_name = resultSet.getString("student_name");String sex = resultSet.getString("sex");String birthday = resultSet.getString("birthday");String phone = resultSet.getString("phone");int gradeId = resultSet.getInt("gradeId");System.out.println(student_id+"\t"+student_name+"\t"+sex+"\t"+birthday+"\t"+phone+"\t"+gradeId);}//6.释放资源resultSet.close();statement.close();connection.close();}
}

4.3.2 根据列的下标获取

 //5.处理结果 (结果集!)while(resultSet.next()){//判断结果集中是否有下一行!//根据列的编号获取当前行每一列的数据String student_id = resultSet.getString(1);String student_name = resultSet.getString(2);String sex = resultSet.getString(3);String birthday = resultSet.getString(4);String phone=  resultSet.getString(5);int gradeId  = resultSet.getInt(6);System.out.println(student_id+"\t"+student_name+"\t"+sex+"\t"+birthday+"\t"+phone+"\t"+gradeId);}

五、常见错误

java.lang.ClassNotFoundException 找不到类(类名书写错误、没有导入jar包)

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException 与SQL语句相关的错误(表名列名书写错误、约束错误、插入的值是String类型,但是没有加单引号)建议:在客户端工具中测试sql语句后,再粘贴到代码中来
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry ‘S1003’ for key ‘PRIMARY’ 原因:主键值已存在!更改要插入的主键值
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Unknown column ‘password’ in
可能输入的值的类型不对,确定插入元素时,对应的值的类型是否争取
六、综合案例【登录】

6.1 创建表

创建一张用户表 User
id 主键、自动增长
username 字符串类型 非空
password 字符串类型 非空
phone 字符串类型
插入2条测试语句
6.2 实现登录

通过控制台,用户输入用户名和密码
用户输入的用户名和密码作为参数,编写查询SQL语句。
如果查询到用户,则用户存在,提示登录成功,反之,提示失败!
七、SQL注入问题

7.1 什么是SQL注入

当用户输入的数据中有SQL关键字或语法时,并且参与了SQL语句的编译,导致SQL语句编译后条件结果为true,一直得到正确的结果。称为SQL注入

7.2如何避免SQL注入

由于编写的SQL语句,是在用户输入数据后,整合后再编译成SQL语句。所以为了避免SQL注入的问题,使SQL语句在用户输入数据前,SQL语句已经完成编译,成为了完整的SQL语句,再进行填充数据

HTML

一、HTML简介

1.1 HTML概述

HTML全称:Hyper Text Markup Language(超文本标记语言)

HTML是一门用户创建网页文档的标记语言,网页本身是一种文本文件,在文本文件中添加标记符。

浏览器来解析HTML标记的内容(文字的处理,画面排版安排,图片如何显示、音频、视频等等)

HTML是用来创建网页的标记语言

1.2 HTML特点

1、简易性:超文本标记语言的版本升级采用的超集方式。更加方便灵活

2、可扩展性:超文本标记语言采取的子类元素的方式,为系统扩展带来保证

3、平台无关性:

4、通用性:HTML是网络的通用语言,一种简单、通用的标记语言。

1.3 HTML的发展

超文本标记语言(第一版)------1993年6月作为互联网工程小组(IETF)工作草案发布(并非标准)

HTML2.0 --1995年11月

HTML3.2 --1997年1月14日,W3C标准

HTML4.0 --1997年12月18日 W3C标准

HTML4.01 --1999年12月24日 W3C的推荐标准

HTML5 —2014年10月29日,W3C推荐标准

1.4 HTML基本结构


<!-- 文档声明:告诉浏览器使用HTML5版本解析 -->
<!DOCTYPE html>
<html><!--网页的头部 --><head><!--页面的字符集编码 --><meta charset="utf-8" /><!-- 页面的标题 --><title>我的页面</title></head><!-- 网页的主题,显示的部分--><body>展示的内容</body>
</html>

1、HTML页面包含头部head和主体body

2、HTML标签通常是成对出现的,有开始标签,有结束标签,称为对标签。没有结束标签的为 空标签

3、HTML标签都长都有属性,格式:属性名 = “属性值” 属性名 = “属性值”。多个属性用空格间隔

4、HTML标签不区分大小写,建议小写

5、HTML文件后缀名为html或htm

二、HTML基本标签

2.1 结构标签

<html></html>:根标签
<head> :头标签<title></title>页面的标题
</head>
<body>:主体标签:显示网页内容</body>

属性:

color:文本的颜色

bgColor:背景色

background:背景图片

颜色的表示方式:

第一种:颜色名称 red blue green yellow orange

第二种方式:RGB模式 #000000 #ffffff #325687

2.2 排版标签

1、注释标签:
2、换行标签:

3、段落标签:

文本文字

特点:段落与段落之间有行高(行间距)自带换行属性:文本对齐方式 align (left、center 、right)

4、水平线标签:

属性:width:水平线的长度(两种:像素表示。第二种:百分比显示)size:水平线的粗细(避免过粗、太丑、一般给个位数  比如 6px)color:水平线的颜色align:水平线的对齐方式(left、center、right)

2.3 标题标签

<h1>-<h6>
数字越小,标题文字越大!默认加粗、默认字号、默认占据一行

2.4 容器标签

<div></div> : 块级标签,独占一行,自带换行
<span></span> : 行级标签,所有内容都在同一行作用:<div>主要是结合css做页面分块 布局<span>:进行友好提示信息的显示

2.5 列表标签

2.5.1 无序列表

ul(unorder list)

<!--ul是无序列表,默认标识为实心圆 disccircle 空心圆square 黑色方块--><ul type="square"><li>兰博基尼</li><li>法拉利</li><li>宾利</li><li>迈凯伦</li></ul>

2.5.2 有序列表

ol(order list)

<!--ol是有序列表,默认标识为阿拉伯数字 1a  A 字母字典顺序i  I 罗马数字--><ol type="I"><li>铁胆火车侠</li><li>光明勇士</li><li>米老鼠和唐老鸭</li><li>小头儿子和隔壁老王</li></ol>

2.5.3 定义列表

dl(defination list)定义列表

dt(defination title)定义标题

dd(defination description) 定义描述

<dl><dt>秦牛正威</dt><dd>就当是一场梦,醒来还是很感动</dd><dt>???</dt><dd>蛋黄的长裙,蓬松的头发。</dd></dl>

2.5.4 列表嵌套

<ul><li>最新娱乐新闻</li><li><dl><dt>青春有你2</dt><dd>非常庞大的导师阵容,Ella,Jony J,蔡徐坤,Lisa</dd></dl></li><li>猎心者<ol><li>戴猛。。。</li><li>廖朵朵。。。</li><li>花笙。。。</li></ol></li></ul>

2.6 图片标签

<img /> 独立标签

属性:
src 图片地址
width 图片的宽度
height 图片的高度
border 边框
alt 图片的文字说明 当图片未能正确加载时,才显示
title 鼠标悬停时,显示的文字

<img src="img/微信图片_20200306173413.jpg"width="500px"height="900px"/><img src="img/timg.jpg"width="500px"height="500px"border="5"alt="给你点赞的小脑斧"title="给你点赞的大脑斧"/>

2.7 链接标签

超链接可以是文本,也可以是图片,可以点击链接标签,进入新的文档,或者是当前文档中的某个部分

<a>文本或图片</a>、

属性:
href="跳转的地址"跳转外网需要添加协议
target:_self(当前文档)
_blank(新页面,会一直打开新的)
_search 之前打开的页面存在,则不打开新的页面,直接复用
name 充当锚点(顶部、底部)
需要为标签提供name属性,进行赋值
需要点击跳转的标签href属性给 #name

2.8 表格标签

表格由

标签来定义,每个表格均有若干行(由tr标签定义行),每行由若干个单元格组成(由td标签来定义)。每一个数据单元可以包含文本、图片、列表。。。。。。
2.8.1 普通表格

table tr td

<!--创建表格 table   行  tr   列  tdtable属性:默认没有边框体现border:边框的宽度bordercolor:边框的颜色cellspacing:单元格的间距cellpadding:单元格与内容的间距width:宽度height:高度align:控制表格的对齐方式 left center righttd的属性:align:控制的单元格内容的对齐方式 left center rightvalign:控制单元格内容的垂直对齐方式 top middle bottom--><table border="1" bordercolor="red" cellspacing="10" cellpadding="10"width="300px" height="300px" align="center"><tr><td align="center">学号</td><td align="center">姓名</td><td align="center">性别</td></tr><tr><td valign="bottom">S1001</td><td valign="middle">张阔</td><td valign="top">男</td></tr></table>

2.8.2 表格的表头

th

<!-- th作为表头,默认居中,加粗 -->
<table border="1"><tr><th>学号</th><th>姓名</th><th>分数</th></tr><tr><td>S1002</td><td>刘欣</td><td>100</td></tr></table>

2.8.3 表格的列合并

colspan

<table border="1" bordercolor="red"><tr><td align="center" colspan="4">学生信息表</td></tr><tr><td>学号</td><td>姓名</td><td colspan="2">各科成绩</td></tr><tr><td>1</td><td>哆啦A梦</td><td>80</td><td>90</td></tr></table>

2.8.4 表格的行合并

rowspan


<table border="1" bordercolor="blue"><tr><td colspan="4" align="center">学生表</td></tr><tr><td>学号</td><td>姓名</td><td>语文成绩</td><td>数学成绩</td></tr><tr><td rowspan="2">1</td><td rowspan="2">光头强</td><td>80</td><td>90</td></tr><tr><td>100</td><td>99</td></tr></table>

2.9 文本格式化标签

<!--粗体文本--><b>今天天气好</b><br /><!--大号字--><big>今天天气好</big><br /><!--着重文字--><em>今天天气好</em><br /><!--斜体字 物理上把字体倾斜--><i>今天天气好</i><br /><!--小号字--><small>今天天气好</small><br /><!--定义加重语气--><strong>今天天气好</strong><br /><!--下标字-->CO<sub>2</sub><br /><!--上标字-->孙悟空三打张阔<sup>①</sup><br /><!--插入字--><ins>今天天气好</ins><br /><!--删除字--><del>今天天气好</del>

三、基本标签的综合案例


<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>综合案例</title></head><body><!--头部--><div><table width="100%" align="center"><tr><td align="left">千锋教育-稀有的坚持全程面授品质的大型IT教育机构</td><td align="right"><a>好程序员特训营&nbsp;&nbsp;</a><a>JavaEE分布式开发&nbsp;&nbsp;</a><a>JavaSE核心基础&nbsp;&nbsp;</a><a>加入我们</a></td></tr><tr><td><img src="img/new_logo.png" /></td><td align="right"><img src="img/nav_r_ico.png" /></td></tr><tr><td colspan="2" align="center"><hr/><span>首页&nbsp;&nbsp;</span><span>课程培训&nbsp;&nbsp;</span><span>教学保障&nbsp;&nbsp;</span><span>免费视频&nbsp;&nbsp;</span><span>公开课&nbsp;&nbsp;</span><span>企业合作&nbsp;&nbsp;</span><span>就业喜报&nbsp;&nbsp;</span><span>学员天地&nbsp;&nbsp;</span><span>关于千锋&nbsp;&nbsp;</span><span>加入我们</span><hr /></td></tr><tr><td colspan="2" align="right">首页>课程培训>JavaEE列表</td></tr></table></div><!--中间部分--><div><table><tr><td><h3>课程培训</h3><h4>共108种课程内容</h4></td></tr><tr><td><hr /><img src="img/001.png" /></td></tr></table><table align="center" width="100%"><tr align="center"><td><img src="img/002.png" /><br /><div align="center">书名:XXX</div><div align="center">售价:180</div></td><td><img src="img/003.png" /><br /><div align="center">书名:XXX</div><div align="center">售价:180</div></td><td><img src="img/004.png" /><br /><div align="center">书名:XXX</div><div align="center">售价:180</div></td><td><img src="img/005.png" /><br /><div align="center">书名:XXX</div><div align="center">售价:180</div></td><td><img src="img/006.png" /><br /><div align="center">书名:XXX</div><div align="center">售价:180</div></td></tr><tr align="center"><td><img src="img/007.png" /><br /><div align="center">书名:XXX</div><div align="center">售价:180</div></td><td><img src="img/008.png" /><br /><div align="center">书名:XXX</div><div align="center">售价:180</div></td><td><img src="img/009.png" /><br /><div align="center">书名:XXX</div><div align="center">售价:180</div></td><td><img src="img/010.png" /><br /><div align="center">书名:XXX</div><div align="center">售价:180</div></td><td><img src="img/011.png" /><br /><div align="center">书名:XXX</div><div align="center">售价:180</div></td></tr></table></div><!--底部--><div><table width="90%" align="center"><tr><td><img src="img/012.png" /></td></tr></table>  </div></body>
</html>

千锋Java第九周总结相关推荐

  1. 千锋Java高级教程+分布式+springcloud+微信支付课程

    课程目录: ├─千锋Java高级教程-cas单点登录(完结-8集) │ 01单点登录介绍 │ 02cas介绍 │ 03tomcat搭建https │ 04cas server搭建 │ 05Cas 配置 ...

  2. 千锋教育威哥学Java—最新Java学习路线图(完整详细版) 千锋Java教学出品

    需要更多教程,微信扫码即可

  3. 20155227 2016-2017-2 《Java程序设计》第九周学习总结

    20155227 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联 ...

  4. 20175208 《Java程序设计》第九周学习总结

    20175208 2018-2019-2 <Java程序设计>第九周学习总结 一.教材学习内容总结: 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系 ...

  5. 20175204 张湲祯 2018-2019-2《Java程序设计》第九周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第九周学习总结 教材学习内容总结 -第十一章JDBC和MySQL数据库要点: 1.下载MySQL和客户端管理工具navi ...

  6. 2018-2019-20172329 《Java软件结构与数据结构》第九周学习总结

    2018-2019-20172329 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十五章-图 一.图及无向图 1.图的相关概 ...

  7. 20175202 《Java程序设计》第九周学习总结

    20175202 2018-2019-2 <Java程序设计>第九周学习总结 教材知识点总结 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系统,简称 ...

  8. 20175227张雪莹 2018-2019-2 《Java程序设计》第九周学习总结

    20175227张雪莹 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十一章 JDBC数据库操作 MySQL数据库管理系统 下载安装MySQL 若下载的是 ...

  9. 20155305乔磊2016-2017-2《Java程序设计》第九周学习总结

    20155305 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC入门 JDBC简介 1.JDBC是java联机数据库的标准规范,它定义了一组标准类与 ...

最新文章

  1. linux的veth导致网络不通,linux的veth对网桥通信实验
  2. ABP理论学习之通知系统
  3. 【 FPGA 】状态机,FPGA的灵魂
  4. 如何利用一台pc获取百万利益 《标题党》
  5. QQ被曝自动读取浏览器记录,Chrome、Edge和360等无一幸免
  6. 成功解决 编程语言代码结果中输出-9223372036854775808的数据
  7. Git 使用篇一:初步使用GitHub,下载安装git,并上传项目
  8. mysql的数据类型可分为哪两种_mysql数据类型分为哪几种
  9. 字符串距离(opj )(动态规划)
  10. 数据智能是未来商业的核心竞争力之一
  11. ThoughtWorks洞见领域驱动设计思维导图笔记
  12. 仿短视频竖屏播放源码
  13. zabbix模板_基于zabbix网页配置自定义tomcat监控模板--监控项、触发器
  14. nginx+lua+redis实现post请求接口之黑名单(一)
  15. Hugging Face Course-Introduction学习小记 (part1)
  16. imsi、 ICCID、ki、IMEI
  17. 微信小程序开发(一):小程序代码构成
  18. 使用ResourceHacker以命令行方式更新应用程序图标
  19. Cell子刊:北大姜长涛组发现HIF-2α通过肠道菌群调控脂肪产热
  20. 56.木秀于林,风必摧之

热门文章

  1. 从多个Word文档中批量取值,整理到Excel表中的技能,整理简历者必备
  2. l05173芯片针脚图_汽车常见易损芯片
  3. 天龙八部TLBB系列 - 网单用数据库修改为其他门派
  4. Ab3d.Reader3ds - 3ds 文件导入器 --FIX-Crack
  5. Oracle数据导入遇到1658的报错
  6. Python_美多商城(用户中心)_5
  7. 02-CSS基础知识梳理(I)
  8. 开源博客项目eblog完整搭建教程!
  9. 连接mysql所必须参数_数据库连接参数使用方法详解
  10. 一个游戏账号竟卖到7.5万元!