手机扫码查看
2020Javaweb教程之JDBC
JDBC简介
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
JDBC可以在各种平台上使用Java,如Windows,Mac OS和各种版本的UNIX。
JDBC库包括通常与数据库使用相关的API。
-
连接数据库。
-
创建SQL或MySQL语句。
-
在数据库中执行SQL或MySQL查询。
-
查看和修改生成的记录。
JDBC体系结构
JDBC API支持用于数据库访问的两层和三层处理模型,但通常,JDBC体系结构由两层组成:
-
JDBC:提供了应用程序到数据库连接规范。
-
JDBC驱动程序: 连接数据库的驱动程序的实现。
JDBC API使用驱动程序管理器和特定于数据库的驱动程序来提供与异构数据库的透明连接。
JDBC核心组件
DriverManager:此类管理数据库驱动程序列表。
Driver:此接口处理与数据库服务器的通信,很少会直接与Driver对象进行交互,而是使用DriverManager对象来管理这种类型的对象。
Connection:该接口具有用于连接数据库的所有方法。
Statement:使用从此接口创建的对象将SQL语句提交到数据库。
ResultSet:在使用Statement对象执行SQL语句查询后,这些对象保存从数据库检索的数据。
SqlException:此类处理数据库应用程序中发生的任何异常
JDBC初始
使用步骤
构建JDBC应用程序设计以下6个步骤
1.导入JDBC驱动包:需要下载包含数据库编程所需的JDBC的jar包
导入jar包,在项目下创建lib目录,把mysql的jdbc包放入此目录,然后右键添加到库(add as libary)
2.注册JDBC驱动程序:要求您初始化驱动程序,以便您可以打开与数据库的通信通道。
Class.forName(“com.mysql.jdbc.Driver”);
3.创建连接:需要使用DriverManager.getConnection()方法创建一个Connection对象,该对象表示与数据库物理连接
Connection c=DriverManager.getConnection(“jdbc:mysql://localhost:3306/库名”,”用户名”,”密码”);
4.执行查询:需要使用类型为Statement的对象来构建和提交SQL语句到数据库。
5.从结果集中提取数据:需要使用相应的ResultSet.getXXX() 方法从结果集中检索数据。
6.释放资源:需要明确地关闭所有数据库资源,而不依赖于JVM垃圾收集。
c.close();
JDBC执行SQL语句
一旦获得了连接,我们可以与数据库进行交互。JDBC Statement和PreparedStatement接口定义了使您能够发送SQL命令并从数据库接收数据的方法和属性。
接口statement:用于对数据库进行通用访问。在运行时使用静态SQL语句时很有用。Statement接口不能接受参数。
接口PreparedStatement:当您计划多次使用SQL语句时使用。PreparedStatement接口在运行时接受输入参数。
statement创建语句对象
在使用Statement对象执行SQL语句之前,需要使用Connection对象的createStatement()方法创建一个
Statement s=c.createStatement();
-
boolean execute(String SQL):如果可以检索到ResultSet对象,则返回一个布尔值true; 否则返回false。使用此方法执行SQL DDL语句或需要使用真正的动态SQL时。
-
int executeUpdate(String SQL):返回受SQL语句执行影响的行数。使用此方法执行预期会影响多个行的SQL语句,例如INSERT,UPDATE或DELETE语句。
-
ResultSet executeQuery(String SQL)
关闭Statement对象:s.close();
ResultSet
SELECT语句是从数据库中选择行并在结果集中查看行的标准方法。
ResultSet对象维护指向结果集中当前行的游标。术语“结果集”是指包含在ResultSet对象中的行和列数据。
如果没有指定任何ResultSet类型,您将自动获得一个TYPE_FORWARD_ONLY。
类型:
ResultSet.TYPE_FORWARD_ONLY :光标只能在结果集中向前移动
ResultSet.TYPE_SCROLL_INSENSITIVE :光标可以向前和向后滚动,结果集对创建结果集后发生的数据库的其他更改不敏感。
ResultSet.TYPE_SCROLL_SENSITIVE :光标可以向前和向后滚动,结果集对创建结果集之后发生的其他数据库所做的更改敏感。
JDBC执行DQL
public class TestJDBC {
public static void main(String[] args) {
Connection connection=null;
Statement statement=null;
ResultSet resultSet=null;
try{
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.创建Connection对象
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demos", "root", "root");
//3.创建执行SQL语句的对象
statement = connection.createStatement();
//4.sql语句
String sql="select id,sname,sex from stu";
//5.执行SQL语句
resultSet = statement.executeQuery(sql);
//6.遍历
while (resultSet.next()) {
int id = resultSet.getInt(1);
String sname = resultSet.getString("sname");
String sex = resultSet.getString("sex");
System.out.println(id+":"+sname+":"+sex);
}
}catch (Exception e){}finally {
try{
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
}catch (Exception e){}
}
}
}
SQL注入
就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。
PreparedStatement解决SQL注入
该PreparedStatement的接口扩展了Statement接口,它为您提供了一个通用的Statement对象有两个优点附加功能。
作用:1预编译,效率高 2 安全,避免SQL注入
String SQL = “Update Employees SET age = ? WHERE id = ?”;
JDBC中的所有参数都由?符号,这被称为参数标记。在执行SQL语句之前,必须为每个参数提供值
所述的setXXX()方法将值绑定到所述参数,其中XXX代表要绑定到输入参数的值的Java数据类型。如果忘记提供值,将收到一个SQLException。
每个参数标记由其顺序位置引用。第一个标记表示位置1,下一个位置2等等。该方法与Java数组索引不同,从0开始。
JDBC总结
1 jdbc介绍 :
Java Database Connectity java数据库连接技术
定义一套连接数据的规范和标准。
2 jdbc包含两个部分
JDBC API
JDBC 驱动程序
3 JDBC的使用步骤
1 导入jar包
2 注册驱动
3 获取连接
4 创建命令
5 执行命令,处理结果
6 释放资源
4 JDBC的api
Driver 驱动
DriverManager 驱动管理类
Connection 负责连接数据库
Statement 负责执行命令
ResultSet 封装结果集
PreparedStatment 预编译命令
5 数据库工具类
DbUtils.java
1 注册驱动
2 获取连接
3 释放资源
4 执行命令 (增删改 DDL)



发表回复