JDBC概述和CRUD
今日内容
1.JDBC简介
2.JDBC执行DQL语句
3.JDBC执行DML语句
4.JDBC执行DDL语句
5.JDBC的Connection、Statement、ResultSet
6.PreparedStatement的使用
教学目标
1.了解JDBC简介
2.掌握JDBC执行DQL语句
3.掌握JDBC执行DML语句
4.了解什么是SQL注入
5.掌握PreparedStatement的使用
第一节 关于JDBC的简介
1.1 简介
JDBC(java Database Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
JDBC可以在任何平台上使用java。
JDBC库包括通常与数据库使用相关的API。
- 连接数据库
- 创建SQL或MYSQL 语句
- 在数据库中执行SQL或MYSQL查询
- 查看和修改生成的记录
1.2 JDBC体系结构
JDBC API支持用于数据库访问的两层和三层处理模型,但通常JDBC体系结构由两层组成:
- JDBC:提供了应用程序到数据库连接规范。
- JDBC驱动程序:连接数据库的驱动程序的实现
JDBC API使用驱动程序管理器和特定于数据库的驱动程序来提供与异构数据库的透明连接。
1.3 JDBC核心组件
DriverManager:此类管理数据库驱动程序列表。使用通信协议将来自java应用程序的连接请求与适当的数据库程序匹配
Driver:此接口处理与数据库服务器的通讯,很少会直接与Driver对象进行交互。而是使用DriverManager对象来管理这种类型的对象。
Connection:拥有连接数据库的所有方法。连接对象表示通信上下文,数据库的所有通信仅通过连接对象。
Statement:使用此接口创建的对象将sql语句提交的数据库。除了执行存储过程之外,一些派生接口还接受参数
ResultSet:在使用Statement对象执行sql查询后,这些对象保存从数据库检索的数据。作为一个迭代器允许移动数据
SQLException:此类处理数据库应用程序中发生的任何异常
第二节 JDBC相关的SQL语法
2.1 CRUD语法介绍
SQL是一种表准话的语言,它允许你在数据库上执行操作,如创建项目,查询内容,更新内容,并删除条目等操作。
Create,Read,Update,and Delect通常称为CRUD操作。
CREATE DATABASE语句用于创建新的数据库:
CREATE DATABASE DATABASE_NAME;
DROP DATABASE语句用于删除现有数据库:
DROP DATABASE DATABASE_NAME;
CREATE TABLE语句用于创建新表:
CREATE TABLE Employees(
id INT NOT NULL,
age INT NOT NULL,
first VARCHAR(255),
last VARCHAR(255),
PRIMARY KEY(id)
);
DROP TABLE 语句删除现有表:
DROP TABLE table_name;
INSERT 的语法类似于一下内容,其中column1,column2等表示要显示在相应列中的新数据
INSERT INTO table_name VALUES(column1,column2....);
SELECT语句用于从数据库中检索数据:
SELECT column_name,column_name,...FROM table_name WHERE conditions;
WHERE子句可以使用比较运算符,例如=,!=,<,>,<=和>=,以及BETWEEN和LIKE运算符。
UPDATE语句用于更新数据。
UPDATE table_name SET column_name= value,column_name= value,...WHERE conditions;
WHERE子句可以使用比较运算符,例如=,!=,<,>,<=和>=,以及BETWEEN和LIKE运算符。
第三节 JDBC初始
3.1 使用步骤
构建JDBC应用程序设计一下六个步骤:
-
**导入JDBC驱动包:**需要下载包含数据库编程所需的JDBC的jar包。
-
**注册JDBC驱动程序:**要求您初始化驱动程序,以便您可以打开与数据库的通信通道。
-
**创建连接:**需要使用DriverManager.getConnection()方法创建一个Connection对象,该对象表示与数据库的物理连接。
-
**执行查询:**需要使用类型为Statement的对象来构建和提交SQL语句到数据库。
-
**从结果集中提取数据:**需要使用相应的ResultSet.getxxx()方法从结果集中检索数据。
-
**释放资源:**需要明确的关闭所以数据库资源,而不依赖于JVM的垃圾收集。
(1)导入jar包,在项目下创建lib目录,把mysql的jdbc包放入此目录,并添加到build path中(idea不同)
(2)注册驱动
第一种方法(推荐写法):Class.forName()
注册驱动程序最常见的方法是使用java的class.forname(),将驱动程序的类文件动态加载到内存中,并将其自动注册
"jdbc:mysql://localhost:3306/schools?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true","root","root"
//1.注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //2.创建connection对象 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/schools" + "?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true", "root","root"); //3.创建执行sql语句的对象。(根据连接对象创建,指定sql语句执行的数据库) Statement statement = connection.createStatement(); //4.sql语句 String sql = "create table if not exists test(id int primary key,name varchar(25) not null)charset=utf8"; //5.执行DDL(用execute) boolean result = statement.execute(sql); statement.execute("insert into test(id,name) values (1,'刘')"); System.out.println(result); System.out.println(connection.toString()); //关闭释放资源 statement.close(); connection.close();
第四节 JDBC执行SQL语句
一旦获得了连接,可以与数据库进行交互。JDBC Statement 和 PreparedStatement接口定义了能够发送sql命令并从数据库接收数据的方法和属性
接口 使用 statement 用于对数据库进行通用访问。在运行时使用静态sql语句时很有用。statement接口不能接收参数 preparedstatement 计划多次使用sql语句时使用,在运行时接受输入参数 4.1 Statement
创建语句对象
在使用statement对象执行sql语句之前,需要使用connection对象的createstatement()方法创建一个
创建Statement对象后,可以使用它来执行SQL语句,其中有三个执行方法
-
bollean execute(string sql) 如果可以检索到ResultSet对象,则返回一个布尔值true,否则返回false。使用此方法执行SQL DDL语句或需要使用真正的动态SQL时。(创建)
-
int executeUpdate(string SQL):返回受SQL语句执行影响的行数。使用此方法执行预期会影响多个行的SQL语句,例如insert,update,delete等。(增删改)
-
ResultSet executeQuery(string sql):返回一个resultset对象,当希望获得结果集时,使用此方法,就像使用select语句一样
关闭Stanement对象
就像关闭一个Connection对象以保存数据库资源一样,由于同样的原因,还应该关闭Statement对象
一个简单的close()方法将执行该作业。如果先关闭Connection对象,它也会关闭Statement对象。但是,应始终显示关闭的Stanement对象,以确保正确清理。
-
注意:execute()可以执行任何sql方法,前提是你不需要任何结果.executeUpdate()适用于执行insert ,update,delect.会返回受影响的行数,从而得知操作是否成功
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.创建connection对象
Connection connection =
DriverManager.getConnection("jdbc:mysql://localhost:3306/schools" +
"?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true",
"root","root");
//3.创建执行sql语句的对象。(根据连接对象创建,指定sql语句执行的数据库)
Statement statement = connection.createStatement();
//4.sql语句
String sql = "create table if not exists test(id int primary key,name varchar(25) not null)charset=utf8";
//5.执行DDL(用execute)
boolean result = statement.execute(sql);
statement.execute("insert into test(id,name) values (2,'刘')");
System.out.println(result);
System.out.println(connection.toString());
//关闭释放资源
statement.close();
connection.close();
4.2 ResultSet
SELECT 语句是从数据库中选择行并在结果集中查看行的标准方法。该java.sql.ResultSet中的接口表示结果集数据库查询。
ResultSet对象维护指向结果集中当前行的游标。术语“结果集”是指包含在ResultSet对象中的行和列数据。
如果没有指定任何ResultSet类型,将自动获得一个TYPE_FORWORD_ONLY.
类型 | 描述 |
---|---|
ResultSet.TYPE_FORWARD_ONLY | 光标只能在结果集中向前移动 |
ResultSet.TYPE_SCROLL_INSENSITIVE | 光标可以向前向后移动,结果集对创建结果集后发生的数据库的其他更改不敏感 |
ResultSet.TYPE_SCROLL_SENSITIVE | 光标可以向前向后移动,结果集对创建结果集后发生的其他数据库所做的更改敏感 |
4.3 SQL注入
就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是应用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行能力,它可以通过在web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
4.4 PreparedStatement
该接口扩展了Statement接口,有两个优点附加功能。
作用:1、预编译,效率高。2、安全,避免SQL注入