【MySQL探索之旅】JDBC (Java连接MySQL数据库)

封面

📚博客主页:爱敲代码的小杨.

✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》

❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️

🙏小杨水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

  • 1. JDBC 的概念
    • 1.1 JDBC 的概念
    • 1.2 JDBC 的本质
    • 1.3 JDBC 的好处
  • 2. JDBC 的使用
    • 2.1 编写代码的步骤
  • 3. JDBC 常用类和接口
    • 3.1 JDBC API
    • 3.2 Connection
    • 3.3 Statement

1. JDBC 的概念

1.1 JDBC 的概念

JDBC : 就是使用 Java 语言操作关系型数据库的一套 API
JDBC 全称:( Java DataBase Connectivity ) Java 数据库连接
image-20210725130537815.png
我们开发的同一套Java代码是无法操作不同的关系型数据库,因为每一个关系型数据库的底层实现细节都不一样。如果这样,问题就很大了,在公司中可以在开发阶段使用的是MySQL数据库,而上线时公司最终选用oracle数据库,我们就需要对代码进行大批量修改,这显然并不是我们想看到的。我们要做到的是同一套Java代码操作不同的关系型数据库,而此时sun公司就指定了一套标准接口(JDBC),JDBC中定义了所有操作关系型数据库的规则。众所周知接口是无法直接使用的,我们需要使用接口的实现类,而这套实现类(称之为:驱动)就由各自的数据库厂商给出。

1.2 JDBC 的本质

  • 官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口
  • 各个数据库厂商去实现这套接口,提供数据库驱动 jar
  • 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动 jar 包中的实现类

1.3 JDBC 的好处

  • 各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发
  • 可随时替换底层数据库,访问数据库的Java代码基本不变

以后编写操作数据库的代码只需要面向JDBC(接口),操作哪儿个关系型数据库就需要导入该数据库的驱动包,如需要操作MySQL数据库,就需要再项目中导入MySQL数据库的驱动包。(关注文末的公众号回复:MySQL即可获取驱动包)
image.png

2. JDBC 的使用

Java 操作数据库的流程
image.png

2.1 编写代码的步骤

  1. 创建工程, 导入驱动 jar

image.png
添加库
image.png
image.png

  1. 创建数据源(DataSource)
// 1. 创建数据源(DataSource)
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/你的数据名?characterEncoding=utf8&useSSL=false");
((MysqlDataSource) dataSource).setUser("你的用户名");
((MysqlDataSource) dataSource).setPassword("你的密码");
  1. 连接数据库服务器
// 2. 连接数据库服务器
Connection connection = dataSource.getConnection();
  1. 构造操作数据库的 SQL 语句
System.out.println("请输入id");
int id = input.nextInt();
System.out.println("请输入姓名");
String name = input.next();;
String sql = "insert into 你的表名 values (?,?)"; // sql语句
PreparedStatement preparedStatement = connection.prepareStatement(sql);  // 构造 "语句对象"
preparedStatement.setInt(1, id);
preparedStatement.setString(2, name);
  1. 执行 SQL 语句
int n = preparedStatement.executeUpdate();
System.out.println("n = " + n);
  1. 释放资源
preparedStatement.close();
connection.close();

案例

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

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

public class JDBCDemo {
    public static void main(String[] args) throws SQLException {
        Scanner input = new Scanner(System.in);

        // 1. 创建数据源(DataSource)
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java111?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("1234");

        // 2. 连接数据库服务器
        Connection connection = dataSource.getConnection();

        // 3. 构造操作数据库的 SQL 语句
        System.out.println("请输入id");
        int id = input.nextInt();
        System.out.println("请输入姓名");
        String name = input.next();;
        String sql = "insert into test values (?,?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);  // 构造 "语句对象"
        preparedStatement.setInt(1, id);
        preparedStatement.setString(2, name);

        // 4. 执行 SQL语句
        int n = preparedStatement.executeUpdate();
        System.out.println("n = " + n);

        // 5. 释放资源
        preparedStatement.close();
        connection.close();
    }
}

