*******2022-08.18日下午+08.19 +08.20 第八组-----JDBC

本文详细介绍了Java JDBC的概念、实现步骤和常用API,包括加载驱动、建立连接、PreparedStatement预编译的优势以及Statement与PreparedStatement的区别。此外,还探讨了数据库连接池的重要性,推荐了Druid和Hikari连接池,并强调了使用连接池的前提条件。
摘要由CSDN通过智能技术生成

目录

一、概念

二、JDBC的实现

1、JDBC访问数据库

(1)JDBC驱动管理器

(2)JDBC驱动器API

(3)JDBC驱动器

2、连接具体步骤

(1)加载驱动

(2)建立连接

(3)获取sql语sql

(4)处理结果集

(5)关闭资源

3、代码示例

(1)简单/复杂版本

(2)建立并引用一个外部属性文件(资源包文件-----properties)

(3)创建一个jdbc连接方式的工具类

4、知识点补充

(1)Java中3个接口分别定义了对数据库的调用的不同的方式

(2)PreparedStatement:预编译(预加载)

(3)面试题:Statement和PreparedStatement的区别

三、JDBC常用API

1、Driver接口

2、DriverManager类

3、Connection接口

4、Statement接口

5、PreparedStatement接口

6、CallableStatement接口

7、ResultSet接口

四、数据库连接池


一、概念

在web开发中,不可避免的地要使用数据库来存储和管理数据。为了在java语言中提供数据库访问的支持,Sun公司于1996年提供了一套访问数据的标准Java类库,即JDBC。

JDBC的全称是Java数据库连接(Java Database connect),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。

二、JDBC的实现

1、JDBC访问数据库

应用程序使用JDBC访问数据库的方式如下图所示。

 从上图可以看出,应用程序使用JDBC访问特定的数据库时,需要与不同的数据库驱动进行连接。由于不同数据库厂商提供的数据库驱动不同,因此,为了使应用程序与数据库真正建立连接,JDBC不仅需要提供访问数据库的API,还需要封装与各种数据库服务器通信。

从上图中可以看出,JDBC的实现包括三部分。

(1)JDBC驱动管理器

负责注册特定的JDBC驱动器,主要通过java.sql. Driver Manager类实现。

(2)JDBC驱动器API

由Sun公司负责制定,其中最主要的接口是java.sql. Driver接口。

(3)JDBC驱动器

它是一种数据库驱动,由数据库厂商创建,也称为JDBC驱动程序JDBC驱动器实现了JDBC驱动器API,负责与特定的数据库连接,以及处理通信细节。

2、连接具体步骤

(1)加载驱动

导入外部依赖,需要引入mysql的驱动(指的是引入的jar包)----数据的持久化,把数据永久的保存起来。主要的方式还是存到硬盘上,持久化的实现过程大部分是通过数据库来完成。

java.sql.Driver接口,是所有驱动程序需要实现的接口

MySQL的驱动全类名:com.mysql.jdbc.Driver。

如果是MySQL8.0版本的,就是这个:com.mysql.cj.jdbc.Driver。

Oracle的驱动全类名:oracle. jdbc. driver. OracleDriver

1、如何加载驱动?

先导入jar包,然后用到反射---Class. forName()。括号里写驱动全类名----Class. forName ( "com. mysqL. jdbc. Driver")

2、URL地址

  jdbc协议----jdbc:mysql:

  jdbc:mysql://主机名称:端口号/数据库名

  jdbc:mysql://127. 0.0.1:3306/jsoft?useUnicode=true&characterEncoding=utf8
(?代表传参)

如果是MySQL8.0版本的,还需要传参useSSL=false&serverTimezone=UTC

拓展:

oracle数据库,它的URL地址是:

jdbc:oracle:thin:@主机名称:oracle端口:数据库名

sqlServer数据库,它的URL地址是:

jdbc:sqlServer:127.0.0.1:端口号:DatabaseName=数据库名

(2)建立连接

(3)获取sql语sql

(4)处理结果集

(5)关闭资源

3、代码示例

(1)简单/复杂版本

package com.shangke0818;

import org.junit.Test;

import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Objects;

public class Ch01 {
    @Test
    /*
    复杂版本
     */
    public void test01() throws ClassNotFoundException, NoSuchMethodException, SQLException, InvocationTargetException, InstantiationException, IllegalAccessException {
        // 数据库的url
        String url = "jdbc:mysql://127.0.0.1:3306/jiruan?useUnicode=true&characterEncoding=utf8";
        String username = "root";
        String password = "12345";
        // 驱动的全类名
        String driverName = "com.mysql.jdbc.Driver";

        // 1.加载驱动类
        Class clazz = Class.forName(driverName);
        // 2.实例化Driver对象
        Driver driver = (Driver) clazz.getDeclaredConstructor().newInstance();
        // 3.注册驱动
        DriverManager.registerDriver(driver);
        // 4.获取连接
        Connection connection = DriverManager.getConnection(url, username, password);
        System.out.println(connection);
        System.out.println(Objects.nonNull(connection) ? "数据库连接成功" : "数据库连接失败");
    }

