Java——MySQL数据库JDBC简介

一、JDBC简介

目标

  • 了解JDBC的好处
  • 知道什么是数据库驱动

讲解

1. 什么是JDBC
  • JDBC(Java DataBase Connectivity,java数据库连接):Sun公司提供的一套规范(接口), 是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
  • JDBC相关的类和接口,都在java.sql包里
2. JDBC的好处
  • 实现了Java程序对不同数据库统一操作
  • 没有JDBC时,Java操作数据库的模式:
    • 不同数据库的API,由数据库厂商自己提供,没有统一标准
    • 需要编写不同的Java程序,来操作不同的数据库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cWy75fMO-1667207470166)(img/1564835142113.png)]

  • 有JDBC后,Java操作数据库的模式

    • Sun公司规定了操作数据库的统一规范:JDBC
    • 各数据库厂商在提供操作数据库的API时,都要实现JDBC规范
    • 只需要编写一套程序,就可以操作不同的数据库

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T1TJPNfK-1667207470167)(G:/Java/web%E5%89%8D%E7%AB%AF/day15-JDBC,%E8%BF%9E%E6%8E%A5%E6%B1%A0/%E7%AC%94%E8%AE%B0/img/1564835453532.png)]

3. 数据库驱动:
  • 由数据库厂商提供的,JDBC规范的实现类,打包形成的jar包,叫数据库驱动包

    • 要操作什么数据库,就必须有什么数据库的驱动包
  • MySql的驱动包:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iQP0AWgP-1667207470168)(G:/Java/web%E5%89%8D%E7%AB%AF/day15-JDBC,%E8%BF%9E%E6%8E%A5%E6%B1%A0/%E7%AC%94%E8%AE%B0/img/image-20210429214841684.png)]

小结

  • JDBC:是Sun公司提供的一套规范,是一套执行SQL语句的Java API,好处是实现了Java程序对不同数据库的统一访问
  • 要使用JDBC操作数据库,必须有:数据库驱动包

二、JDBC快速入门

目标

  • 使用jdbc执行SQL语句,查询user表的数据输出到控制台

实现

1. 准备工作

初始化数据库,建表语句如下:

drop database if exists demo;
create database demo character set utf8;
use demo;

DROP TABLE IF EXISTS USER;
CREATE TABLE USER(
	id INT PRIMARY KEY AUTO_INCREMENT,
	username VARCHAR(20),
	PASSWORD VARCHAR(50),
	NAME VARCHAR(10),
	birthday DATE,
	age INT,
	sex CHAR(1)
) CHARACTER SET = utf8 COLLATE = utf8_general_ci;

INSERT INTO USER(id,username,PASSWORD,NAME,birthday,age,sex) VALUES
(NULL, 'xiaohong', 'xiaohong', '小红', '1999-09-09', 20, '男'),
(NULL, 'xiaolan', 'xiaolan', '小兰', '1997-09-09', 22, '女'),
(NULL, 'xiaolv', 'xiaolv', '小吕', '1999-09-09', 20, '女'),
(NULL, 'xiaozi', 'xiaozi', '小紫', '1999-09-09', 20, '男'),
(NULL, 'xiaoming', 'xiaoming', '小明', '1999-09-09', 20, '男');
2. JDBC步骤
  1. 导入数据库驱动jar包
  2. 编写程序
    1. 注册驱动:要操作哪种数据库,就要注册哪种数据库的驱动类
    2. 获取连接:连接上数据库
    3. 创建SQL执行平台:SQL执行平台提供了执行SQL语句的方法
    4. 执行SQL语句
    5. 处理结果
    6. 释放资源
3. 实现功能
package com.test.jdbc._01start;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * JDBC入门:可以执行SQL语句
 *      1. 注册驱动
 *      2. 获取连接
 *      3. 创建SQL执行平台
 *      4. 执行SQL
 *      5. 处理结果
 *      6. 释放资源
 */
