JDBC编程

JDBC编程

什么是JDBC?

JDBC(Java Database Connection)为Java开发者 使用数据库提供了统一的编程接口 ,它由一组Java类和接口组成(主要在java sql,javax sql包中)。是Java程序与数据库系统通信的标准API。JDBC API 使得开发人员可以使用纯java的方式来连接数据库,并执行操作。JDBC这套接口的实现,称为 数据库驱动 ,由各个数据库厂商提供。

JDBC编程_第1张图片

为什么要使用JDBC?

  • 市面上有非常多的数据库,本来我们是需要根据不同的数据库学习不同的API,sun公司为了简化这个操作,定义了JDBC API【接口】
  • sun公司只是提供了JDBC API,数据库厂商负责实现。
  • 对于我们来说,操作数据库都是在JDBC API【接口】上,使用不同的数据库,只要用数据库厂商提供的数据库驱动程序。

JDBC工作原理

JDBC  为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。

JDBC编程_第2张图片

JDBC优势:

  • Java语言访问数据库操作完全面向抽象接口编程
  • 开发数据库应用不用限定在特定数据库厂商的
  • API 程序的可移植性大大增强

JDBC常用接口和类

Driven 接口(驱动)

  • 各个数据库厂商的提供的,对Sun公司提出的Connection等JDBC接口的实现。
  • 装载驱动

    • Mysql Class.forName("com.mysql.jdbc.Driver");
    • Oracle Class.forName("oracle.jdbc.driver.OracleDriver")

DriverManager接口

  • JDBC的DriverManager是一个工厂类,我们通过它来创建数据库连接。
  • 当JDBC的Driver类被加载进来时,它会自己注册到DriverManager类里面
  • 然后我们会把数据库配置信息传成DriverManager.getConnection()方法,DriverManager会使用注册到它里面的驱动来获取数据库连接,并返回给调用的程序

Connection接口

Connection接口与特定数据库的连接,在连接上下文中执行SQL语句并返回结果.

Connection接口实现类由数据库提供,获取Connection对象通常有两种方式:

  • 通过DriverManger (驱动管理类)的静态方法获取:

JDBC编程_第3张图片

  • 通过DataSource(数据源)对象获取,实际应用中会使用DataSoucre对象

JDBC编程_第4张图片

DriverManger 和DataSource的区别:

  1. DriverManger 类来获取的Connection连接,是无法重新利用的,每次使用完以后释放资源时,通过connection.close()都是关闭物理连接
  2. DataSource提供连接池支持。连接池在初始化时将创建一定数量的数据库连接,这些连接是可以进行复用的。每次使用完数据库连接,释放资源调用connection.close()都是将Connection连接对象回收。(回收会重置connection对象的属性)

数据库连接池,基于享元模式,在初始化的时候就创建多个连接,每次使用完再还原。(所有的使用者共享资源,不用每次都创建资源,以提高效率)

Statement 对象

用于执行静态的SQL语句并返回它锁生成的结果的对象。

三种Statement类:

JDBC编程_第5张图片

一般使用PreparedStatement对象。

PreparedStatement对象特点:

  • 参数化SQL查询——把占位符用参数替换
  • 性能比Statement高
  • 会进行SQL预编译
  • 阻止常见SQL注入攻击
  • 占位符下标从1开始
  • 占位符不能使用多值

执行SQL的两种方法:

  • executeQuery() 方法执行后返回单个结果集的,通常用于select语句
  • executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于updateinsertdelete语句。

ResultSet 对象

ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当   前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSetnext()  方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。

  • Statement 执行 SQL 语句时返回 ResultSet 结果集 。
  • ResultSet 提供的检索不同类型字段的方法,常用的有 :

    • getString() : 获得在数据库里的varchar、char等数据类型的对象。
    • getFloat(): 获得杂数据库里是 Float 类型的对象。
    • getDate(): 获得在数据库里面是Date类型的数据。
    • getBoolean(): 获得在数据库里面是 Boolean 类型的数据。

JDBC操作数据库的步骤

  1. 创建数据库连接Connection
  2. 创建操作命令Statement
  3. 使用操作命令来执行SQL
  4. 处理结果集ResultSet——查询操作需要进行结果集的处理
  5. 释放资源——反向释放资源(关闭结果集、命令、连接)
       Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {

            //1.
            //DriverManager.registerDriver(new com.mysql.jdbc.Driver());

            //2.
            Class.forName("com.mysql.jdbc.Driver");

            //获取与数据库连接的对象-Connetcion
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");

            //获取执行sql语句的statement对象
            statement = connection.createStatement();

            //执行sql语句,拿到结果集
            resultSet = statement.executeQuery("SELECT * FROM users");

            //遍历结果集,得到数据
            while (resultSet.next()) {

                System.out.println(resultSet.getString(1));

                System.out.println(resultSet.getString(2));
            }
            
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {//反向关闭结果集

            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }

            }
            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }

            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }

            }

        }

JDBC常见面试题​​​​​​​

 

 

 

你可能感兴趣的:(MySQL,java,jdbc)