MySQL之JDBC

 💕"我像离家的孤儿,回到了母亲的怀抱,恢复了青春。"💕

作者:Mylvzi 

 文章主要内容:MySQL之JDBC 

  一.什么是JDBC?

  JDBC编程就是通过Java 代码来操纵数据库   

  数据库编程, 需要数据库服务器提供一些API供程序员使用  ,不同的sql服务器有不同的API,那我们mysql,oracle,sqlserver都有自己的API,那这些API需要我们都去学习么?不需要,因为Java凭借其市场份额,和数据库厂商制定了一套数据库编程规范,即所有的数据库服务器的API都能通过这套API的规范来实现

  具体是怎么实现的呢?数据库的厂商设计出了他们专属的"驱动器",在我们些项目的时候,可以把使用到的数据库服务器的驱动器安装到对应的包下,就可以将数据库的API转化为规范的API

  所谓的驱动器其实是一个驱动程序,它本质上是一个软件,是由厂商提供的,作用类似于"转接头",将自己原生的API转接为JDBC对应的API

二.安装驱动程序

  如果想在项目中使用MySQL就需要安装MySQL的驱动程序,并将其放到对应的包之下

下面以mysql为例

首先要先去安装驱动包,可以去中央仓库进行下载(方便)

Maven Repository: mysql » mysql-connector-java » 5.1.48 (mvnrepository.com)

注意:下载的驱动器的版本要和你的MySQL服务器相对应,我的MySQL服务器是5,所以下载的驱动器也是5版本

1.先在src下创建一个"lib"的包(引入第三方包常用名称)

2.在lib包之下复制刚才下载的驱动器

三.开始编码!!!

  以上都是准备工作,接下来开始进行编码

  总体来说分为5步

1.准备数据源

  进行数据库编程需要先进行数据准备,数据准备是通过DataSource这个接口实现的,数据源的准备分为四步

  • 实例化实现DataSource接口的对象
  • 建立URL
  • 设置用户名
  • 设置密码

1.实例化对象 

代码

DataSource dataSource = new MysqlDataSource();

源码: 

2.建立URL 

代码

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

解析 

  这么长的字符串大家不用记忆、下次使用的时候直接复制粘贴即可,这里也叫给大家一个记忆的例子,整个字符串的逻辑还是很简单的

3.设置用户民 和密码

