MySQL JDBC编程

  前言👀~

上一章我们介绍了数据库的索引与事务,本章节我们介绍JDBC编程,使用java代码和数据库打交道

如果各位对文章的内容感兴趣的话,请点点小赞,关注一手不迷路,如果内容有什么问题的话,欢迎各位评论纠正 🤞🤞🤞

12b46cd836b7495695ce3560ea45749c.jpeg

个人主页:N_0050-CSDN博客

相关专栏:java SE_N_0050的博客-CSDN博客 java数据结构_N_0050的博客-CSDN博客


MySQL JDBC编程

JDBC编程:

通过 java代码 操作 mysql数据库 统一所有操作数据库的接口 可以理解为这是java连接数据库的规范


数据库编程,是需要数据库服务器提供一些API(Application Programming Interface)应用程序编程接口供程序员去使用的,然后就能数据库进行交互,可以理解为一组已经实现的类和一组(函数或方法)或库


JDBC的详细解释:如果上述这样不能理解,可以这样理解,java提供了一个标准的API(jdbc由一些类和接口组成)里面定义了与数据库交互的标准方法,然后各大数据库厂商照着这个标准(可以说是实现了这个接口)各自设计了一个驱动程序,开发人员可以通过这个驱动程序就可以操作对应的数据库了,其实开发人员在调用这个API(jdbc)的时候,是通过这个驱动程序(把java中的请求转为对数据库能理解的原生API调用),然后调用数据库原生的API去操作数据库的

驱动程序的理解:数据库厂商提供的驱动程序可以类比为适配器。假设你的电脑只有Type-C接口,但你的键盘或鼠标使用的是Type-B接口。为了在电脑上使用这些设备,你需要一个适配器,该适配器一端有Type-C接口连接电脑,另一端有Type-B接口连接你的键盘或鼠标。这样,适配器就可以让你的电脑和外设成功连接并正常工作。

耦合:可以想想事务的隔离性,事务之间的影响越小,隔离性越高,耦合也差不多这个意思就是如果我写了两段代码,修改了其中一段代码另外一段代码疯狂报错,那这个称为高耦合,反之,则称为低耦合

内聚:可以这样理解,就比如我们在写一个功能一个模块的时候,如果我们不集中写到一起,东写写西写写,代码看起来很乱,找的时候也麻烦,找还能找出跟这个模块没有什么关系的代码,这种可以称为低内聚,反之,则称为高内聚


操作步骤

1.获取数据源:

        DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("1234");//         两种写法
//        MysqlDataSource mysqlDataSource = new MysqlDataSource();
//        mysqlDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
//        mysqlDataSource.setUser("root");
//        mysqlDataSource.setPassword("1234");


为什么选择这种写法?

DataSource是JDBC中的一个接口里面提供获取连接数据库的方法,MySQLDataSource是MySQL厂商提供的一个实现了DataSource的类,不同的数据库厂商有各自实现DataSource的类

上面是进行向上转型,先在堆上创建一个MySQLDataSource对象分配内存空间,然后把它的引用赋值给dataSource这个父类引用,然后这个父类引用指向这个对象,下面是进行向下转型,把父类的类型转为子类的类型,总结一下这样做是因为不同数据库厂商提供的实现类不一样,这样实现了低耦合

路径解释

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

URL:专业点说网络上的资源位置,简单点说就是网址

127.0.0.1这是一个特殊的IP地址每台电脑都有这个环回IP,"环回IP" 环回就是自己把数据发给自己,这里的jdbc程序和mysql程序都在自己的主机上使用环回IP即可,如果在不同的主机的话,就需要对应主机的IP

3306:端口号,好比收件人电话,也可以这样理解,食堂对应的窗口


2.建立连接

        // 2.和数据库服务器建立连接 这样后续才能和数据库有 请求-响应 的交互Connection connection = dataSource.getConnection();


3.构造SQL语句与预处理SQL语句

        // 3.构造sql语句
//        String sql = "insert into class values(1,'老三')";
//        String sql = "insert into class values(" + id + ",'" + name + "')"; 不推荐可能会造成sql注入String sql = "insert into class values(?,?)"; // 使用占位符PreparedStatement preparedStatement = connection.prepareStatement(sql);preparedStatement.setInt(1, id); //这个数字表示要替换上面的第几个问号(?),替换的字段是什么 从1开始 没有0preparedStatement.setString(2, name);

Prepared Statement:这里的preparedstatement表示会对这个sql语句进行预处理,其实可以直接把这个字符串格式的sql语句传给数据库服务器进行处理,mysql数据库会对你的语句进行解析和校验,但数据库服务器是服务多个客户端,这个过程的开销和负担很大,所以我们直接在客户端对sql语句进行解析和校验,然后再发到数据库服务器


