MySQL---JDBC

一、JDBC是什么?

JDBC(Java Database Connectivity):是Java访问数据库的解决方案。

JDBC定义了一套标准的接口,即访问数据库的通用API,不同数据库的厂商根据各自数据库的特点实现这些接口。

JDBC希望用相同的方式访问不同的数据库,让具体的数据库操作与数据库厂商实现无关,从而不同数据库之间轻易的进行切换。

二、JDBC相关类和接口

一个类:DriverManager 驱动管理类

三个接口:Connection 连接接口

                Statement 语句对象接口

                ResultSet 结果集接口

三、下载数据库驱动

ps:我上传不上去,需要私聊我(笔芯)

四、JDBC工作原理(数据库连接JDBC的步骤)

(1)加载数据库驱动

Class.forName("com.mysql.cj.jdbc.Driver");

(2)创建数据库连接

Connection conn = DriverManager.getConnection("mysql:jdbc://localhost:3306/myschool?severTimezone=GMT&useSSL=false","root","123456");
# myscool 数据库库名
# root 数据库账号
#123456 数据库密码

(3)创建Statement对象,执行SQL语句

Statement statm = conn.createStatement();

(4)返回ResultSet结果

#增删改
int rs = statm.executeUpdate(sql)
#查
ResultSet rs = statm.executeQuery(sql);

(5)释放资源(先开后关)

rs.close();
statm.close();
conn.close();

五、JDBC对数据库的增删改查

4.1 增加数据(Insert)

public class InsertTest {public static void main(String[] args) throws ClassNotFoundException, SQLException {//1.加载数据库驱动Class.forName("com.mysql.cj.jdbc.Driver");//2.创建数据库连接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/库名?serverTimezone=GMT&useSSL=false&characterEncoding=gbk","账号","密码");//3.创建Statement对象,处理sql语句Statement statm = conn.createStatement();String sql = "insert into class(classid,classname) values(5,'软件2101班')";int rs = statm.executeUpdate(sql);//测试if(rs>0) {System.out.println("插入成功!");}else {System.out.println("插入失败!");}//4.关闭资源statm.close();conn.close();}}

4.2 删除数据(Delete)

public class DeleteTest {public static void main(String[] args) throws ClassNotFoundException, SQLException {//1.加载数据库驱动Class.forName("com.mysql.cj.jdbc.Driver");//2.创建数据库连接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/库名?serverTimezone=GMT&useSSL=false&characterEncoding=gbk","账号","密码");//3.创建Statement对象,处理sql语句Statement statm = conn.createStatement();String sql = "delete from class where classid=4";int rs = statm.executeUpdate(sql);//测试if(rs>0) {System.out.println("删除成功!");}else {System.out.println("删除失败!");}//4.关闭资源statm.close();conn.close();}
}

4.3 修改数据(Update)

public class UpdateTest {public static void main(String[] args) throws ClassNotFoundException, SQLException {Scanner input = new Scanner(System.in);//1.加载数据库驱动Class.forName("com.mysql.cj.jdbc.Driver");//2.创建数据库连接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/库名?serverTimezone=GMT&useSSL=false&characterEncoding=gbk","账号","密码");//3.创建Statement对象,执行sql语句Statement statm = conn.createStatement();System.out.println("请输入班级名称:");String classname = input.nextLine();System.out.println("请输入班级编号:");String classid = input.nextLine();String sql = "Update class set classname ='"+classname+"'"+"where classid="+classid;int ret = statm.executeUpdate(sql);//判断if(ret>0) {System.out.println("修改成功!");}else {System.out.println("修改失败!");}//4.释放资源statm.close();conn.close();}
}

4.5 查找数据(Select)

public class SelectTest {public static void main(String[] args) throws ClassNotFoundException, SQLException {//1.加载数据库驱动Class.forName("com.mysql.cj.jdbc.Driver");//2.创建数据库连接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/库名?serverTimezone=GMT&useSSL=false&characterEncoding=gbk","账号","密码");//3.创建Statement对象,执行sql语句Statement statm = conn.createStatement();String sql = "select * from class";ResultSet ret = statm.executeQuery(sql);//判断while(ret.next()) {int classid = ret.getInt("classid");String classname = ret.getString("classname");System.out.println(classid+classname);}//4.释放资源ret.close();statm.close();conn.close();}
}