运行结果:
image.png
image.png

3. JDBC 常用类和接口

3.1 JDBC API

在Java JDBC编程中对数据库的操作均使用JDK自带的API统一处理,通常与特定数据库的驱动类是完全解耦的。所以掌握 Java JDBC API (位于 java.sql 包下) 即可掌握 Java 数据库编程。

3.2 Connection

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

  1. 一种是通过 DriverManager(驱动管理类)的静态方法获取:
// 加载 JDBC 驱动程序
Class.forName("com.mysql.jdbc.Driver");

// 创建数据库连接
Connection connection = DriverManager.getConnection(url);
  1. 一种是通过 DataSource(数据源)对象获取。实际应用中会使用 DataSource对象。
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java111?characterEncoding=utf8&useSSL=false");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("1234");

区别:

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

3.3 Statement

Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象。
image.png
实际开发中最常用的是 PreparedStatement对象
总结:
image.png
主要掌握两种执行 SQL 的方法:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/620849.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

供应商管理库存用什么软件

库存的管理是一个非常重要的话题,不管是企业还是个人,在日常工作中多多少少都会涉及到库存的管理,那么作为供应商,也是需要对库存进行管理的,因为需要对分销商进行出货,所以库存的有效管理非常重要。 供应商…

【数据结构】堆(Heap)

文章目录 一、堆的概念及结构二、堆的实现1.向上调整算法2.向下调整算法3.堆的创建4.堆的插入5.堆的删除6.堆的其他操作 三、堆的应用1.堆排序2.Top-K问题 一、堆的概念及结构 堆(Heap)是一种特殊的非线性结构。堆中的元素是按完全二叉树的顺序存储方式存储在数组 中。满足任意…

【送书福利第七期】你好!Java(文末送书)

文章目录 编辑推荐内容简介作者简介目录前言/序言 编辑推荐 适读人群 :程序员;相关院校师生 本书以轻松幽默的语言,从零开始介绍Java语言。书名来源于编程语言中最经典的Hello World程序,寓意带读者从入门到精通。 书中每章都设有总结与扩展…

开源软件托管平台gogs操作注意事项

文章目录 一、基本说明二、gogs私有化部署三、设置仓库git链接自动生成参数四、关闭新用户注册入口 私有化部署gogs托管平台,即把gogs安装在我们自己的电脑或者云服务器上。 一、基本说明 系统环境:ubuntu 20.4docker安装 二、gogs私有化部署 前期准…

深入学习心理学才知道以前高估了自己的交易能力

人的大脑总是能带来无限的惊喜。你能同时完成很多种工作而没有觉察你自己正在做这些事情。比如你一边开车一边打电话讨论着很严肃的事,边吃饭边用眼睛关心着后排坐着的孩子。除了这些外部的动作,你的内脏机能也在马不停蹄的工作着。这一切并不需要我们付…

【Shell】正则表达式的操作实例

正则表达式是一个描述一组字符串的模式 是由普通字符和元字符组成的字符集,而这个字符集匹配(或指定)一个模式。 正则表达式的操作实例 (一)概述1.定义2.作用3.类型 (二)字符串匹配实例&#xf…

掌握 Spring Boot 观察者模式:打造松耦合事件驱动应用程序