public class Demo01JdbcStart {
    public static void main(String[] args) throws Exception {
        // 1. 注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 2. 获取连接
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "root");
        // 3. 创建SQL执行平台
        Statement statement = connection.createStatement();
        // 4. 执行SQL
        ResultSet resultSet = statement.executeQuery("select * from user");
        // 5. 处理结果
        while (resultSet.next()) {
            String username = resultSet.getString("username");
            String name = resultSet.getString("name");
            System.out.println(username +", " + name);
        }
        // 6. 释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

小结

三、JDBC的API详解【理解】

JDBC是一套规范,它包含了一批接口和工具类;由数据库驱动提供这些接口的实现类。JDBC的目的就是为了屏蔽不同数据库的底层操作,让开发人员只需要关注这些接口的使用,不需要关注底层具体的实现。

主要的接口和工具类有:

类名介绍
java.sql.DriverJDBC规定的驱动类接口
java.sql.ConnectionJDBC规定的数据库连接对象接口
java.sql.StatementJDBC规定的SQL执行平台对象接口
java.sql.ResultSetJDBC规定的查询结果集接口
java.sql.DriverManagerJDBC提供的工具类,用于注册驱动、获取连接

1. 注册驱动

目标
  • 理解注册驱动的目的
  • 理解两种注册驱动方式的优缺点
讲解
1.1 API介绍

java.sql.DriverManager提供了静态方法,用于注册驱动

方法名返回值
registerDriver(Driver driver)void
1.2 注册驱动的方式
方式一:使用DriverManager注册
  • 注册的代码:DriverManager.registerDriver(new com.mysql.jdbc.Driver());
  • 有一些问题:
    • 注册了两次:我们写的这行代码会注册一次;MySql驱动类被加载时,静态代码块里也会注册一次
    • 硬编码问题:代码写死了注册的是MySql的驱动,如果换了数据库,就不得不修改Java源码
方式二:使用反射技术注册【推荐】
  • 注册的代码:Class.forName("com.mysql.jdbc.Driver")
  • 好处:
    • 只注册了一次:这行代码一执行会加载这个类,类里的静态代码块会自动注册
    • 可以解决硬编码问题:把全限定类名字符串放到配置文件里;如果换了数据库,只需要修改配置文件
1.3 示例代码
package com.test.jdbc._02api;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * API详解:注册驱动
 *  1. 如果Java程序要操作数据库,就必须要注册驱动。操作什么数据库,就要注册什么驱动
 *  2. 驱动类是什么:
 *      JDBC规定了所有数据库驱动类都必须实现的接口:java.sql.Driver
 *      MySql驱动包里会实现这个接口,实现类名称是:com.mysql.jdbc.Driver
 *      注意:
 *          MySql数据库是5.7版本
 *          MySql驱动包也使用5.x版本
 *
 *      如果:
 *          MySql数据库是8.x版本
 *          MySql驱动包也使用8.x版本
 *  3. 如何注册驱动:
 *      注册方式一【不使用这种】:JDBC提供的注册方式
 *          DriverManager.registerDriver(Driver driver);
 *          问题1:注册了两次,实际上只要注册一次就可以了
 *          问题2:硬编码问题,代码里写死了注册的是MySql的驱动,这样的话,我们的Java程序就只能操作MySql了
 *      注册方式二【使用这种】:使用反射技术注册
 *          Class.forName(String driverClassName)
 *          只注册了一次:Class.forName()方法是用于加载类,获取类的字节码
 *          可以解决硬编码问题:把驱动类名提取到配置文件里,用Java代码读取配置文件得到驱动类名
 *
 * @author liuyp
 * @date 2021/09/04
 */
public class Demo01ApiDriver {
    public static void main(String[] args) throws Exception {
        // 1. 注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // DriverManager.registerDriver(new com.mysql.jdbc.Driver());


        // 2. 获取连接
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "root");
        // 3. 创建SQL执行平台
        Statement statement = connection.createStatement();
        // 4. 执行SQL
        ResultSet resultSet = statement.executeQuery("select * from user");
        // 5. 处理结果
        while (resultSet.next()) {
            String username = resultSet.getString("username");
            String name = resultSet.getString("name");
            System.out.println(username +", " + name);
        }
        // 6. 释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}
小结
  • 驱动类的接口:java.sql.Driver
  • 推荐的方式
Class.forName("com.mysql.jdbc.Driver");
  • 不推荐的方式:DriverManager.registerDriver(new com.mysql.jdbc.Driver())
    • 注册了2次
    • 存储硬编码问题:写死了只能操作MySql

2. 获取连接

目标
  • 理解获取连接的方法
  • 掌握数据库url地址的写法
讲解
2.1 API介绍

使用的是java.sql.DriverManager的方法

方法说明
getConnection(String url, String username, String password)获取数据库连接对象

参数:

