Java代码操作MySQL数据库——JDBC编程

news2024/11/26 8:34:15

本篇会加入个人的所谓鱼式疯言

❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言

而是理解过并总结出来通俗易懂的大白话,

小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.

🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!

前言

在这里插入图片描述

我们学习数据库的两个重点且 热门的考题——索引和事务

熟悉了索引的 查询优势底层数据结构,并了解了事务的 概念四大基本特性

而本篇文章是另一个小小的开端,试问小伙伴们有没有用 Java代码 来操作 MySQL数据库 的!

而在本篇文章中小编将带着小伙伴掌握用Java代码对数据库进行基础的CRUD 操作 💖 💖 💖 💖

目录

  1. JDBC的初识

  2. 准备工作

  3. 增加数据

  4. 修改数据

  5. 删除数据

  6. 查询数据

一. JDBC 的初识

1. API 的简介

在谈及 JDBC 前,小伙伴们是否听说过 API 这个 概念

API 的全称: application program interface ;

API 简单来说就是 像我们平常在 Java 或者 数据库 中接触的一些 库,方法, 函数 等等… 这些一系列的 规则和协议

鱼式疯言

比如我们Java就有:

Random

Scnner

Map

Set

list

这些我们都可以称为 Java标准库API

JDBC 的简介

像我们 JavaJava 的自己的 API , 数据库下也有不同的 APIMySQL 有自己的 独立的APIOracle 有自己 独立的API 等…

居然不一样,那么我们该怎么通过 Java的API 来 操控数据库 呢 ? ? ?

其实在 Java 就用了一组 API 来兼容对于 所有数据库的操作 ,使这组 API 成为了 Java 操作数据库 的一组 标准的体系

而要利用这组 API 来操作,我们需要引入一个 第三方的API , 而这第三方的库就是小伙伴们今天要学习的 JDBC

了解完 JDBC ,小伙伴们一定很疑惑 JDBC 怎么安装,怎么操作 ? ? ?

下面让来指引着小伙伴来操作吧 💞 💞💞 💞

二. 准备工作

1. 安装JDBC

<1>. 找到JDBC安装的链接

安装JDBC的链接

在这里插入图片描述

<2>. 使用经典版找到对应版本下载

如果你MySQL是 5.7 的就找 5开头任意版即可

如果你MySQL是 8.3 的就找 8开头任意版即可

以此类推,MySQL是几点多 的就找到对应 几点对 的版本安装即可,以免出现 版本问题

小编这里是5.7的MySQL, 就随机点了一个5点多的JDBC的第三方库给小伙伴演示安装流程

在这里插入图片描述

2. 在IDEA中配置环境

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这样就算导入我们的 第三方库 ,可以在 IDEA 上正常使用咯, 小伙伴学废了吗 💖 💖 💖 💖

3. 连接 数据库MySQL

// 创建数据源对象
        DataSource dataSource = new MysqlDataSource();

        // 登入本地IP
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java112?characterEncoding=utf8&useSSL=false");
        // 登入用户
        ((MysqlDataSource)dataSource).setUser("root");
        // 登入密码
        ((MysqlDataSource)dataSource).setPassword("q20031229");

        // 进行服务器网络连接
        Connection connection = dataSource.getConnection();

<1>. 创建数据源对象并登入 本地IP

// 创建数据源对象
        DataSource dataSource = new MysqlDataSource();

        // 登入本地IP
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java112?characterEncoding=utf8&useSSL=false");

这是固定的 连接方式,小伙伴按照这样写即可

鱼式疯言

// 创建数据源对象
        DataSource dataSource = new MysqlDataSource();

Database 是一个 接口MySQLDatabase 是一个 ,这里 创建数据源 时,我们用到了 向上转型