掌握 Spring Boot 观察者模式:打造松耦合事件驱动应用程序 观察者模式是一种常用的设计模式,用于解决事件驱动编程中的问题。该模式定义了一对多的依赖关系,其中一个对象(主题)向一组依赖它的对象(观察者&a…

【phpstorm】根据等号对键值对进行自动对齐

对于强迫症的我,看到这样的代码,总想给它整理一番。 可以通过 ide 配置,手动格式化代码,整理成这样: ide 版本: PhpStorm 2023.1.3 配置路径: Setting -> Editor -> Code Style -> PH…

智能酒精壁炉与酒店前台的氛围搭配

智能酒精壁炉与酒店前台的氛围搭配可以为前台区域增添舒适、现代和独特的氛围,以下是一些建议: 欢迎区域装饰: 将智能酒精壁炉作为前台欢迎区域的装饰物,放置在客人抵达的显眼位置。选择现代设计的壁炉款式,如壁挂式…

SpringBoot整合SpringScurity权限控制(菜单权限,按钮权限)以及加上SSH实现安全传输

文章目录 项目地址: 一、md5 与 先进的哈希算法的区别1.1. 安全性问题1.2. 设计目的1.3. 功能特性1.4. 适用性1.5. 总结 二、数据传输安全和数据加密实现:2.1 生成证书:2.2、在springboot中进行集成2.2.1 配置证书:2.2.2. 强制使用…

Pytorch 与 Tensorflow:深度学习的主要区别(1)

引言 目前,Python 深度学习领域已经涌现出多个由科技界巨头如 Google、Facebook 和 Uber 等公司公开发布的框架,这些框架旨在帮助开发者构建先进的计算架构。对于刚接触这一领域的你来说,深度学习是计算机科学中的一个分支,它通过…

springboot306基于Java的民宿管理系统(源码+包运行+配套LW+技术指导)

项目描述 临近学期结束,开始毕业设计制作,你还在做java程序网络编程,期末作业,老师的作业要求觉的困难吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于Java的民宿管理…

初识指针(5)<C语言>

前言 在前几篇文章中,已经介绍了指针一些基本概念、用途和一些不同类型的指针,下文将介绍某些指针类型的运用。本文主要介绍函数指针数组、转移表(函数指针的用途)、回调函数、qsort使用举例等。 函数指针数组 函数指针数组即每个…

24年做抖音小店,你还停留在数据?别人都已经开始注重利润了

大家好,我是电商笨笨熊 一件事情持续做,一个项目持续深耕,意义到底是什么? 这句话我常常说,但很多人似乎走偏了实际意义; 尤其对于新手来说,做抖音小店总是向往某某老玩家多么牛的数据&#…

如何把握人力RPO的蓝海机遇?实战策略分享!

随着企业间竞争的日益激烈,人力资源管理的重要性愈发凸显。在众多人力资源管理策略中,招聘流程外包(RPO)作为一种新兴的服务模式,逐渐受到业界的关注。那么,人力RPO是否是蓝海项目?我们又该如何实施RPO呢? 一、人力RPO&#xff…

C++干货--引用

前言: C的引用,是学习C的重点之一,它与指针的作用有重叠的部分,但是它绝不是完全取代指针(后面我们也会简单的分析)。 引用的概念: 引用 不是新定义一个变量 ,而 是给已存在变量取了一个别名 &#xf…

经典文献阅读之--D-Map(无需射线投射的高分辨率激光雷达传感器的占据栅格地图)

0. 简介 占用地图是机器人系统中推理环境未知和已知区域的基本组成部分。《Occupancy Grid Mapping without Ray-Casting for High-resolution LiDAR Sensors》介绍了一种高分辨率LiDAR传感器的高效占用地图框架,称为D-Map。该框架引入了三个主要创新来解决占用地图…

附录2 创建flask镜像

目录 1 python镜像 2 安装flask 3 把项目文件扔进去 3.1 创建git仓库 3.2 上传文件 3.3 获取git链接 3.4 在容器中git clone 4 启动flask服务 5 将容器保存为镜像 6 映射端口运行镜像 7 遇到的问题 8 Dockerfile创建镜像 1 python镜像 首先找一下fla…

Android 老年模式功能 放大字体

1 配置属性 <attr name"text_size_16" format"dimension"/><attr name"text_size_18" format"dimension"/><attr name"text_size_14" format"dimension"/><attr name"text_size_12&quo…

MySQL中的索引失效问题

索引失效的情况 这是正常查询情况&#xff0c;满足最左前缀&#xff0c;先查有先度高的索引。 1. 注意这里最后一种情况&#xff0c;这里和上面只查询 name 小米科技 的命中情况一样。说明索引部分丢失&#xff01; 2. 这里第二条sql中的&#xff0c;status > 1 就是范围查…