 代码优化:

将冗余代码封装进一个工具类,每次使用直接调用即可。

public class DAOUtil {//加载驱动static {try {Class.forName("com.mysql.cj.jdbc.Driver");		} catch (ClassNotFoundException e) {e.printStackTrace();}}//获取连接对象public static Connection getConnection() {Connection conn = null;//2.获取连接try {String url = "jdbc:mysql://localhost:3306/库名?serverTimezone=GMT&useSSL=false&characterEncoding=gbk";String user="账号";String pwd = "密码";conn = DriverManager.getConnection(url,user,pwd);} catch (SQLException e) {e.printStackTrace();}return conn;}//释放资源public static void closeResourse(Connection conn,PreparedStatement prestatm,ResultSet rs) {if(rs !=null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if(prestatm !=null) {try {prestatm.close();} catch (SQLException e) {e.printStackTrace();}}if(conn !=null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}		}		
}

六、防止sql注入

1.什么是sql注入?

SQL注入(SQL Injection)是一种网络安全漏洞,允许攻击者在应用程序没有正确验证或清理用户输入数据的情况下,导致攻击者能够操纵数据库查询、获取、修改和删除敏感信息。

2.什么方法可以解决sql注入?

(1)使用预编译语句(prepared Statements):如使用?占位符,并通过编程语言的库绑定参数。

(2)使用存储过程(Stored Procedures):将SQL代码预先存储在数据库中,并通过参数调用

(3)验证和清理用户输入:确保用户输入不包含恶意字符或SQL关键字

(4)使用ORM工具:许多ORM工具会自动处理SQL构建,减少注入风险。

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

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

相关文章

cocos creator绘制网格背景(基于矢量绘图)

在2D游戏开发中,设计2D地图的背景实现通常有以下几种方式: 静态背景图: 最简单的方式是使用静态背景图,即将整个背景作为一个静态图像加载到游戏中。这种方式适用于简单的游戏或者背景不需要变化的场景。 平铺背景图:…

java~反射

反射 使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码) 原理图 加载完类后,在堆中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对…

湖南(市场调研公司)源点咨询 如何进行精准化用户画像细分研究

湖南源点咨询认为,用户画像,是根据用户的基本属性、用户偏好、生活习惯、用户行为等信息而抽象出来的标签化用户模型。我们在这里为大家分析为什么要建立用户画像,进行用户细分调研。 一、什么是用户画像 简单来讲,就是想要在通…

Java每日一练,技术成长不间断

目录 题目1.下列关于继承的哪项叙述是正确的?2.Java的跨平台特性是指它的源代码可以在多个平台运行。()3.以下 _____ 不是 Object 类的方法4.以下代码:5.下面哪个流类不属于面向字符的流()总结 题目 选自牛…

KubeSphere 部署向量数据库 Milvus 实战指南

作者:运维有术星主 Milvus 是一个为通用人工智能(GenAI)应用而构建的开源向量数据库。它以卓越的性能和灵活性,提供了一个强大的平台,用于存储、搜索和管理大规模的向量数据。Milvus 能够执行高速搜索,并以…

一文剖析高可用向量数据库的本质

面对因电力故障、网络问题或人为操作失误等导致的服务中断,数据库系统高可用能够保证系统在这些情况下仍然不间断地提供服务。如果数据库系统不具备高可用性,那么系统就需要承担停机和数据丢失等重大风险,而这些风险极有可能造成用户流失&…

python中的print函数总结

文章目录 打印变量打印数学计算多行文本复制n次字符串 x*n,n*x不换行输出多个数据换行符制表位转义原字符字符串切片格式化字符串千位分隔符(只适用于整数和浮点数)浮点数小数部分的精度字符串类型,.表示最大的显示长度整数类型浮点数类型 打…

(新)VMware虚拟机安装Linux教程(超详细)

创作不易,禁止转载抄袭!!!违者必究!!! 创作不易,禁止转载抄袭!!!违者必究!!! 创作不易,禁止转载抄…

C语言:扫雷游戏实现

一、扫雷游戏的分析和设计 扫雷游戏想必大家都玩过吧,初级的玩法是在一个9*9的棋盘上找到没有雷的格子,而今天我们就要做的就是9*9扫雷游戏的实现。 1、游戏功能和规则 使用控制台实现经典的扫雷游戏游戏可以通过菜单实现继续玩或者退出游戏扫雷的棋盘…

Flink SQL 的工作机制

前言 Flink SQL 引擎的工作流总结如图所示。 从图中可以看出,一段查询 SQL / 使用TableAPI 编写的程序(以下简称 TableAPI 代码)从输入到编译为可执行的 JobGraph 主要经历如下几个阶段: 将 SQL文本 / TableAPI 代码转化为逻辑执…

面试经典算法150题系列-数组/字符串操作之多数元素

序言:今天是第五题啦,前面四题的解法还清楚吗?可以到面试算法题系列150题专栏 进行复习呀。 温故而知新,可以为师矣!加油,未来的技术大牛们。 多数元素 给定一个大小为 n 的数组 nums ,返回其…

C#实现深度优先搜索(Depth-First Search,DFS)算法

深度优先搜索(DFS)是一种图搜索算法,它尽可能深入一个分支,然后回溯并探索其他分支。以下是使用C#实现DFS的代码示例: using System; using System.Collections.Generic;class Graph {private int V; // 顶点的数量pr…

大模型算法备案流程最详细说明【流程+附件】

文章目录 一、语料安全评估 二、黑盒测试 三、模型安全措施评估 四、性能评估 五、性能评估 六、安全性评估 七、可解释性评估 八、法律和合规性评估 九、应急管理措施 十、材料准备 十一、【线下流程】大模型备案线下详细步骤说明 十二、【线上流程】算法备案填报…

ChatGLM3-6B模型部署微调实战

准备 视频教程 https://www.bilibili.com/video/BV1ce411J7nZ?p14&vd_source165c419c549bc8d0c2d71be2d7b93ccc 视频对应的资料 https://pan.baidu.com/wap/init?surlAjPi7naUMcI3OGG9lDpnpQ&pwdvai2#/home/%2FB%E7%AB%99%E5%85%AC%E5%BC%80%E8%AF%BE%E3%80%90%E8…

HTTP协议详解(一)

协议 为了使数据在网络上从源头到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议,它最终体现为在网络上传输的数据包的格式。 一、HTTP 协议介绍 HTTP(Hyper Text Transfer Protocol): 全…

Monorepo简介

Monorepo 第一章:与Monorepo的邂逅第二章:Multirepo的困境第三章:Monorepo的魔力 - 不可思议的解决问题能力第四章:Monorepo的挑战与应对策略第五章:总结第六章:参考 第一章:与Monorepo的邂逅 …

【AI大模型】分布式训练:深入探索与实践优化

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 一、分布式训练的核心原理二、技术细节与实现框架1. 数据并行与模型并行2. 主流框架 三、面临的挑战与优化策略1. 通信开销2. 数据一致性3. 负载均衡 4.使用示例示例一:TensorFlow中的数据…

VAE、GAN与Transformer核心公式解析

VAE、GAN与Transformer核心公式解析 VAE、GAN与Transformer:三大深度学习模型的异同解析 【表格】VAE、GAN与Transformer的对比分析 序号对比维度VAE(变分自编码器)GAN(生成对抗网络)Transformer(变换器&…

设计师的素材管理神器,eagle、千鹿大测评

前言 专业的设计师都会精心维护自己的个人素材库,常常需要耗费大量时间用于浏览采集、分类标注、预览筛选、分享协作,还要管理字体、图片、音视频等各类设计素材 如果你作为设计师的话,今天,就为大家带来两款热门的素材管理工具…

SpringMVC中的常用注解

目录 SpringMVC的定义 SpringMVC的常用注解 获取Cookie和Session SpringMVC的定义 Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它…