    @Test
    /*
    简单版本
     */
    public void test02() throws ClassNotFoundException, SQLException {
        // 数据库的url
        String url = "jdbc:mysql://127.0.0.1:3306/jiruan?useUnicode=true&characterEncoding=utf8";
        String username = "root";
        String password = "12345";
        // 驱动的全类名
        String driverName = "com.mysql.jdbc.Driver";

        // 1.加载驱动类
        Class.forName(driverName);
        // 4.获取连接
        Connection connection = DriverManager.getConnection(url, username, password);
        System.out.println(connection);
        System.out.println(Objects.nonNull(connection) ? "数据库连接成功" : "数据库连接失败");
    }
}

(2)建立并引用一个外部属性文件(资源包文件-----properties)

使用properties属性文件的好处:
1、实现了代码和数据的分离,如果需要修改配置信息,直接在属性文件中修改即可,不需要深入代码
2、如果修改了配置信息,省去了编译的过程.

(3)创建一个jdbc连接方式的工具类

1、把JDBC的四要素提取成properties属性文件,通过IO流读取
2、把获取连接的操作提取成一个工具类中的静态方法
3、把关闭连接的操作提取成一个方法
4、获取Statement对象,执行sql语句

4、知识点补充

(1)Java中3个接口分别定义了对数据库的调用的不同的方式

1、statement:用来执行静态sql语句并返回它所生成的结果对象
2、Preparedstatement: 预编译,可以使用此对象多次高效的执行该语句
3、Callablestatement:用来执行sql存储过程

(2)PreparedStatement:预编译(预加载)

1、通过connection获取的对象
2、是statement接口的子接口
3、sql语句中可以传参,可以用问号?来传参(占位),通过set方法来给问号?赋值

4、提高性能

5、避免sql注入

(3)面试题:Statement和PreparedStatement的区别

。PreparedStatement是 预编译的SQL语句,效率高于Statement
。PreparedStatement支持? 操作符,相对于Statement更加灵活
。PreparedStatement可以防止SQL 注入,安全性高于Statement

三、JDBC常用API

1、Driver接口

Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。在编写JDBC程序时,必须要把指定数据库驱动程序或类库加载到项目的classpath中。

2、DriverManager类

Driver Manager类用于加载JDBC驱动并且创建与数据库的连接。在Driver Manager类中,定义了两个比较重要的静态方法。

如表所示:

3、Connection接口

Connection接口代表Java程序和数据库的连接,在Connection接口中,定义了一系列方法,具体如表所示。

4、Statement接口

Statement接口用于向数据库发送SQL语句,在Statement接口中,提供了三个执行SQL语句的方法,具体如表所示。

5、PreparedStatement接口

PreparedStatement是Statement的子接口,用于执行预编译的SQL语句。在PreparedStatement接口中,提供了一些基本操作的方法,具体如表下所示。

6、CallableStatement接口

CallableStatement是PreparedStatement的子接口,用于执行SQL存储过程。在Callablestatement按接口中,提供了一些基本操作的方法,具体下表所示:

7、ResultSet接口

ResultSet接口表示 select查询语句得到的结果集,该结果集封装在一个逻辑表格中。在 ResultSet接口内部有一个指向表格数据行的游标,ResultSet对象初始化时,游标在表格的第一行之前。下表中列举了ResultSet接口中的常用方法。

博客参考连接:https://zhuanlan.zhihu.com/p/140885502

四、数据库连接池

2022-08-20
connection是一种稀有资源,一 个连接建 立就创造了一个资源
比如:
上线QQ,我的QQ和腾讯的服务器建立了一一个连接,有代价, 同时在线人数很多有可能导致服务器崩溃。
如何解决?
第一种方案:自己一个人玩
第二种方案:把服务器的人数限定一下,最多不超过10000人,第10001 个人上线,排队。


JDBC使用数据库连接的必要性
在使用基Fweb程序的数据库连接,
1、在主程序中建立连接
2、执行SQL
3、断开连接

池化思想”:
所有的JDBC连接通过DriverManager. getConnection.用完的连接不要被垃圾回收,能够重复使用。这就是"池化思想”"。 每次去初始化一个连接池,连接池中会有很多个连接等待被使用。使用完连接之后,不需要关闭连接, 只需要把连接还回到连接池,还回到连接池的操作不需要我们手动控制。初始化连接池,10条连接,来了20个请求。10 个请求就直接拿10条连接去办事,剩下的10个请求。再向服务器申请连接数。设置一些属性:最大等待时间、初始化连接数……

几种连接池:

(1) C3P0, 2代数据库连接池,太老了,不学
(2) DBCP, 2代数据库连接池,太老了,不学
(3) Druid (德鲁伊)数据库连接池,最好用的连接池。
阿里巴巴开源平台上的一个数据库连接池实现,整合了C3P0和DBCP各自
加入了日志监控,可以监控sql语句的执行情况。
(4) Hikari (光),目前最快的连接池,也是springboot默认的连接池。


使用连接池的前提条件:必须有对应的属性文件 .properties

Druid (德鲁伊)使用方法:

Hikari (光)使用方法:

写个小程序,能实现对数据库中任一张表的增删改查

利用反射、泛型能实现对MySQL数据库中任一张表的通用增删改查

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值