4.执行SQL语句


 首先是进行CRUD操作的代码

        // 4.执行sql 把sql语句发给服务器 返回的是一个整数 表示受影响的行数int n = preparedStatement.executeUpdate();System.out.println(n);

这个n表示受影响的行数,如图在客户端进行操作的返回结果

接着就是进行查询操作的代码

        // 4.执行sql 这里用的是查询 返回的是一个结果集(一张临时表) 在临时表上会有一个光标 初始化位置指向列ResultSet resultSet = preparedStatement.executeQuery();while (resultSet.next()) {int id = resultSet.getInt("id"); // 根据列名获取数据String name = resultSet.getString("name");System.out.println("id=" + id + ",name=" + name);}

这时候会返回的是一个结果集,也就是一张临时表,我们使用resultSet并且进行循环
 


5.释放资源,关闭连接

        // 5.释放资源,关闭连接 后获取的资源 先释放preparedStatement.close();connection.close();

这个步骤注意的地方就是后获取的资源要先进行释放

以上便是本章的内容,JDBC虽然现在不怎么用了,但现在的一些对数据库进行操作的框架都是基于jdbc的,我们还是要有一定的了解💕

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

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

相关文章

双指针算法题笔记

1、移动零 class Solution {public void moveZeroes(int[] nums) {int left0;int right0;for(right0;right<nums.length;right){if(nums[right]!0){if(nums[left]0){int tempnums[left];nums[left]nums[right];nums[right]temp;}left;}}} } 两个指针将一个数组划分三个部分&…

使用OpenPCDet训练与测试多传感器融合模型BEVFusion,OPenPCdet代码架构介绍

引言 在自动驾驶领域&#xff0c;多传感器融合技术是一种常见的方法&#xff0c;用于提高感知系统的准确性和鲁棒性。其中&#xff0c;BevFusion是一种流行的融合方法&#xff0c;可以将来自不同传感器的数据进行融合&#xff0c;生成具有丰富信息的鸟瞰图&#xff08;BEV&…

探索800G数据中心的高速布线解决方案

随着技术的快速进步&#xff0c;数据中心正以前所未有的速度迅速发展。虽然100G和400G数据中心已经普及&#xff0c;但800G数据中心正逐渐流行并展现出增长趋势。由于对高速数据传输的需求呈指数级增长&#xff0c;因此需要高效、可靠的线缆连接解决方案。本文将介绍800G数据中…

Cell-在十字花科植物中年生和多次开花多年生开花行为的互相转化-文献精读21

Reciprocal conversion between annual and polycarpic perennial flowering behavior in the Brassicaceae 在十字花科植物中年生和多次开花多年生开花行为的互相转化 亮点 喜马拉雅须弥芥 和 内华达糖芥 是两个多年生植物模型 MADS-box 基因的剂量效应决定了一年生、二年生…

[图解]企业应用架构模式2024新译本讲解11-领域模型4

1 00:00:00,160 --> 00:00:01,870 好&#xff0c;到这里的话 2 00:00:02,620 --> 00:00:05,060 文字处理器的产品对象就生成了 3 00:00:06,880 --> 00:00:09,180 同样下面就是电子表格 4 00:00:10,490 --> 00:00:11,480 电子表格也同样的 5 00:00:11,490 -->…

用python编撰一个电脑清理程序

自制一个电脑清理程序&#xff0c;有啥用呢&#xff1f;在电脑不装有清理软件的时候&#xff0c;可以解决自己电脑内存不足的情况。 1、设想需要删除指定文件夹中的临时文件和缓存文件。以下是代码。 import os import shutil def clean_folder(folder_path): for root,…

11 IP协议 - IP协议头部

什么是 IP 协议 IP&#xff08;Internet Protocol&#xff09;是一种网络通信协议&#xff0c;它是互联网的核心协议之一&#xff0c;负责在计算机网络中路由数据包&#xff0c;使数据能够在不同设备之间进行有效的传输。IP协议的主要作用包括寻址、分组、路由和转发数据包&am…

计算机网络 期末复习(谢希仁版本)第4章

路由器&#xff1a;查找转发表&#xff0c;转发分组。 IP网的意义&#xff1a;当互联网上的主机进行通信时&#xff0c;就好像在一个网络上通信一样&#xff0c;看不见互连的各具体的网络异构细节。如果在这种覆盖全球的 IP 网的上层使用 TCP 协议&#xff0c;那么就…

