MySQL实现JDBC-基础步骤

目录

JDBC基础入门

概念

本质

JDBC的7个步骤

(1)导入jar包

(2)注册驱动

(3)获取连接

(4)获取执行者对象

(5)执行sql语句,并接收返回结果

(6)处理结果

(7)释放资源

JDBC入门示例代码

JDBC各个功能类详解

DriverManager

(1)注册驱动(告诉程序该使用哪一个数据库驱动)

(2)获取数据库连接

Connection

(1)获取执行者对象

(2)管理事务

(3)释放资源

Statement

(1)执行DML语句

(2)执行DQL语句:

(3)释放资源

ResultSet

(1)判断结果集中是否还有数据

(2)获取结果集中的数据

(3)释放资源

下一节:案例实现


JDBC基础入门

概念

JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它是由一组用Java语言编写的类和接口组成的。

本质

其实就是java官方提供的一套规范(接口)。用于帮助开发人员快速实现不同关系型数据库的连接!

JDBC的7个步骤

(1)导入jar包

(2)注册驱动

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

注意:如果使用较高版本的MySQL,必须使用 com.mysql.cj.jdbc.Driver 的方式,否则会报错!

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

如果是低版本的可以使用 com.mysql.jdbc.Driver

如果还是报错,可以使用在url上面加入时区!

url=jdbc:mysql://localhost:3306/数据库名?serverTimezone=UTC

(3)获取连接

String url = "jdbc:mysql://localhost:3306/db1";
Connection con = DriverManager.getConnection(url,"root","888888");

(4)获取执行者对象

Statement stat = con.createStatement();

(5)执行sql语句,并接收返回结果

String sql = "SELECT * FROM user";
ResultSet rs = stat.executeQuery(sql);

(6)处理结果

while(rs.next()) {
    System.out.println( rs.getInt("id")
                + "\t" + rs.getString("name"));
}

(7)释放资源

con.close();
stat.close();
rs.close();

JDBC入门示例代码

Connection对象中的用户名,数据库名,密码改成你自己的哦!

public class jdbc_demo01 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // 1.导入jar包
        // 2.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");

        // 3.获取连接
        String url = "jdbc:mysql://localhost:3306/db1";
        Connection con = DriverManager.getConnection(url,"root","888888");

        // 4.获取执行者对象
        Statement stat = con.createStatement();

        // 5.执行sql语句,并且接收结果
        String sql = "SELECT * FROM product";
        ResultSet rs = stat.executeQuery(sql);

        // 6.处理结果
        while(rs.next()) {
            System.out.println( rs.getInt("id") + "\t"
                    + rs.getString("name") + "\t"
                    + rs.getInt("price") + "\t"
                    + rs.getString("brand") + "\t"
                    + rs.getInt("stock")
            );
        }

        // 7。释放资源
        con.close();
        stat.close();
        rs.close();
    }
}

结果如下: 

JDBC各个功能类详解

DriverManager

驱动管理对象,它有2个作用——注册驱动、获取数据库连接

(1)注册驱动(告诉程序该使用哪一个数据库驱动)

static void registerDriver(Driver driver):注册与给定的驱动程序 DriverManager

写代码使用:Class.forName("com.mysql.jdbc.Driver");

通过查看源码发现:在com.mysql.cj.jdbc.Driver类中存在静态代码块

注:在com.mysql.jdbc.Driver类中的Driver继承了com.mysql.cj.jdbc.Driver类中的方法

package com.mysql.jdbc;

import java.sql.SQLException;

public class Driver extends com.mysql.cj.jdbc.Driver {
    public Driver() throws SQLException {
    }

    static {
        System.err.println("Loading class `com.mysql.jdbc.Driver'. 
        This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. 
        The driver is automatically registered via the SPI 
        and manual loading of the driver class is generally unnecessary.");
    }
}

com.mysql.cj.jdbc.Driver类如下: 

static {
    try {
        java.sql.DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
        throw new RuntimeException("Can't register driver!");
    }
}

在类一旦被使用,静态代码块就会被执行!所以 registerDriver方法一定会被调用。

注意:

mysql5之后的驱动jar包可以省略注册驱动的步骤。在jar包中,存在一个java.sql.Driver配置文件,文件中指定了com.mysql.cj.jdbc.Driver

(2)获取数据库连接

获取数据库连接对象:

static Connection getConnection(String url, String user, String password);

返回值:

Connection-数据库连接对象,如果连接成功,就会返回一个Connection。

参数:

  • url:指定连接的路径。语法:jdbc:mysql://ip地址(域名):端口号/数据库名称

        例如:jdbc:mysql://localhost:3306/db1

  • user:用户名

  • password:密码

Connection

上面讲过,就是数据库连接对象。它有3个作用

(1)获取执行者对象

  • 获取普通执行者对象:Statement createStatement();

  • 获取预编译执行者对象:PreparedStatement prepareStatement(String sql);

(2)管理事务

  • 开启事务:setAutoCommit(boolean autoCommit); 参数为false,则开启事务。

  • 提交事务:commit();

  • 回滚事务:rollback();

(3)释放资源

  • 立即将数据库连接对象释放:void close();

Statement

执行sql语句的对象

(1)执行DML语句

执行DML语句:int executeUpdate(String sql);

返回值int:返回影响的行数。

参数sql:可以执行insert、update、delete语句。

(2)执行DQL语句:

执行DQL语句:ResultSet executeQuery(String sql);

返回值ResultSet:封装查询的结果。

参数sql:可以执行select语句。

(3)释放资源

立即将执行者对象释放:void close();

ResultSet

ResultSet是结果集对象,有3个作用

(1)判断结果集中是否还有数据

boolean next();

有数据返回true,并将索引向下移动一行

没有数据返回false

(2)获取结果集中的数据

XXX getXxx("列名");

XXX代表数据类型(要获取某列数据,这一列的数据类型)

例如:String getString("name"); int getInt("age");

例如:

ResultSet rs = stat.executeQuery(sql);

while(rs.next()) {
            System.out.println( rs.getInt("id") + "\t"
                    + rs.getString("name") + "\t"
                    + rs.getInt("price") + "\t"
                    + rs.getString("brand") + "\t"
                    + rs.getInt("stock")
            );
        }

(3)释放资源

立即将结果集对象释放:void close();

下一节:案例实现

MySQL实现JDBC-简单案例演示_Tensorflow-CSDN博客https://blog.csdn.net/weixin_43715214/article/details/123075053

posted @ 2022-02-18 01:27  金鳞踏雨  阅读(18)  评论(0编辑  收藏  举报  来源