代码

        ((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("123456");

root是MySQL默认的自带的用户,密码是登录MySQL的密码

完整代码:

        // 1.准备数据源  实例化对象 建立URL  设置用户名和密码DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("123456");

以上只是准备工作  还并没有和mysql进行通信  接下来进行通信 

2.和数据库建立连接

代码

        // 2.和数据库服务器建立连接  连接好了之后才能进行后序的  "请求--响应" 操作Connection connection = dataSource.getConnection();// 此处会报错  需要抛出异常 直接使用throws进行抛出

注意处理异常

此处要注意选择正确的Connection接口

3.构造sql

  构造sql就是将sql命令使用字符串的形式存储到一个字符串变量中,再进行预处理

// 3.构造sql  sql语句最后不需要再去添加;  命令行的时候添加;String sql = "insert into student values(3,'张三')";PreparedStatement statement = connection.prepareStatement(sql);

  为什么我们要进行sql语句预处理呢?其实也有办法直接让服务器去执行,但是服务器会对传入的字符串进行解析,校验,且传入的字符串可能出现语法错误

进行预处理相当于提前进行检查,会对传入字符串进行解析,校验,看有没有错误的地方,并将字符串解析为结构化数据,这样服务器就不需要再去解析,校验,增加了效率 

4.发送给服务器,执行sql

  通过预处理过后的语句statement向数据库传递数据

代码

// 4. 将sql发送给服务器 执行sqlint n = statement.executeUpdate();System.out.println(n);

最常用的两种方法

 代码

 // 将id为3的人的名字设置为王五String sql2 = "update student set name = '王五' where id = 1";PreparedStatement statement2 = connection.prepareStatement(sql2);

5.释放资源

程序通过代码和数据库建立通信,是需要消耗软件/硬件资源的,,当你不再使用数据库时,要把利用的资源返还(好借好还么)

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

四.补充:

1."?"占位符

在插入语句里面我们把内容写死了,哪能不能让用户自己输入要插入的内容呢?答案是可以的

可以使用JDBC中的占位符 ?

 

2.详细解释为什么不能传递字符串类型的sql语句

  在jdbc编程中不能传递字符串类型的SQL语句主要出于安全和性能两方面进行考虑 

安全上:传递字符串类型的SQL语句引发SQL注入,SQL注入是一种常见的SQL中的漏洞。用户可能传递恶意的代码(尤其是字符串拼接容易发生)来使数据库执行未经授权的操作,从而给数据库服务器带来危险

性能上:使用预编译语句能够提高性能。预编译是指将SQL语句进行预编译处理,并将其存储到数据库服务器之中,下次使用时只需传递参数即可,提高了执行的效率。通过预编译,可以减少数据库对SQL的检查和解析,提高了效率

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

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

相关文章

原来10张图就可以搞懂分布式链路追踪系统原理

分布式系统为什么需要链路追踪? 随着互联网业务快速扩展,软件架构也日益变得复杂,为了适应海量用户高并发请求,系统中越来越多的组件开始走向分布式化,如单体架构拆分为微服务、服务内缓存变为分布式缓存、服务组件通…

经典策略梯度算法

经典策略梯度算法 DDPG算法 DDPG 算法被提出的初衷其实是 DQN 算法的一个连续动作空间版本扩展。深度确定性策略梯度算法( deep deterministic policy gradient,DDPG),是一种确定性的策略梯度算法。 由于DQN算法中动作是通过贪…

STM32CubeIDE(CUBE-MX)----快速移植FreeRTOS实战

文章目录 前言一、Freertos可视化配置二、生成代码三、实验现象总结 前言 FreeRTOS(Real-Time Operating System)是一个开源的实时操作系统内核,专注于嵌入式系统。它提供了一套用于管理任务、调度器、内存管理等的实时操作系统功能&#xf…

spring RedisTemplate RedisLockRegistry opsForXxx 基本使用总结以及介绍

一、基本介绍 RedisTemplate 为 spring 对 redis 操作的高度封装,基本已经满足所有使用场景。 若存在其他拓展使用我们可以自行封装工具类对基本操作进行组装。 RedisLockRegistry 对 redis 锁的一些封装 二、不同环境下依赖以及基本配置 2.1 spring-boot 下依赖…

windows启动后直接进入指定程序并且不显示欢迎界面和windows桌面

windows启动后直接进入指定程序并且不显示欢迎界面和windows桌面 前言开机进入指定程序方法问题 浅尝GINA和Credential Providers关闭欢迎屏幕 前言 由于系统需求需要做到电脑开机后显示完windows加载页面就直接进入自己系统的界面,并且不显示登录欢迎页面&#xf…

java操作windows系统功能案例(二)

1、打印指定文件 可以使用Java提供的Runtime类和Process类来打印指定文件。以下是一个示例代码: import java.io.File; import java.io.IOException;public class PrintFile {public static void main(String[] args) {if (args.length ! 1) {System.out.println(…

supermap-iserver激活教程(linux)

本篇只介绍linux临时许可激活教程,windows的原理一摸一样不做赘述。 1.下载许可中心(web版) SuperMap技术资源中心|为您提供全面的在线技术服务 2.解压 supermap-bslicense-server-3.0.24-linux-x64.tar.gz tar -zxvf supermap-bslicense…

微信小程序 - 开发版、体验版、正式版共享本地缓存

问题描述 最近突然发现一个大问题啊,小程序切换版本环境的时候发现数据被污染了,瞬间就怀疑不同环境版本的小程序本地缓存是否共享的?! 果然是! 解决方案 我们可能马上想到解决方案就是:给每一个环境版本…

Python字符串大小写转换的函数及用法

Python字符串由内建的str类代表,那么str 类包含哪些方法呢?Python 非常方便,它甚至不需要用户查询文档,Python 是“自带文档”的。 这里需要读者简单掌握两个帮助函数: dir():列出指定类或模块包含的全部…

万户ezOFFICE wpsservlet任意文件上传漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息…

什么是AI PC:人工智能电脑?

大家好啊,我是董董灿。 今天在一个群聊里,聊到了关于 AI PC (人工智能电脑)的话题。 之前看到过关于 AI PC 的新闻,说的是联想集团董事长兼CEO杨元庆在一次演讲中提到了 AI PC 的概念,并且绘声绘色的描绘了AI PC 的发展前景。 下…

希亦、追觅和添可洗地机哪个好?3款热门洗地机测评

洗地机因为自身的超强清洁效果,能大大的降低家务清洁工作,所以近年来以及越来越成为家庭的标配家电。 地机选起来让人眼花缭乱,对于消费者来说,如何选择一台实用性价比高的洗地机已经是一个头疼的问题,看着宣传画面很…

【前端开发】Next.js与Nest.js之间的差异2023

在快节奏的网络开发领域,JavaScript已成为构建可靠且引人入胜的在线应用程序的标准语言。然而,随着对适应性强、高效的在线服务的需求不断增加,开发人员通常不得不从广泛的库和框架中进行选择,以满足其项目的要求。Next.js和Nest.…

【C++ Primer Plus学习记录】嵌套循环和二维数组

for循环是一种处理数组的工具。下面进一步讨论如何使用嵌套for循环中来处理二维数组。 C没有提供二维数组类型,但是用户可以创建每个元素本身都是数组的数组。例如,假设要存储5个城市在4年间的最高温度,可以这样声明数组: int m…

HP1010 | 业界首款图腾柱 PFC 专用数字控制器震撼来袭!

随着节能标准和客户需求的不断提高,电源解决方案的效率和尺寸也在不断优化,设计紧凑高效的 PFC 电源是一个复杂的开发挑战。随着第三代半导体器件氮化镓和碳化硅的大范围应用,图腾柱无桥 PFC(TPPFC)应用获得极大的拓展…

Kubernetes(K8s)_15_CNI

Kubernetes(K8s)_15_CNI CNI网络模型UnderlayMAC VLANIP VLANDirect Route OverlayVXLAN CNI插件FlannelCalico CNI配置内置实现 CNI CNI(Container Network Interface): 实现容器网络连接的规范 Kubernetes将网络通信可分为: Pod内容器、Pod、Pod与Se…

SOT23-3封装的设计与应用:220V转5V芯片电路

SOT23-3封装的设计与应用:220V转5V电路 AH8100介绍了一种基于SOT23-3封装的220V转5V电路l32*4761*OOO1设计方案,该方案具有简单、高效、稳定的特点,适用于各种电子设备。 一、引言 随着科技的发展,电子设备越来越多地应用于我们…

滴滴2023.11.27P0级故障技术复盘回顾(k8s的的错?)

本文从滴滴官方恢复及技术公众号带大家从技术角度复盘这次事故 目录 1. 背景 2. 滴滴官方消息 3. 问题分析及定位 4.网传的k8s及解析 5.k8s引发的思考:举一反三,怎么避免再次出现 6.近段时间其他平台崩溃回顾 1. 背景 11 月 27 晚约 10 点&#xf…

TCP解帧解码、并发送有效数据到FPGA

TCP解帧解码、并发送有效数据到FPGA 工程的功能:使用TCP协议接收到网络调试助手发来的指令,将指令进行解帧,提取出帧头、有限数据、帧尾;再将有效数据发送到FPGA端的BRAM上,实现信息传递。 参考:正点原子启…

Apache Hive3.1.3 遇到DATE_FORMAT转换2021年12月格式的问题

比如:需要将时间2021-12-28 00:00:00转换成2021-12的格式,用date_format会将2021-12转换成2022-12的问题。 解决方法: 方式一:大写的‘Y’换成‘y’ 方式二:字符串截取,substr 本博主推荐方式一&#xf…