MySQL进阶(再论JDBC)——JDBC编程思想的分析 JDBC的规范架构 JDBC相关的类分析

在这里插入图片描述

前言

SQL(Structured Query Language)是一种用于管理关系型数据库的标准化语言,它用于定义、操作和管理数据库中的数据。SQL是一种通用的语言,可以用于多种关系型数据库管理系统(RDBMS),如MySQL、Oracle、SQL Server等。

MySQL是一种开源的关系型数据库管理系统,它使用SQL作为其查询语言。MySQL是最流行的开源数据库之一,它具有高性能、可靠性和可扩展性。MySQL支持多用户、多线程和多表操作,可以在各种操作系统上运行。

MySQL最为最流行的开源数据库,其重要性不言而喻,也是大多数程序员接触的第一款数据库,深入认识和理解MySQL也比较重要。

在这里插入图片描述

本篇博客介绍JDBC,Java Database Connectivity,简称jdbc,翻译过来就是 Java 数据库连接,阐述了JDBC的编程思想,介绍了各个API接口的分工,并且对于JDBC相关的类进行详细的分析。

其他相关的JDBC博客文章如下:

Java连接SQL数据库 & 单例封装数据库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C6IBnBmB-1683902514958)(D:\javalearn\思维导图笔记\mdPictures\image-20230512204643739.png)]

本系列文章合集如下:

【合集】MySQL的入门进阶强化——从 普通人 到 超级赛亚人 的 华丽转身

目录

  • 引出
  • JDBC它是什么
  • JDBC编程思想
    • JDBC流程
      • 编写流程
    • JDBC规范架构
    • API分工
  • JDBC类的分析
    • DriverMananger类
      • 1. 作用
      • 2. 静态方法
      • 3. 连接字符串:
      • 4. 连接数据库代码
    • Connection接口
      • 1. 介绍
      • 2. 方法
    • PreparedStatement接口
      • 1. Statement和PreparedStatement
      • 2. PreparedStatement接口中方法
    • ResultSet接口
      • 1. 作用
      • 2. 如何获取数据
      • 3. 方法
      • 4. MySQL中数据类型与Java数据类型对应关系
      • 5. 查询代码
  • 总结

引出


1.介绍JDBC,Java Database Connectivity,简称jdbc,翻译过来就是 Java 数据库连接;
2.阐述了JDBC的编程思想,介绍了各个API接口的分工;
3.对于JDBC相关的类进行详细的分析;

JDBC它是什么

1、JDBC全称Java Database Connectivity,简称jdbc,翻译过来就是 Java 数据库连接

2、JDBC是一组API,通过这些API可以很轻松的操作各种数据库。

在这里插入图片描述JDBC:Java DataBase Connectivity (Java 数据库连接),使用Java语言来操作关系型数据库的一组API(应用程序接口),JDBC本质上是一组接口,实现类由数据库厂商提供。

JDBC编程思想

高度封装,操作数据库只需要和API (接口和类,几个对象)打交道,具体实现交给JDBC来完成即可。

  • 跨数据库

在这里插入图片描述
如果没有JDBC,我们在会根据每种数据库,都要单独编写一组代码。

在这里插入图片描述
我们只需要针对JDBC接口进行编程即可,好处:

  • 降低我们的代码与具体数据库之间耦合度。
  • 同一套代码可以访问不同的数据库
  • 也是多态的好处体现

实现类称为数据库驱动包,需要额外从网上下载。

JDBC流程

左边是客户端Java代码,右边是服务器端MySQL

在这里插入图片描述

编写流程

  1. 注册驱动程序 (从JDK5可以省略,Class.forName("com.mysql.jdbc.Driver"))
  2. 获取连接对象
  3. 通过连接对象获取语句对象
  4. 发送SQL语句给数据库服务器,由服务器去执行SQL语句。
  5. 获取数据库返回的结果集,处理结果集。
  6. 关闭连接,释放资源

JDBC规范架构

在这里插入图片描述

驱动就是由不同厂商提供的jar包。

在这里插入图片描述

API分工

在这里插入图片描述

在这里插入图片描述

JDBC类的分析

DriverMananger类

1. 作用

  1. 加载并且注册数据库驱动
  2. 获取连接对象

2. 静态方法

public static Connection getConnection(String 连接字符串, String 用户名, String 密码) throws SQLException

3. 连接字符串:

不同的数据库,连接字符串的格式不同。MySQL的连接字符串:

在这里插入图片描述

MySQL的连接URL编写方式

jdbc:mysql://主机名称:mysql服务端口号/数据库名称?参数=值&参数=值

jdbc:mysql://localhost:3306/persondb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8