2024 vite 静态 scp2 自动化部署

1、导入库 npm install scp2 // 自动化部署 npm install chalk // 控制台输出的语句 npm install ora2、核心代码 创建文件夹放在主目录下的 deploy/index.js 复制粘贴以下代码&#xff1a; import client from scp2; import chalk from chalk; import ora from ora;const s…

K8s速览

k8s的核心能力 ● 服务发现与负载均衡 ● 服务恢复 ● 服务伸缩 ● 自动发布与回滚 ● 批量执行 架构 server-client两层架构&#xff0c;Master作为中央管控节点&#xff0c;会和每一个Node进行一个连接&#xff1b; 所有UI层&#xff0c;client的操作&#xff0c;只会和Mat…

详解linux设备下的/dev/null

/dev/zero是一个特殊的设备文件&#xff0c;它在Linux系统中通常被用来生成无限数量的零数据流。 这个设备文件位于/dev目录下&#xff0c;它不代表任何实际的硬件设备&#xff0c;而是一个虚拟设备。 当从/dev/zero设备中读取数据时&#xff0c;会得到无限数量的零字节&…

【机器学习】因TensorFlow所适配的numpy版本不适配,用anaconda降低numpy的版本

目录 0 TensorFlow最高支持的numpy版本 1 激活你的环境&#xff08;如果你正在使用特定的环境&#xff09; 2 查找可用的NumPy版本 3 安装特定版本的NumPy 4. 验证安装 5.&#xff08;可选&#xff09;如果你更改了base环境 0 TensorFlow最高支持的numpy版本 要使用 …

Python | Leetcode Python题解之第132题分割回文串II

题目&#xff1a; 题解&#xff1a; class Solution:def minCut(self, s: str) -> int:n len(s)g [[True] * n for _ in range(n)]for i in range(n - 1, -1, -1):for j in range(i 1, n):g[i][j] (s[i] s[j]) and g[i 1][j - 1]f [float("inf")] * nfor …

k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)HPA详细解释与案例应用

文章目录 前言HPA简介简单理解详细解释HPA 的工作原理监控系统负载模式HPA 的优势使用 HPA 的注意事项应用类型 应用环境1.metircs-server部署2.HPA演示示例&#xff08;1&#xff09;部署一个服务&#xff08;2&#xff09;创建HPA对象&#xff08;3&#xff09;执行压测 前言…

安装node

下载地址 Node.js — Run JavaScript Everywhere 按照下面的图操作即可 然后就下载完了。

【Vue】声明式导航-导航链接

文章目录 一、引入二、解决方案三、代码示例四、声明式导航-两个类名1&#xff09;router-link-active2&#xff09;router-link-exact-active 一、引入 但凡说到声明式导航&#xff0c;都需要想到router-link 需求 实现导航高亮效果 如果使用a标签进行跳转的话&#xff0c;需要…

【网络编程开发】8.TCP连接管理与UDP协议 9.IP协议与ethernet协议

8.TCP连接管理与UDP协议 三次握手 三次握手的过程在TCP/IP网络通信中起着至关重要的作用&#xff0c;它不仅确保了数据的可靠传输&#xff0c;还为两端的数据传输提供了稳定的连接初始化过程。这一过程涉及到几个关键步骤&#xff0c;每个步骤都有其特定的目的和功能。 步骤&…

算法人生(21):从“React框架”看“情绪管理”

说起React框架&#xff0c;我们知道它是一种由Facebook开发和维护的开源JavaScript库&#xff0c;主要用于构建用户界面&#xff0c;特别是单页应用程序&#xff08;SPA&#xff09;。React框架围绕组件化&#xff0c;即把用户界面拆分为可复用的独立组件&#xff0c;每个组件负…

SM481,SM432和利时DCS备件

SM481,SM432和利时DCS备件。POU名只能包含字母、数字、下划线&#xff0c;第一个字符必须是字母或者下划线&#xff0c;且遵循以下原则&#xff1a;SM481,SM432和利时DCS备件。关于重名&#xff0c;不能与变量名、变量组名、POU文件夹名、任务名、SM481,SM432和利时DCS备件。工…

NSSCTF中的popchains、level-up、 What is Web、 Interesting_http、 BabyUpload

目录 [NISACTF 2022]popchains [NISACTF 2022]level-up [HNCTF 2022 Week1]What is Web [HNCTF 2022 Week1]Interesting_http [GXYCTF 2019]BabyUpload 今日总结&#xff1a; [NISACTF 2022]popchains 审计可以构造pop链的代码 <php class Road_is_Long{public $…