0
点赞
收藏
分享

微信扫一扫

Java之JDBC 概述和快速入门

眼君 2022-01-21 阅读 99

文章目录

1、JDBC 概述

1.1、基本介绍

在这里插入图片描述
在这里插入图片描述

1.2、模拟 JDBC

JdbcInterface.java

package jdbc.myjdbc;

/**
 * 规定的 jdbc 接口(方法)
 */
public interface JdbcInterface {
    // 连接
    public Object getConnection();

    // crud
    public void crud();

    // 关闭连接
    public void close();
}

TestJDBC.java

package jdbc.myjdbc;

public class TestJDBC {
    public static void main(String[] args) {
        // 完成对 mysql 的操作
        JdbcInterface jdbcInterface = new MysqlJdbcImpl();
        jdbcInterface.getConnection();  // 通过接口来调用实现类[动态绑定]
        jdbcInterface.crud();
        jdbcInterface.close();

        // 完成对 oracle 的操作
        jdbcInterface = new OracleJdbcImpl();
        jdbcInterface.getConnection();  // 通过接口来调用实现类[动态绑定]
        jdbcInterface.crud();
        jdbcInterface.close();
    }
}

MysqlJdbcImpl.java

package jdbc.myjdbc;

/**
 * mysql 数据库实现了 jdbc 接口 [模拟] [mysql 厂商开发]
 */
public class MysqlJdbcImpl implements JdbcInterface {
    @Override
    public Object getConnection() {
        System.out.println("得到 mysql 的连接");
        return null;
    }

    @Override
    public void crud() {
        System.out.println("完成 mysql 增删改查");
    }

    @Override
    public void close() {
        System.out.println("关闭 mysql 的连接");
    }
}

OracleJdbcImpl.java

package jdbc.myjdbc;

/**
 * 模拟 oracle 数据库实现 jdbc
 */
public class OracleJdbcImpl implements JdbcInterface {
    @Override
    public Object getConnection() {
        System.out.println("得到 oracle 的连接 升级");
        return null;
    }

    @Override
    public void crud() {
        System.out.println("完成 对 oracle 的增删改查");
    }

    @Override
    public void close() {
        System.out.println("关闭 oracle 的连接");
    }
}

1.3、JDBC 带来的好处

在这里插入图片描述
在这里插入图片描述

1.4、JDBC API

在这里插入图片描述

2、JDBC 快速入门

2.1、JDBC 程序编写步骤

在这里插入图片描述

2.2、安装驱动的步骤

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如上步骤完成之后:

2.3、JDBC 第一个程序

创建数据表

2.4、代码实现

package jdbc;


import com.mysql.jdbc.Driver;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * 这是第一个 Jdbc 程序, 完成简单的操作
 */
public class Jdbc01 {
    public static void main(String[] args) throws SQLException {
        // 前置工作: 在项目下创建一个文件夹比如 libs
        // 将 mysql.jar 拷贝到该目录下, 点击 add to project ... 加入到项目中
        // 1. 注册驱动
        Driver driver = new Driver();  // 创建 driver 对象

        // 2. 得到连接
        // (1) jdbc:mysql:// 规定好表示协议, 通过 jdbc 的方式连接 mysql
        // (2) localhost 主机, 可以是 ip 地址
        // (3) 3306 表示 mysql 监听的端口
        // (4) user_db 连接到 mysql dbms 的哪个数据库
        // (5) mysql 的连接本质就是前面学过的 socket 连接
        // (6) ?useUnicode=true&characterEncoding=UTF-8"; 添加这行可以解决中文乱码问题(插入的数据在数据库中显示问号)
        String url = "jdbc:mysql://localhost:3306/user_db?useUnicode=true&characterEncoding=UTF-8";
        // 将 用户名和密码放入到 Properties 对象
        Properties properties = new Properties();
        // 说明 user 和 password 是规定好, 后面的值根据实际情况填写
        properties.setProperty("user", "root");  // 用户
        properties.setProperty("password", "root");  // 密码
        Connection connect = driver.connect(url, properties);

        // 3. 执行 sql
        // 添加的sql
        String sql = "insert into actor values(null, '刘德华', '男', '1970-11-11', '110')";

        // 更新的sql
        // String sql = "update actor set name='周星驰' where id = 1";

        // 删除的sql
        // String sql = "delete from actor where id = 1";

        // statement 用于执行静态 SQL 语句并返回其生成的结果的对象
        Statement statement = connect.createStatement();
        int rows = statement.executeUpdate(sql);  // 如果是 dml 语句, 返回的就是影响行数
        System.out.println(rows > 0 ? "成功" : "失败");

        // 4. 关闭连接资源
        statement.close();
        connect.close();
    }
}