4. 连接数据库代码

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class AppDemo1 {public static void main(String[] args) throws SQLException {//获取连接对象,Connection是一个接口,返回的是它的实现类,这是一种多态。实现类由MySQL驱动提供。Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/woniu", "root", "root");//输出连接对象System.out.println("连接对象:" + connection);//关闭连接对象connection.close();}
}

Connection接口

1. 介绍

Connection代表连接对象,是一个接口,由数据库厂商提供实现类。

2. 方法

创建一个 PreparedStatement对象,用于将参数化的SQL语句发送到数据库。

PreparedStatement prepareStatement(String sql) 参数是SQL语句,占带有占位符,占位符使用问号?表示。

PreparedStatement接口的实现类由数据库驱动提供

注:所有的参数使用占位符,为什么使用占位符:

  1. 可以避免SQL注入的风险
  2. 占位符是可变的,查询语句更加灵活。

PreparedStatement接口

1. Statement和PreparedStatement

获取访问数据库的语句对象:

  1. Statement:父接口,有SQL注入的安全问题,在后期很少使用。
  2. PreparedStatement:子接口,预编译的语句对象,执行效率更高,没有安全问题,使用这个。
interface PreparedStatement extends Statement

2. PreparedStatement接口中方法

PreparedStatement接口中的方法描述
int executeUpdate()执行增删改的操作,返回值:影响的行数
ResultSet executeQuery()执行查询的操作,返回值:返回结果集
void set数据类型(int 占位符位置,类型类型 真实的值)替换SQL语句中占位符为真实的值: 参数1:在SQL语句中占位符出现的位置,从1开始 参数2:替换这个占位符的值

ResultSet接口

1. 作用

封装服务器端返回的数据,我们只需要从ResultSet中取出数据即可。

2. 如何获取数据

在这里插入图片描述

3. 方法

方法名作用
boolean next()将光标从当前位置向下移动一行。如果下一行有数据,返回true,如果到最后返回false
数据类型 get数据类型(int 列号)通过列号获取数据
数据类型 get数据类型(String 列名)通过列名获取数据

4. MySQL中数据类型与Java数据类型对应关系

Java数据类型数据库数据类型
int、longINT、BIGINT
StringCHAR、VARCHAR
java.sql.Date、java.sql.Time、java.sql.TimestampDATE、TIME、DATETIME
float、doubleFLOAT、DOUBLE、DECIMAL

5. 查询代码

import java.sql.*;
public class AppDemo1 {public static void main(String[] args) throws SQLException {//获取连接对象,Connection是一个接口,返回的是它的实现类,这是一种多态。实现类由MySQL驱动提供。Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/woniu", "root", "root");//输出连接对象System.out.println("连接对象:" + connection);//创建语句对象:查询所有教学部的老师PreparedStatement prepareStatement = connection.prepareStatement("select * from teacher where depart=?");//替换占位符prepareStatement.setString(1, "教学部");//执行查询操作,返回结果集ResultSet resultSet = prepareStatement.executeQuery();//遍历结果集while (resultSet.next()) {//建议基本类型都使用包装类Integer id = resultSet.getInt("id");String name = resultSet.getString("name");Date birthday = resultSet.getDate("birthday");String depart = resultSet.getString("depart");Double salary = resultSet.getDouble("salary");System.out.println("编号:" + id + "\t姓名:" + name + "\t生日:" + birthday + "\t部门:" + depart + "\t工资:" + salary);}//关闭连接对象:先开的后关resultSet.close();prepareStatement.close();connection.close();}
}

总结


1.介绍JDBC,Java Database Connectivity,简称jdbc,翻译过来就是 Java 数据库连接;
2.阐述了JDBC的编程思想,介绍了各个API接口的分工;
3.对于JDBC相关的类进行详细的分析;

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

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

相关文章

数据结构-----红黑树简介

目录 前言 1.什么是红黑树? 2.为什么需要红黑树?(与AVL树对比) 3.红黑树的特性 前言 在此之前我们学习过了二叉排序树和平衡二叉树(AVL树),这两种树都是属于搜索树的一种,那么今天…

web 性能优化详解(Lighthouse工具、优化方式、强缓存和协商缓存、代码优化、算法优化)

1.性能优化包含的方面 优化性能概念宽泛,可以从信号、系统、计算机原理、操作系统、网络通信、DNS解析、负载均衡、页面渲染。只要结合一个实际例子讲述清楚即可。 2.什么是性能? Web 性能是客观的衡量标准,是用户对加载时间和运行时的直观…

2.3 初探Hadoop世界

文章目录 零、学习目标一、导入新课二、新课讲解(一)Hadoop的前世今生1、Google处理大数据三大技术2、Hadoop如何诞生3、Hadoop主要发展历程 (二)Hadoop的优势1、扩容能力强2、成本低3、高效率4、可靠性5、高容错性 (三…

在C++和Python的项目中使用ROS

如果搜索如何使用ROS,搜索结果肯定是先建立工作空间,在创建功能包等等步骤,但其实不需要这么麻烦。 在Python中使用ROS,只需要在Pycharm的Project Structure中的Add Content Root加入ros的packages就可以了,如下图 在…

二叉树题目:从前序与中序遍历序列构造二叉树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:从前序与中序遍历序列构造二叉树 出处:105. 从前序与中序遍历序列构造二叉树 难度 5 级 题目描述 要…

<三>Qt斗地主游戏开发:主界面初始化显示

1. 主界面效果 效果关键点: 1)拖动标题栏可实现主界面拖动 2)logo图标名称及主界面背景 3)最小化及关闭 2.思路分析 1)背景图片及logo图标的设定比较简单,通过stylesheet即可实现。通过QWidget的拖动即可实…

