MySQL环境下JDBC编程起步详解

文章标题:

MySQL环境下JDBC编程入门全解

文章内容:

MySQL环境下JDBC编程起步详解

个人主页♡爱幻想的人

欢迎 👍点赞 ➕关注 ❤️收藏 💬评论


目录

🌟一、何为JDBC?

🌟二、JDBC编程的步骤

✨使用流程

✨DriverManger

💫定义

💫DriverManger的主要作用

💫DriverManger的关键方法

💫使用示例

✨DataSource

💥定义

💥使用方式

💥代码优化手段

✨DriverManger与DataSource的差异


🌟一、何为JDBC?

JDBC(Java Data Base Connectivity,即Java数据库连接)是Java程序和数据库之间的沟通纽带,是Java语言操作数据库的标准API,它提供了一套用于执行SQL语句的Java接口。其主要功能是实现与数据库的连接、发送SQL语句以及处理数据库执行后的结果。

🌟二、JDBC编程的步骤

✨使用流程

1.加载数据库厂商所提供的驱动包

2.建立与数据库的连接,需要用到用户名和密码等信息

3.创建用于执行SQL语句的Statement对象

4.发送需要执行的SQL语句

5.接收并展示返回的结果(包括结果集以及受影响的行数等)

6.释放相关资源并关闭连接

✨DriverManger

💫定义

DriverManger是JDBC中的一个核心类,处于java.sql包下,它负责对数据库驱动程序进行管理,并且为客户端程序提供获取数据库连接的方法。它就如同一个“驱动协调者”,协调不同数据库驱动与应用程序之间的交互运作。

💫DriverManger的主要作用

  • 注册数据驱动:对已经加载的数据进行管理;
  • 获取数据库连接:依据连接信息(URL、用户名、密码)返回合适的Connection对象;
  • 处理驱动程序之间的竞争:当有多个驱动都能连接到同一URL时,挑选出最合适的那个驱动。

URL是统一资源定位符,是互联网上用于指定一个位置、文件或者资源的标准方式。

💫DriverManger的关键方法

getConnection()

关键方法 功能
getConnection(String url) 通过URL来获取连接
getConnection(String url,String user,String password) 通过URL、用户名和密码来获取连接
getConnection(String url,Properties info) 通过URL和包含连接属性的Properties对象来获取连接
registerDriver(Driver driver) 注册驱动(一般无需手动调用)
deregisterDriver(Driver driver) 注销驱动
gerDrivers() 获取所有已注册的驱动

💫使用示例

import java.sql.*;
import java.text.MessageFormat;
import java.util.Scanner;