  • url:数据库的连接地址。地址写法是由jdbc规定好的,由三部分组成,三部分之间使用:连接
    • 协议名:固定值jdbc
    • 子协议:用于声明连接的数据库是哪种类型。连接MySql写成固定值mysql
    • 具体地址:由数据库厂商自行规定的。MySql的详细地址写法:
      • 完整形式://数据库的ip:数据库的端口/database名称
      • 简写形式:///database名称, 只能用于连接本机、3306端口的MySql
  • username:数据库的帐号
  • password:数据库的密码
2.2 代码示例
package com.test.jdbc._02api;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * API详解:获取连接
 *      1. 连接对象是:接口是java.sql.Connection,实现类是什么?我们不关心
 *      2. 如何获取连接:
 *          使用JDBC的工具类DriverManager.getConnection(String url, String username, String password)
 *              参数url:数据库的地址,JDBC规定了数据库url地址的写法
 *                  由三部分组成,三部分之间使用英文冒号隔开。  协议名:子协议:具体地址
 *                  协议名:固定值jdbc
 *                  子协议:数据库的类型。如果操作MySql,子协议就是mysql
 *                  具体地址:由数据库厂商决定的写法。
 *                      MySql的具体地址写法是: //数据库ip:数据库商品/database名称
 *                      如果要连接本机默认端口: 可以简写成 ///database名称
 *              参数username:数据库的帐号
 *              参数password:数据库的密码
 */
public class Demo02ApiConnection {
    public static void main(String[] args) throws Exception {
        // 1. 注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        // 2. 获取连接
        // Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "root");
        Connection connection = DriverManager.getConnection("jdbc:mysql:///demo", "root", "root");

        // 3. 创建SQL执行平台
        Statement statement = connection.createStatement();
        // 4. 执行SQL
        ResultSet resultSet = statement.executeQuery("select * from user");
        // 5. 处理结果
        while (resultSet.next()) {
            String username = resultSet.getString("username");
            String name = resultSet.getString("name");
            System.out.println(username +", " + name);
        }
        // 6. 释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}
小结
  • 数据库连接接口:java.sql.Connection
  • 获取连接的方法:
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day04", "root", "root");
  • 数据库连接地址的写法:协议名:子协议:具体地址
    • 协议名:固定值jdbc
    • 子协议:如果操作的是MySql,子协议名就是mysql
    • 具体地址:由数据库厂商自行决定的写法。
      • MySql的写法://数据库ip:数据库端口/database名称
      • 如果连接本机的、默认3306端口的MySql:可以简写成///database名称
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我会尽量回答你的问题。关于Java连接MySQL数据库实现登录注册功能,以下是一个简单的实现步骤: 1.下载并安装MySQL数据库,安装完成后,创建一个名为“test”的数据库。 2.下载并安装JDBC驱动程序,将下载的JDBC驱动程序的jar包添加到项目的classpath中。 3.编写Java代码,实例化JDBC驱动程序,连接MySQL数据库,创建用户表,实现用户的注册和登录功能。 以下是一个简单的Java代码示例: ``` import java.sql.*; public class JdbcTest { public static void main(String[] args) { // 数据库连接信息 String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"; String username = "root"; String password = "123456"; // 注册JDBC驱动程序 try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("找不到JDBC驱动程序!"); e.printStackTrace(); return; } // 连接MySQL数据库 Connection conn = null; try { conn = DriverManager.getConnection(url, username, password); } catch (SQLException e) { System.out.println("连接MySQL数据库失败!"); e.printStackTrace(); return; } // 创建用户表 Statement stmt = null; try { stmt = conn.createStatement(); String sql = "create table if not exists user(id int primary key auto_increment, username varchar(50) not null, password varchar(50) not null)"; stmt.executeUpdate(sql); } catch (SQLException e) { System.out.println("创建用户表失败!"); e.printStackTrace(); return; } finally { if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } // 用户注册 PreparedStatement pstmt = null; try { String sql = "insert into user(username, password) values (?, ?)"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, "user1"); pstmt.setString(2, "123456"); pstmt.executeUpdate(); } catch (SQLException e) { System.out.println("用户注册失败!"); e.printStackTrace(); return; } finally { if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } // 用户登录 ResultSet rs = null; try { String sql = "select * from user where username=? and password=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, "user1"); pstmt.setString(2, "123456"); rs = pstmt.executeQuery(); if (rs.next()) { System.out.println("用户登录成功!"); } else { System.out.println("用户名或密码错误!"); } } catch (SQLException e) { System.out.println("用户登录失败!"); e.printStackTrace(); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } // 关闭数据库连接 try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们先注册了JDBC驱动程序,然后连接了MySQL数据库,接着创建了一个名为“user”的用户表,实现了用户的注册和登录功能。你可以根据自己的需求修改代码中的数据库连接信息和SQL语句。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值