JDBC——Java Database Connectivity

花了一天时间在b站看的黑马的教学视频,粗略记了点笔记

一、JDBC简介

思想

  • 分层思想
  • 在 Java 上面只有一种数据库连接统一接口——JDBC。JDBC 为数据库开发人员提供了一个标准的 API,据此可以构建更高级的工具和接口使数据库开发人员能够用纯 Java API 编写数据库应用程序
  • 说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。

IDEA配置JDBC

https://blog.csdn.net/qq_34622844/article/details/102817852

JDBC驱动类型

  • JDBC 驱动程序实现 JDBC API 中定义的接口,用于与数据库服务器进行交互。JDBC 驱动程序可以打开数据库连接,并通过发送 SQL 或数据库命令,然后在收到结果与 Java 进行交互。

  • (jdk1.8已经移除)JDBC-ODBC 桥接 ODBC 驱动程序:它是将 JDBC 翻译成 ODBC, 然后使用一个 ODBC 驱动程序与数据库进行通信。

  • 本地 API 用 Java 来编写的驱动程序:这种类型的驱动程序把客户机 API 上的 JDBC 调用转换为 Oracle、Sybase、 Informix、DB2 或其它 DBMS 的调用。

  • JDBC 网络纯 Java 驱动程序:这种驱动程序将 JDBC 转换为与 DBMS 无关的网络协议,这是最为灵活的 JDBC 驱动程序。它是一个三层的方法来访问数据库,在 JDBC 客户端使用标准的网络套接字与中间件应用服务器进行通信。然后由中间件应用服务器进入由 DBMS 所需要的的调用格式转换,并转发到数据库服务器。

  • 本地协议纯 Java 驱动程序:这种类型的驱动程序将 JDBC 调用直接转换为 DBMS 所使用的专用网络协议。是 Intranet 访问的一个很实用的解决方法。它是直接与供应商的数据库进行通信,通过 socket 连接一个纯粹的基于 Java 的驱动程序。这是可用于数据库的最高性能的驱动程序,并且通常由供应商本身提供。


二、快速入门:连接数据库

  1. 导入 JDBC 驱动:导入jar包
  2. 注册 JDBC 驱动程序:这一步会导致 JVM 加载所需的驱动类实现到内存中,然后才可以实现 JDBC 请求。
  3. 数据库 URL 指定:创建具有正确格式的地址,指向到要连接的数据库。
  4. 获取数据库连接对象 Connection:最后,代码调用 DriverManager 对象的 getConnection() 方法来建立实际的数据库连接。
  5. 定义 sql 语句
  6. 获取执行 sql 语句的对象 Statement
  7. 执行 sql,返回执行结果
  8. 释放Connection资源

三、JDBC的一些重要接口

DriverManager

1、注册驱动
告诉程序该使用哪个数据库驱动jar

static void registerDriver(Driver driver)

加载"com.mysql.jdbc.Driver"的时候执行了静态代码块,其实就是调用了registerDriver

Class.forName("com.mysql.jdbc.Driver")

2、获取数据库连接

public static Connection getConnection(String url,String user,String password)
Connection conn = DriverManager.getConnection(
	"jdbc:mysql://localhost:3306/book?
	useUnicode=true&characterEncoding=UTF-8
	&serverTimezone=Asia/Shanghai","root","123456");

Connection

1、获取执行sql的对象:StatementPrepareStatement

2、事务管理
开始事务:void setAutoCommit(boolean autoCommit)(设置false就是开启事务)
提交事务:void commit()
回滚事务:void rollback(Savepoint savepoint)

Statement

1、该对象用于执行静态SQL语句并返回它产生的结果。

2、int excuteUpdate(String sql)

  • 执行DML语句(增删改,insert,update,delete)
  • DDL语句(表和库的创建和删除create,drop,alter)
  • 返回值是影响的行数,如果大于0的话就是执行成功

3、ResultSet executeQuery(String sql)
执行给定的DQL(select)语句,返回一个 ResultSet对象。

ResultSet

1、结果集对象,封装查询结果
2、如何查询结果:next()

PrepareStatement

1、防止SQL注入:SQL注入问题,在拼接sql的时候 ,有一些sql的特殊字参与字符串的拼接,会造成安全性问题
2、解决sql注入问题,需要用PrepareStatement对象解决
3、预编译的sql:参数使用?作为占位符
4、后期都会使用PrepareStatement: 效率更高,并且可以防止注入

四、JDBC来控制事务

我们在编写 java 程序的时候,在默认情况下,JDBC 连接是在自动提交模式下,即每个 SQL 语句都是在其完成时提交到数据库。但有时候我们为了提高程序运行的性能或者保持业务流程的完整性,以及使用了分布式事务管理方式,这个时候我们可能想关闭自动提交而自己管理和控制自己的事务

让多条 SQL 在一个事务中执行,并且保证这些语句是在同一时间共同执行的时候,我们就应该为这多条语句定义一个事务。一个事务是把单个 SQL 语句或一组 SQL 语句作为一个逻辑单元,并且如果事务中任何语句失败,则整个事务失败。如果我们要启动一个事务,而不是让 JDBC 驱动程序默认使用 auto-commit 模式支持。这个时候我们就要使用 Connection 对象的 setAutoCommit() 方法。我们传递一个布尔值 false 到 setAutoCommit() 中,就可以关闭自动提交。反之我们传入一个 true 便将其重新打开。

代码

知道怎么开启,关闭和回滚就可以了

import com.lqr.util.JdbcUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * 事务的操作
 * @author KyrieLuo
 * @create 2020/9/24-10:16
 */
public class JdbcDemo4 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement pstmt1 = null;
        PreparedStatement pstmt2 = null;
        try {
            conn = JdbcUtils.getConnection();

            //1、开启事务
            conn.setAutoCommit(false);

            String sql1 = "update account set balance = balance - ? where id = ?";
            String sql2 = "update account set balance = balance + ? where id = ?";
            pstmt1 = conn.prepareStatement(sql1);
            pstmt2 = conn.prepareStatement(sql2);
            pstmt1.setDouble(1,500);
            pstmt1.setInt(2,1);
            pstmt2.setDouble(1,500);
            pstmt2.setInt(2,2);
            pstmt1.executeUpdate();
            pstmt2.executeUpdate();

            //2、提交事务
            conn.commit();
        } catch (Exception throwables) {
            //3、一旦出现异常,开始回滚事务
            try {
                if(conn != null){
                    conn.rollback();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            throwables.printStackTrace();
        }finally {
            JdbcUtils.close(pstmt1,conn);
            JdbcUtils.close(pstmt2,null);
        }
    }
}

五、数据库连接池

概念:一个存放数据库连接的容器,当系统初始化后容器被创建,容器中会申请一些连接对象,当用户访问数据库时从容器中获取连接对象,用完后放回容器。

实现

获取连接:getConnection
关闭连接:close
如果对象是从连接池中获取的,那么调用close方法不是关闭连接而是把连接归还

一般使用两种数据库连接池:
C3P0
Druid

C3P0

Druid

步骤:
1、导入jar包
2、定义配置文件
3、获取数据库连接池对象:通过工厂类来获取DruidDataSourceFactory
4、获取连接

六、Spring JdbcTemplate

我在另一篇文章中有详细写:https://blog.csdn.net/weixin_44369928/article/details/108936430

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值