public class DemoOne {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //1,加载数据库厂商提供的驱动:将数据库提供的jdbc驱动类加载并注册到DriverManger中
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取数据库连接--类似在数据库中执行use java2;操作
            //数据库连接URL格式:jdbc:mysql://服务器地址:端口/数据库?参数名=值[&参数名=值]
            conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java2?characterEncoding=utf8" +
                    "&allowPublicKeyRetrieval=true&useSSL=false", "root", "123456");
            //3.创建Statement对象:Statement用于向数据库发送SQL语句
            stmt = conn.createStatement();
            //4.定义SQL语句并执行
            System.out.println("请输入学生姓名:");
            Scanner sc = new Scanner(System.in);
            //接收用户输入
            String name = sc.next();
            String sql = "select id,name,class_id from students where name='" + name + "'";
            //5.执行SQL,获取查询结果
            //executeQuery用于执行select语句,返回结果集
            rs = stmt.executeQuery(sql);
            //6.对结果集进行遍历获取结果
            //有返回true,没有返回false
            while (rs.next()) {
                long id = rs.getLong(1);//获取第一列字段的值
                String Stuname = rs.getString(2);//获取第二列字段的值
                long class_id = rs.getLong(3);//获取第三列字段的值
                System.out.println(MessageFormat.format("学生id={0},姓名={1},班级={2}", id, name, class_id));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {// 释放资源(从后往前释放),关闭连接
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

✨DataSource

💥定义

是Java数据库连接(JDBC)的一个接口,用于获取数据库连接,能够方便地对数据库连接资源进行管理,还可以实现连接池等高级功能。

💥使用方式

import com.mysql.cj.jdbc.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.*;
import java.text.MessageFormat;
import java.util.Scanner;

public class DemoTwo {
    public static void main(String[] args) {
        //定义MySQL数据源对象
        MysqlDataSource mysqlDataSource = new MysqlDataSource();
        //MySQL驱动直连
        //数据库连接
        mysqlDataSource.setURL("jdbc:mysql://127.0.0.1:3306/java2?characterEncoding=utf8");
        mysqlDataSource.setUser("root");
        mysqlDataSource.setPassword("123456");
        //定义jdbc数据源对象
        DataSource dataSource = mysqlDataSource;
        Connection conn = null;
        //预处理
        PreparedStatement stmt = null;
        //查询结果集对象
        ResultSet rs = null;
        try {
            //1.获取数据库连接
            conn = dataSource.getConnection();
            //2.创建Statement对象:Statement用于向数据库发送SQL语句
            //定义SQL语句并执行
            String sql = "select id,name,class_id from students where name=?";
            stmt = conn.prepareStatement(sql);
            //3.接收用户输入
            System.out.println("请输入学生姓名:");
            Scanner sc = new Scanner(System.in);
            String name = sc.next();
            // 用真实值替换占位符
            stmt.setString(1, name);
            //4..执行SQL,获取查询结果
            //executeQuery用于执行select语句,返回结果集
            rs = stmt.executeQuery(sql);
            //5.对结果集进行遍历获取结果
            //有返回true,没有返回false
            while (rs.next()) {
                long id = rs.getLong(1);//获取第一列字段的值
                String Stuname = rs.getString(2);//获取第二列字段的值
                long class_id = rs.getLong(3);//获取第三列字段的值
                System.out.println(MessageFormat.format("学生id={0},姓名={1},班级={2}", id, name, class_id));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {// 释放资源(从后往前释放),关闭连接
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

💥代码优化手段

封装

import com.mysql.cj.jdbc.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Random;

public class DBUtil {
    //数据源
    private static DataSource dataSource = null;
    //数据库连接串
    private static final String url = "jdbc:mysql://127.0.0.1:3306/java2?characterEncoding=utf8";
    //用户
    private static String user = "root";
    //密码
    private static String password = "123456";
    //当类加载到JVM时,执行数据源的初始化
    static {
        MysqlDataSource mysqlDataSource = new MysqlDataSource();
        mysqlDataSource.setURL(url);
        mysqlDataSource.setUser(user);
        mysqlDataSource.setPassword(password);
        dataSource = mysqlDataSource;
    }
    public static void close(ResultSet rs, Statement stmt, Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    //构造方法私有化,防止new这个对象
    private DBUtil() {};
    //获取数据连接
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }
}

使用jdbc插入数据

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

public class DemoThree {
    //插入数据
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement stmt = null;
        //插入数据,不用获得结果集,要影响行数即可
        try {
            //获取数据库
            conn = DBUtil.getConnection();
            //定义SQL
            String sql = "insert into students(id,name,class_id) values(?,?,?)";
            //定义SQL预处理对象
            stmt = conn.prepareStatement(sql);
            //接收用户参数
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入id");
            Long id = Long.valueOf(sc.next());
            System.out.println("请输入姓名");
            String name = sc.next();
            System.out.println("请输入班级");
            Long class_id = Long.valueOf(sc.next());
            //用真实数据代替占位符
            stmt.setLong(1, id);
            stmt.setString(2, name);
            stmt.setLong(3, class_id);
            //获取结果,影响的行数
            //executeUpdate执行返回结果是一个整形,通常用于insert、delete、update
            int row = stmt.executeUpdate();
            //判断
            if (row == 1) {
                System.out.println("插入成功");
            } else {
                System.out.println("插入失败");
            }
        } catch (SQLException e) {
            e.printStackTrace();

        } finally {
            //关闭连接,释放资源
            DBUtil.close(null, stmt, conn);
        }
    }

}

✨DriverManger与DataSource的差异

  • DriverManger每次调用都会重新初始化一个新的连接,容易造成资源的浪费;
  • DataSource采用连接池技术,一个连接可以被重复使用,用DataDource替代DriverManger.getConnection()的直连方式,更加直接且灵活。

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/13653.html

(0)
LomuLomu
上一篇 2025 年 9 月 19 日
下一篇 2025 年 9 月 19 日

相关推荐

  • 剖析Bean工厂接口,源码理解不复杂

    剖析Bean工厂接口,源码理解并不难 前日在研习Spring框架的相关内容时,接触到了IOC部分,可彼时实在难以领会其内涵,虽说有提及源码方面的讲解,但并未完全弄通透,于是心想不妨自己去研读源码。 这是我绘制的Bean Factory大致关系图,为了便于理解,已删去了bean别名管理接口(AliasRegistry)和bean定义接口(BeanDefinit…

    2025 年 7 月 10 日
    20500
  • IoC究竟是什么?——IoC的基础分析

    IoC全称Inversion of Control,直译为控制反转。这是一种设计理念,并非技术。在明白控制反转之前,应该知道“反转”反的是什么。 被反转的正转 我们从生活中的做饭场景开始。 在家做菜与餐馆吃饭 我们在做饭的时候有很多个步骤,需要准备原料,厨具等等。最后通过一定的顺序加入我们的原料,再进行翻炒等烹饪操作就能够得到一份菜了。我们想吃一份菜不一定需…

    未分类 2025 年 1 月 13 日
    43800
  • 一文搞懂架构设计的衡量标准:功能性、可用性、性能、可扩展性、安全性、协作效率、复杂度、成本效益

    大家好,我是汤师爷~ 架构设计的首要目标是服务于业务需求。因此,我们不应该盲目追求所谓的”最厉害的”架构,而应该致力于寻找最适合当前业务环境和未来发展需求的架构方案。 衡量架构的合理性是一个复杂的过程,需要从多个角度进行全面评估。主要可以从以下视角进行分析: 功能需求视角:评估架构是否有效支撑当前业务需求,并具有充分的灵活性以适应未来业务发展。 非功能需求视…

    未分类 2025 年 1 月 15 日
    49900
  • 多平台通用IDEA激活码合集|亲测有效!

    免责声明:下文提及的 IntelliJ IDEA 破解补丁与激活码均来自互联网公开渠道,仅供个人学习研究,禁止商业用途。若条件允许,请支持正版!官方低价入口:https://panghu.hicxy.com/shop/?id=18 JetBrains 出品的 IntelliJ IDEA 被誉为最强 Java IDE,跨 Windows、macOS、Linux…

    IDEA破解教程 2025 年 9 月 24 日
    17200
  • 2025年最新IDEA激活码及永久破解教程(支持JetBrains全家桶)

    本教程适用于IntelliJ IDEA、PyCharm、DataGrip、GoLand等JetBrains系列开发工具,提供完整的破解方案。 先展示最新IDEA版本破解成功的效果图,可以看到已成功激活至2099年! 下面将详细介绍如何将IDEA永久激活至2099年。此方法同样适用于旧版本,无论您使用什么操作系统或版本,都能完美支持。 第一步:获取IDEA安装…

    IDEA破解教程 2025 年 7 月 21 日
    19500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信