((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java112?
characterEncoding=utf8&useSSL=false");
 

这里 小括号 的就是 向下转型 ,在 Database 这个 接口 中,是不存在这个 setURL 这个方法的。我们就需要 向下转型 , 用到 MySQLDataBase 这个 方法

"jdbc:mysql://127.0.0.1:3306/java112?characterEncoding=utf8&useSSL=false"

注意这里的Java112 指的是小伙伴自己 创建的数据库 ,而小编的数据库就是 Java112 ,所以小伙伴们要根据 自己的数据库指定 哦。

<2>. 用户

 // 登入用户
        ((MysqlDataSource)dataSource).setUser("root");

root用户最高管理员权限 ,我们使用这个 用户权限 即可 。

<3>. 密码

 // 登入密码
        ((MysqlDataSource)dataSource).setPassword("q20031229");

这个密码是自己当初 设置登入MySQL密码

鱼式疯言

注意这里的连接的内容都是需要带上 双引号 哦 💫 💫 💫 💫

<4> . 网络连接

   // 进行服务器网络连接
        Connection connection = dataSource.getConnection();

这个也是固定,小伙伴 照着写 就可以 💞 💞 💞 💞

三. 增加数据

1. Java代码

package JDBCTest;


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 TestInsert {
    public static void main(String[] args) throws SQLException {
        // 创建数据源对象
        DataSource dataSource = new MysqlDataSource();



        /**
         *  以下这三种方法是子类特有, 接口并没有
         *  需要向下转型
         */

        // 找到服务器在哪
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java112?
        characterEncoding=utf8&useSSL=false");
        // 确定用户权限
        ((MysqlDataSource)dataSource).setUser("root");
        // 确定密码
        ((MysqlDataSource)dataSource).setPassword("q20031229");


        /**
         * 准备工作做完之后,开始对服务器进行网络连接
         *
         */
        Connection connection = dataSource.getConnection();

        // 输入增加数据
        Scanner scanner = new Scanner(System.in);
         String name =  scanner.nextLine();
         int  id  = scanner.nextInt();

        // 创建 SQL语句

        String sql = "insert into test values (" +  id +  " , '" +  name + "' )";

        // 进行预编译
        PreparedStatement statement = connection.prepareStatement(sql);


        // 执行SQL语句到服务器上
        int num=  statement.executeUpdate();
        System.out.println(num);

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

在这里插入图片描述

实现步骤

<1>. 创建SQL语句并指定输入

// 输入增加数据
Scanner scanner = new Scanner(System.in);
 String name =  scanner.nextLine();
 int  id  = scanner.nextInt();

// 创建 SQL语句

String sql = "insert into test values (" +  id +  " , '" +  name + "' )";

<2>. 预编译

  // 进行预编译
        PreparedStatement statement = connection.prepareStatement(sql);

<3>. 执行SQL到服务器上

```sql
   // 执行SQL语句到服务器上
        int num=  statement.executeUpdate();
        System.out.println(num);

鱼式疯言

关于我们 修改,删除,插入 操作都是用 executeUpdate 这个方法来执行我们的 SQL 语句,并且他会 返回插入 多少行的一个整数

在这里插入图片描述

<4>. 释放资源

// 释放资源

        statement.close();
        connection.close();

鱼式疯言

注意细节

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

因为有 同名的类不同包 的情况 , 小伙伴们一定要注意,这些类 所对应的包, 否则就会 出错

四. 修改数据

1. Java代码

package JDBCTest;

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

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



public class TestUpdate {
    public static void main(String[] args) throws SQLException {
        // 创建数据源对象
        MysqlDataSource MysqldataSource = new MysqlDataSource();
        // 进行准备工作

        // 确认服务器地址
        MysqldataSource.setURL("jdbc:mysql://127.0.0.1:3306/java112?
characterEncoding=utf8&useSSL=false");
        // 确认用户
        MysqldataSource.setUser("root");
        // 确认密码
        MysqldataSource.setPassword("q20031229");

        // 和服务器进行网络连接
       Connection connection = MysqldataSource.getConnection();

       // 创建 SQL 语句
        String sql = new String("update  test set id=10 where name = '张三' ");

        // 进行预编译
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        // 执行到服务器上
        int num =  preparedStatement.executeUpdate();
        System.out.println(num);

        // 关闭资源
        preparedStatement.close();
        connection.close();



    }
}

在这里插入图片描述

鱼式疯言

这里和上面大体都是一样一样的,只是我们在 创建SQL语句 这一行 代码不一致 而已
我只需改成我们 本身SQL语句修改 ,然后直接放入 预编译的方法 中即可 (无须像上面一样进行 输入 )。

五. 删除数据

1. Java 代码

package JDBCTest;

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

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


public class TestDelete {
    public static void main(String[] args) throws SQLException {
        // 创建数据源对象
        MysqlDataSource mysqlDataSource = new MysqlDataSource();

        // 进行准备工作
        // 确实服务器地址
        mysqlDataSource.setURL("jdbc:mysql://127.0.0.1:3306/java112?characterEncoding=utf8&useSSL=false");
        mysqlDataSource.setUser("root");
        mysqlDataSource.setPassword("q20031229");

        // 进行网络连接
       Connection connection = mysqlDataSource.getConnection();

       // 创建SQL语句
        String sql = "delete from test where id = 19 ";

        // 进行预编译
       PreparedStatement preparedStatement = connection.prepareStatement(sql);

       // 执行到服务器
        preparedStatement.executeUpdate();

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

在这里插入图片描述

和上面代码 雷同 ,只是在 创建SQL 时的SQL语句不同,小编在这里就 不赘述 了。 💞 💞 💞 💞

六. 查询数据

1. Java代码

package JDBCTest;

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

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


public class TestSelect {
    public static void main(String[] args) throws SQLException {
        // 创建数据源对象
        DataSource dataSource = new MysqlDataSource();

        // 登入本地IP
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java112?characterEncoding=utf8&useSSL=false");
        // 登入用户
        ((MysqlDataSource)dataSource).setUser("root");
        // 登入密码
        ((MysqlDataSource)dataSource).setPassword("q20031229");

        // 进行服务器网络连接
        Connection connection = dataSource.getConnection();

        // 创建 SQL 语句
        String sql = "select * from test";

        // 预编译
       PreparedStatement preparedStatement = connection.prepareStatement(sql);


        /**
         *
         * 执行SQL到服务器上
         * 执行后返回一个结果集
         * 我们只需要遍历这个结果集
         * 就能输出对应表数据
         *
         */

       ResultSet resultSet = preparedStatement.executeQuery();

       // 遍历结果集输出
        while (resultSet.next()) {
            System.out.println(resultSet.getInt(1) +" "+  resultSet.getString(2));

        }


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

在这里插入图片描述

2. 实现细节

雷同的小编在这里就不过 多赘述 了,说说主要的 变化的哪些代码吧

<1>. 得到结果集


    /**
     *
     * 执行SQL到服务器上
     * 执行后返回一个结果集
     * 我们只需要遍历这个结果集
     * 就能输出对应表数据
     *
     */


   ResultSet resultSet = preparedStatement.executeQuery();

当我们需要 查询操作 时, 就需要用到 executeQuery 这个 方法 ,而这个 方法 还有一个特殊的要点 就是会返回一个 结果集

这里的结果集就相当于这里的 Set ,把 所有的行 对应的 列数据 都放在这里的 Set

在这里插入图片描述

<2>. 输出结果集

   // 遍历结果集输出
    while (resultSet.next()) {
        System.out.println(resultSet.getInt(1) +" "+  resultSet.getString(2));

    }

在这里插入图片描述

我们得到一个 结果集 之后,就可以对其中的 每一行 进行循环遍历进行 输出打印

这里的 resultSet.next() 就是用来判断 是否存在下一个元素 ,如果存在就返回true,不存在就返回 false

总结

本篇文章

  • . JDBC的初识: 认识了API 以及JDBC的第三方库的概念

  • . 准备工作: 熟悉了如何安装JDBC的第三方库和版本问题并且配置好相对应的环境如:
    创建数据源,本地IP连接,用户权限,密码,网络连接。

  • . 增加数据: 通过Java代码来增加并详细每一步的操作解释了每一步所对应的作用和原理如:创建SQL语句, 预编译SQL, 执行SQL,释放资源。

  • . 修改数据: 通过Java代码来增加并详细每一步的操作解释了每一步所对应的作用和原理如:创建SQL语句, 预编译SQL, 执行SQL,释放资源。

  • . 删除数据: 通过Java代码来增加并详细每一步的操作解释了每一步所对应的作用和原理如:创建SQL语句, 预编译SQL, 执行SQL,释放资源。

  • . 查询数据: 通过Java代码来查询并引入结果集的概念来接收数据库的数据并遍历打印,如:创建SQL语句,预编译SQL, 执行SQL并放入结果集 ,遍历结果集,释放资源。

如果觉得小编写的还不错的咱可支持 三连 下 (定有回访哦) , 不妥当的咱请评论区 指正

希望我的文章能给各位宝子们带来哪怕一点点的收获就是 小编创作 的最大 动力 💖 💖 💖

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试干货】静态类型的特点及其在Java中的应用

【面试干货】静态类型的特点及其在Java中的应用 1、静态类型的特点1.1 静态属性1.2 静态方法1.3 静态类 2、静态类型在Java中的应用 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在面向对象编程中&#xff0c;静态类型 是一种重要的概念&…

C++之迭代器分类与List容器的使用

目录 迭代器的分类 List容器 ​编辑 总结 在Vector容器中我们学习了迭代器&#xff0c;知道了迭代器的作用和使用方法&#xff0c;本期我们将进一步学习迭代器的概念以及list容器的使用。 迭代器的分类 以算法库中的两个算法为例&#xff1a; sort算法是用来排序的&#…

kafka-高可用设计详解(集群架构、备份机制、消费者组、重平衡)

文章目录 kafka高可用设计集群架构Kafka集群选举ISR与OSRLEO和HWKafka分区Leader选举Leader Replica选举策略Leader Replica选举过程 副本机制(Replication&#xff09;消费者组和再均衡消费者组再均衡(重平衡) 更多相关内容可查看 kafka高可用设计 Apache Kafka 的高可用设计…

【Flink】Flink SQL

一、Flink 架构 Flink 架构 | Apache Flink 二、设置TaskManager、Slot和Parallelism 在Apache Flink中&#xff0c;设置TaskManager、Slot和Parallelism是配置Flink集群性能和资源利用的关键步骤。以下是关于如何设置这些参数的详细指南&#xff1a; 1. TaskManager 设置 …

SAME70硬件擦除flash方法(ATSAME70Q21B-ANT

1.PB12高电平&#xff0c;当PB12置低电平时&#xff0c;将擦除所有数据&#xff1b; 2.ATSAME70Q21B-ANT芯片通过Microchip Studio 7.0仿真器烧录的…elf和hex等文件&#xff0c;读取之后&#xff0c;再烧写&#xff0c;还是可以使用&#xff0c;故需要锁定芯片代码&#xff…

Python27 神经网络中的重要概念和可视化实现

1. 神经网络背后的直观知识 神经网络的工作方式非常相似&#xff1a;它接受多个输入&#xff0c;经过多个隐藏层中的多个神经元进行处理&#xff0c;并通过输出层返回结果&#xff0c;这个过程在技术上称为“前向传播”。 接下来&#xff0c;将神经网络的输出与实际输出进行比…

STM32_hal库学习(2)-按键(中断/非中断)控制LED

在这篇文章我将使用两种方法实现按键控制&#xff0c;分别使用非中断控制和中断控制LED 非中断按键控制LED&#xff1a; 对于非中断实现按键控制led&#xff0c;我将直接从上一个工程led闪烁进行修改 STM32F103—Hal库的学习&#xff08;1&#xff09;LED灯闪烁-CSDN博客 非…

<sa8650>QCX ISP Tuning 使用详解 — Tuning前置条件

<sa8650>QCX ISP Tuning 使用详解 — Tuning前置条件 一 如何安装 Qualcomm Chromatix™ 摄像头校准工具二 如何使用 Qualcomm Chromatix™ tuning工具创建tuning项目2.1 创建工程前提依赖2.2 创建工程2.3 添加场景2.4 编辑区域触发器三 如何创建Tuning 树一 如何安装 Qualco…

TypeScript(笔记版)

简介&#xff1a; nvm安装必须先把自己的node卸了&#xff0c;再去安装nvm TS就是js的超集 对js进行了扩展 浏览器不支持ts&#xff0c;要转换为js才可以。 ts是用来编程人员爽的 js的写法拿到ts也可以&#xff0c;ts代码量更大&#xff0c;但ts代码更加清晰 可以在playg…

C++精解【8】

文章目录 运算,- 加减法* / 乘除法逐元 乘法逐元 除法逐元综合运算矩阵乘法与加减法 转置、共轭、伴随矩阵点乘法,叉积 运算 ,- 加减法 逐元加减法 #include <iostream> #include "e:/eigen/Eigen/Dense" using namespace std;int main() {Eigen::Matrix2d …

并发编程工具集——Lock和Condition(上)(十二)

简述&#xff1a;Java SDK 并发包通过 Lock 和 Condition 两个接口来实现管程&#xff0c;其中 Lock 用于解决互斥问题&#xff0c;Condition 用于解决同步问题。 再造管程的理由和期望 理由&#xff1a;synchronized 没有办法解决“破坏不可抢占条件方案”。 原因是synchroniz…

可燃气体报警器计量校准:重要性与实践指南

在燃气机锅炉房、酒店厨房以及天然气管路等关键场所&#xff0c;可燃气体检测报警器的准确性和可靠性直接关系到人们的生命安全和财产安全。因此&#xff0c;对可燃气体报警器进行定期的计量校准至关重要。 在这篇文章中&#xff0c;佰德将从校准的必要性、方法与步骤、实际案…

【知识学习】阐述Unity3D中动画渲染的概念及使用方法示例

Unity3D中的卡通渲染&#xff08;Cartoon Rendering&#xff09;是一种渲染技术&#xff0c;它模仿传统手绘动画或漫画的视觉效果。这种渲染风格通常具有鲜明的颜色、清晰的轮廓线和简化的光影效果&#xff0c;常用于制作动画、游戏和其他视觉媒体。 卡通渲染的基本概念 轮廓…

Ansible-playbook的逻辑控制 ②

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 在《Ansible-playbook的逻辑控制 ①》中&#xff0c;梳理了逻辑控制when的使用场景&#xff0c;本文则继续梳理学习loop与block块…

python调用nodeJs执行js代码

文章目录 安装环境二、python程序调用js代码示例 安装环境 需要安装nodejs、python python库安装 pip install PyExecJS2 二、python程序调用js代码 示例 js代码&#xff1a; function sum(a,b){return ab; }python代码 import execjsjs_codeopen(dejmo.js).read() js_…

springcloud第4季 分布式事务seata作用服务搭建1

一 seata作用 1.1 seata简介 1.seata是一款解决分布式事务的解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 1.2 seata的术语 一个中心&#xff1a;全局事务id&#xff0c;xid&#xff0c;在调用服务链路的上下文中进行传播。TC(Transa…

风机过滤机组介绍

一、定义 FFU英文全称为&#xff08;Fan Filter Unit&#xff09;&#xff0c;中文专业用语为风机过滤机组。FFU广泛应用于洁净室、洁净工作台、洁净生产线、组装式洁净室和局部百级等应用场合。 二、FFU的组成 FFU主要由四部分组成&#xff1a; 1.箱体 其材质常用镀锌铝合…

SpringBoot脚手架MySpringBootAPI(PgSQL+Druid+MyBatisPlus+Lombok)

MySpringBootAPI SpringBoot脚手架&#xff0c;基于SpringBootDruidPgSQLMyBatisPlusFastJSONLombok&#xff0c;其他的请自行添加和配置。 Author powered by Moshow郑锴(大狼狗) , https://zhengkai.blog.csdn.net 如何运行 1.首先确保你是JDK17&#xff0c;推荐微软的MSJDK…

[数据集][目标检测]游泳者溺水检测数据集VOC+YOLO格式8275张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8275 标注数量(xml文件个数)&#xff1a;8275 标注数量(txt文件个数)&#xff1a;8275 标注…

5分钟,从购买域名到HTTPS访问

5分钟&#xff0c;从购买域名到HTTPS访问 架构师手把手教技术 大家好&#xff0c;最近很多小伙伴咨询关于在 安装nginx 和 部署SSL证书 方面的技术&#xff0c;因此我录制了这个视频&#xff0c;希望可以帮助大家更快速地掌握这些关键技能。 首先&#xff0c;让我们从购买域名…