2.5、获取数据库连接 5 种方式

2.5.1、方式 1

在这里插入图片描述

2.5.2、方式 2

在这里插入图片描述

2.5.3、方式 3

在这里插入图片描述

2.5.4、方式 4

在这里插入图片描述

2.5.5、方式 5

在这里插入图片描述

package jdbc;

import com.mysql.jdbc.Driver;
import org.junit.jupiter.api.Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

/**
 * java 连接 mysql 的 5 中方式
 */
@SuppressWarnings({"all"})
public class JdbcConn {
    // 方式 1
    @Test
    public void connect01() throws SQLException {
        Driver driver = new Driver();  // 创建 driver 对象
        String url = "jdbc:mysql://localhost:3306/user_db?useUnicode=true&characterEncoding=UTF-8";
        // 将 用户名和密码放入到 Properties 对象
        Properties properties = new Properties();
        // 说明 user 和 password 是规定好, 后面的值根据实际情况填写
        properties.setProperty("user", "root");  // 用户
        properties.setProperty("password", "root");  // 密码
        Connection connect = driver.connect(url, properties);
        System.out.println("方式1=" + connect);  // 方式1=com.mysql.jdbc.JDBC4Connection@d6da883
    }

    // 方式 2
    @Test
    public void connect02() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        // 使用反射加载 Driver 类, 动态加载, 更加的灵活, 减少依赖性
        Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver) aClass.newInstance();
        String url = "jdbc:mysql://localhost:3306/user_db?useUnicode=true&characterEncoding=UTF-8";
        // 将 用户名和密码放入到 Properties 对象
        Properties properties = new Properties();
        // 说明 user 和 password 是规定好, 后面的值根据实际情况填写
        properties.setProperty("user", "root");  // 用户
        properties.setProperty("password", "root");  // 密码
        Connection connect = driver.connect(url, properties);
        System.out.println("方式2=" + connect);  // 方式2=com.mysql.jdbc.JDBC4Connection@d6da883
    }

    // 方式 3 使用 DriverManager 替代 driver 进行统一管理
    @Test
    public void connect03() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
        // 使用反射加载 Driver
        Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver) aClass.newInstance();
        // 创建 url 和 user 和 password
        String url = "jdbc:mysql://localhost:3306/user_db?useUnicode=true&characterEncoding=UTF-8";
        String user = "root";
        String password = "root";
        DriverManager.registerDriver(driver);  // 注册 Driver 驱动成功
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println("方式3=" + connection);  // 方式3=com.mysql.jdbc.JDBC4Connection@45afc369
    }

    // 方式 4: 使用 Class.forName 自动完成注册驱动, 简化代码
    // 这种方式获取连接是使用的最多, 推荐使用
    @Test
    public void connect04() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
        // 使用反射加载了 Driver 类
        // 在加载 Driver 类时, 完成注册
        /*
        源码:
        1. 静态代码块, 在类加载时, 会执行一次
        2. DriverManager.registerDriver(new Driver());
        3. 因此注册 driver 的工作已经完成
        static {
            try {
                DriverManager.registerDriver(new Driver());
            } catch (SQLException var1) {
                throw new RuntimeException("Can't register driver!");
            }
        }
        */
        Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver) aClass.newInstance();
        // 创建 url 和 user 和 password
        String url = "jdbc:mysql://localhost:3306/user_db?useUnicode=true&characterEncoding=UTF-8";
        String user = "root";
        String password = "root";
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println("方式4=" + connection);  // 方式4=com.mysql.jdbc.JDBC4Connection@d6da883
    }

    // 方式 5, 在方式 4 的基础上改进, 增加配置文件, 让连接 mysql 更加灵活
    @Test
    public void connect05() throws IOException, ClassNotFoundException, SQLException {
        // 通过 Properties 对象获取配置文件的信息
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\mysql.properties"));
        // 获取相关的值
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String driver = properties.getProperty("driver");
        String url = properties.getProperty("url");
        Class.forName(driver);  // 建议写上
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println("方式5=" + connection);  // 方式5=com.mysql.jdbc.JDBC4Connection@d6da883
    }
}

mysql.properties

举报

相关推荐

0 条评论