算法leetcode|84. 柱状图中最大的矩形(rust重拳出击)

文章目录 84. 柱状图中最大的矩形:样例 1:样例 2:提示: 分析:题解:rust:go:c:python:java: 84. 柱状图中最大的矩形: 给定 n 个非负整…

【git的使用方法】——上传文件到gitlab仓库

先进入到你克隆下来的仓库的目录里面 比如:我的仓库名字为zhuox 然后将需要上传推送的文件拷贝到你的克隆仓库下 这里的话我需要拷贝的项目是t3 输入命令ls,就可以查看该文件目录下的所有文件信息 然后输入git add 文件名 我这边输入的是 &#x…

处理ElementUI组件默认样式多次重复问题

问题截图: 解决办法: 在postcss.config.js文件里添加配置项: module.exports {plugins: {autoprefixer: {},cssnano: {} //添加这行代码}, } 处理结果: github issues: https://github.com/ElemeFE/element/is…

【LeetCode刷题(数组and排序)】:存在重复元素

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 示例 1: 输入:nums [1,2,3,1] 输出:true 示例 2: 输入:nums [1,2…

WorkPlus即时通讯办公软件,助力企业实现移动化办公

在移动互联网的时代背景下,企业对于高效的移动平台需求日益迫切。WorkPlus作为领先品牌,致力于为企业打造卓越的移动平台,助力企业实现协作与效率的突破。本文将探讨WorkPlus如何通过其专业的解决方案,为企业打造无限可能的移动办…

14.8 Socket 一收一发通信

通常情况下我们在编写套接字通信程序时都会实现一收一发的通信模式,当客户端发送数据到服务端后,我们希望服务端处理请求后同样返回给我们一个状态值,并以此判断我们的请求是否被执行成功了,另外增加收发同步有助于避免数据包粘包…

【Kotlin精简】第4章 函数

1 简介 函数是用来运行代码的载体,可以在一个函数里编写很多行代码,当运行这个函数时,函数中的所有代码会全部运行。 Kotlin中的函数同Java完全面向对象的规则不太一样,在Kotlin的世界里,函数也是准C位的,…

微服务架构 | 超时管理

INDEX LSA 级别与全年停机时间速查表LSA 级别实战TP 性能超时时间设计原则 LSA 级别与全年停机时间速查表 计算公式:60 * 60 * 24 * 365 * (1-LSA) 31,536,000‬ * (1-LSA) 系统级别LSA级别全年停机时间099.999%5分钟099.99%52分钟199.9%8.8小时299%3.65 天 LSA…

基于 ACK Fluid 的混合云优化数据访问(五):自动化跨区域中心数据分发

作者:车漾 前文回顾: 本系列将介绍如何基于 ACK Fluid 支持和优化混合云的数据访问场景,相关文章请参考: -基于 ACK Fluid 的混合云优化数据访问(一):场景与架构 -基于 ACK Fluid 的混合云优…

科研上新 | 第2期:可驱动3D肖像生成;阅读文本密集图像的大模型;文本控制音色;基于大模型的推荐智能体

编者按:欢迎阅读“科研上新”栏目!“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里,你可以快速浏览研究院的亮点资讯,保持对前沿领域的敏锐嗅觉,同时也能找到先进实用的开源工具。 本期内容速览 …

基于yolov2深度学习网络的猫脸检测识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 load yolov2.mat% 加载训练好的目标检测器 img_size [224,224]; imgPath test/; % 图…

至强服务器BIOS/UEFI驱动开发笔记

至强服务器BIOS/UEFI驱动开发笔记 驱动开发基础Hello UEFI Driver 项目选择项目位置初始化驱动代码文件结构驱动程序入口和基本功能导入AMI工程AMI平台Hello UEFI Driver 编译问题测试结果打印设备列表继续开发`HelloWorldSupported`函数依赖配置使用脚本编译编译测试此DXE驱动…

SQL如何导入数据以及第一次上机作业

如何导入excel数据 首先得学会导入数据 使用excel格式不需要改成其它格式(如csv,txt),因为你改了到时候还是会报错(实践过使用Sum统计总数一直说我数据格式有问题) 首先右键TSGL数据库->任务->导入数…

C++前缀和算法应用:矩形区域不超过 K 的最大数值和

基础知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 题目 给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。 题目数据保证总会存在一个数值和不超过 k 的矩形区域。 示例 1&#x…