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,一经查实,立即删除!

相关文章

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…

第二十四节:带你梳理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; …

云计算【第一阶段(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分区…

Msql----表的约束

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

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

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

【Flink metric(3)】chunjun是如何实现脏数据管理的

文章目录 一. 基础逻辑二. DirtyManager1. 初始化2. 收集脏数据并check3. 关闭资源 三. DirtyDataCollector1. 初始化2. 收集脏数据并check3. run&#xff1a;消费脏数据4. 释放资源 四. LogDirtyDataCollector 一. 基础逻辑 脏数据管理模块的基本逻辑是&#xff1a; 当数据消…

猫咪也怕油腻?选对猫粮是关键!福派斯鲜肉猫粮守护猫咪健康

亲爱的猫友们&#xff0c;我们都知道&#xff0c;猫咪的饮食健康是每一个铲屎官都非常关心的问题。最近&#xff0c;有些猫友向我反映&#xff0c;他们给猫主子喂食的猫粮油脂比较大&#xff0c;不禁让人担心这对猫咪是否真的好。 1️⃣ 首先&#xff0c;让我们来聊聊油脂在猫粮…

Spring Boot + Vue 全栈开发,都需要哪些前端知识?

Node.js默认安装的npm包和工具的位置&#xff1a;Node.js目录\node_modules 在这个目录下你可以看见 npm目录&#xff0c;npm本身就是被NPM包管理器管理的一个工具&#xff0c;说明 Node.js已经集成了npm工具 #在命令提示符输入 npm -v 可查看当前npm版本 npm -v 二、使用n…

代理IP超时是什么原因?

很多用户在使用代理IP进行网络访问时&#xff0c;可能会遇到代理IP超时的情况&#xff0c;也就是代理IP的延迟过高。代理IP延迟过高会影响用户的网络体验和数据获取效率。因此&#xff0c;了解代理IP延迟过高的原因很重要。以下是导致代理IP延迟过高的一些常见原因&#xff1a;…

FL Studio 21.2.3官方中文版重磅发布,手把手教你图文安装

FL Studio 21.2.3官方中文版重磅发布纯正简体中文支持&#xff0c;更快捷的音频剪辑及素材管理器&#xff0c;多样主题随心换&#xff01; 在数字音乐制作领域&#xff0c;FL Studio一直以其强大的功能和用户友好的界面而备受赞誉。随着技术的不断进步和音乐制作需求的日益增长…

Python高压电容导电体和水文椭圆微分

&#x1f3af;要点 &#x1f3af;二维热传导二阶偏微分方程 | &#x1f3af;调和函数和几何图曲率 | &#x1f3af;解潮汐波动方程 | &#x1f3af;解静止基态旋转球体流体运动函数 | &#x1f3af;水文空间插值 | &#x1f3af;流体流动模拟求解器 | &#x1f3af;随机算法解…

泰迪智能科技与成都文理学院人工智能与大数据学院开展校企合作交流

近日&#xff0c;在推动高等教育与产业深度融合的背景下&#xff0c;成都文理学院人工智能与大数据学院携手广东泰迪智能科技股份有限公司开展“专业建设交流会”。人工智能与大数据学院院长胡念青、院长助理陈坚、骨干教师刘超超、孙沛、赵杰、文运、胡斌、邹杰出席本次交流会…

vue项目中dom拖动排序功能实现

vue项目中拖动元素改变其顺序的功能实现 实现此功能&#xff0c;我利用的是SortableJs,其官网上直接介绍其为功能强大的js拖拽库&#xff0c;只需要简单的代码即可实现dom拖拽 1.下载 npm i sortablejs 2.引入 使用时&#xff0c;我们在那个页面中使用&#xff0c;就在该vue文…