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

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

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

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

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

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

前言

在这里插入图片描述

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

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

而本篇文章是另一个小小的开端,试问小伙伴们有没有用 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.mzph.cn/news/860007.shtml

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

相关文章

NLP中两种不同的中文分词形式,jieba和spaCy

1. jieba分词 import jiebatext在中国古代文化中&#xff0c;书法和绘画是艺术的重要表现形式。古人常说&#xff0c;‘文字如其人’&#xff0c;通过墨迹可以窥见作者的性情和气质。而画家则以笔墨搏击&#xff0c;表现出山川河流、花鸟虫鱼的灵动。这些艺术形式不仅仅是技艺…

LangChain入门学习笔记(六)—— Model I/O之Output Parsers

当大模型产生输出返回后&#xff0c;它的内容更像是一段平铺的文字没有结构。在传给下游节点处理时可能并不能符合输入要求&#xff0c;LangChain提供了一套机制使得模型返回的内容可以按照开发者定义的那样结构化。 在官网文档中可以看到LangChain提供了丰富的输出解析器&…

二叉树-左叶子之和(easy)

目录 一、问题描述 二、解题思路 三、代码实现 四、刷题链接 一、问题描述 二、解题思路 此题属于树遍历的简单题&#xff0c;用递归深度遍历的方式&#xff0c;当遇到左叶子结点(在递归函数中加上一个判断当前结点是左结点还是右结点的标记位)&#xff0c;此时加上当前结点…

数字图像处理实验报告小论文(Matlab语言)

1.课题分析 在当今信息化社会&#xff0c;图像处理技术已成为众多领域不可或缺的一部分&#xff0c;从医学影像分析到安防监控&#xff0c;再到日常生活中的图片美化&#xff0c;图像处理技术都发挥着至关重要的作用。本次课题主要聚焦于图像灰度处理、图像小波变换和图像分割这…

Python基础系列教程:从零开始学习Python

Python有很多功能强大的机器学习和大数据分析包&#xff0c;适合对大数据和人工智能感兴趣的同学学习。要想了解一门语言&#xff0c;首先需要了解它的语法。本文将介绍Python的一些基础语法&#xff0c;包括数据类型、变量类型、条件控制、循环结构等内容。废话少说&#xff0…

C++核心编程---面向对象的三大特性---继承

C核心编程—面向对象的三大特性—继承 文章目录 C核心编程---面向对象的三大特性---继承1. 基本继承语法2. 继承方式3. 多重继承4. 构造和析构顺序4.1 构造函数的调用顺序&#xff1a;4.2 析构函数的调用顺序&#xff1a; 5. 虚继承6. 访问基类成员7. 同名成员和同名静态成员的…

第二十四节:带你梳理Vue2 : Vue具名插槽/作用域插槽/v-slot指令

1. 具名插槽 1.1 没有使用具名插槽的问题 有的时候我们在使用子组件时,在子组件模板上不同的位置插入不同的内容, 只有一个插槽显然没法满足我们的需求,看示例: 需求如下: 子组件是一篇文章的结构父组件在调用子组件是给文章插入标题,正文,时间信息 示例代码如下: <di…

【强化学习的数学原理】课程笔记--1(基本概念,贝尔曼公式)

目录 基本概念State, Action, State transitionPolicy, Reward, Trajectory, Discount ReturnEpisodeMarkov decision process 贝尔曼公式推导确定形式的贝尔曼公式推导一般形式的贝尔曼公式State ValueAction Value 一些例子贝尔曼公式的 Matric-vector form贝尔曼公式的解析解…

Elasticsearch 索引与文档操作实践指南

上节我们部署了elasticsearch8.4.1和kibana8.4.1以及ik分词器&#xff0c;本节我们来学习下elasticsearch的相关索引&#xff0c;文档操作。 首先我们kinana的主界面找到开发者工具在里面我们来编写相关操作。 标题查看集群情况 GET /_cluster/health详细解释&#xff1a; …

心理学|发展心理学——发展心理学单科作业(中科院)

一、单选题(第1-100小题,每题0.5分,共计50分。) 1、认为心理发展是主体与客体相互作用的结果,持该观点的学者是( ) 分值0.5分 A、皮亚杰 B、普莱尔 C、吴伟士 D、施太伦 A 2、艾里克森认为童年期(7岁~12岁)的主要发展任务是( ) 分值0.5分 A、获得勤…

(四十四)Vue Router的命名路由和路由组件传参

文章目录 命名路由组件传参query参数方式参数传递参数接收 params参数方式参数传递参数接收 props配置方式布尔值形式对象模式函数模式 上一篇&#xff1a;&#xff08;四十三&#xff09;Vue Router之嵌套路由 命名路由 命名路由是为路由配置项提供一个名称&#xff0c;以便…

云计算【第一阶段(18)】磁盘管理与文件系统 分区格式挂载(一)

目录 一、磁盘基础 二、磁盘结构 2.1、机械硬盘 2.2、固态硬盘 2.3、扩展移动硬盘 2.4、机械磁盘的一些计算&#xff08;了解&#xff09; 2.5、磁盘接口类型 二、Linux 中使用的文件系统类型 2.1、磁盘分区的表示 2.1.1、主引导记录(MBR) 2.1.2、Linux中将硬盘、分…

【十二】图解 Spring 核心数据结构:BeanDefinition

图解 Spring 核心数据结构&#xff1a;BeanDefinition 简介 使用spring框架的技术人员都知道spring两个大核心技术IOC和AOP&#xff0c;随着投入更多的时间去学习spring生态&#xff0c;越发觉得spring的发展不可思议&#xff0c;一直都是引领着Java EE的技术变革&#xff0c;这…

麒麟信安系统关闭core文件操作

在使用麒麟信安系统时&#xff0c;如果应用程序运行过程中崩溃了&#xff0c;此时并不会导致内核崩溃&#xff0c;只会在tmp目录下产生崩溃数据&#xff0c;如下图 不过tmp目录下的分区容量有限&#xff0c;当崩溃的应用core文件过大时将会占用tmp空间&#xff0c;导致tmpfs分区…

上海计算机学会2022年6月月赛C++丙组T4连续的零

题目描述 给定一个 01 序列 b1​b2​…bn​&#xff0c;01 的意思就是这个数列里只有 0 与 1。 请问最少需要将多少个 1 改成 0&#xff0c;序列里会出现至少 k 个连续的 0。 输入格式 第一行&#xff1a;两个整数 n 与 k。第二行&#xff1a;n 个字符表示 b1​b2​…bn​&…

Msql----表的约束

提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、表的约束 表的约束&#xff1a;表中一定要有约束&#xff0c;通过约束让插入表中的数据是符合预期的。它的本质是通过技术手段&#xff0c;让程序员插入正确的数据&#xff0c;约束的最终目标是保证…

IP地址的主要功能

IP地址&#xff0c;作为互联网协议&#xff08;Internet Protocol&#xff09;的核心组成部分&#xff0c;是网络设备在互联网中的唯一标识。它不仅仅是一个简单的数字串&#xff0c;而是承载着网络通信的重要功能。以下是IP地址的主要功能及其在网络中的重要性的详细分析。 唯…

NAPI篇【4】——NAPI应用点亮一个LED

OpenHarmony的NAPI功能为开发者提供了JS与C/C不同语言模块之间的相互访问&#xff0c;交互的能力&#xff0c;使得开发者使用C或者C语言实现应用的关键功能。如操作开发板中某个GPIO节点的状态&#xff08;OpenHarmony并没有提供直接操作GPIO口状态的API&#xff09;&#xff0…

深入解读Netty中的NIO:原理、架构与实现详解

深入解读Netty中的NIO&#xff1a;原理、架构与实现详解 Netty是一个基于Java的异步事件驱动网络应用框架&#xff0c;广泛用于构建高性能、高可扩展性的网络服务器和客户端&#xff08;学习netty请参考&#xff1a;深入浅出Netty&#xff1a;高性能网络应用框架的原理与实践&…

vue2加入keep-alive后的生命周期情况

目录 1.加入keep-alive会执行哪些生命周期&#xff1f;1.activated2.deactivated 2.keep-alive是什么 &#xff1a; 缓存当前组件3.如果当前组件加入了keep-alive第一次进入这个组件会执行5个生命周期4.第二次或者第N次进去组件会执行哪些生命周期&#xff1f;1.如果当前组件加…