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.mysql.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://xiahunao.cn/news/3281156.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

苹果发布iPhone AI,Apple Intelligence初版落地!未融入ChatGPT,仅面向付费开发者

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 苹果公司Apple Intelligence初版落地:iPhone AI引领智能化新篇章 在全球科技领域,苹果公司一直以其创新精神和前沿技术…

Potree点云可视化卡片开发指南

本文由ScriptEcho平台提供技术支持 项目地址:传送门 Potree点云可视化卡片开发指南 应用场景介绍 Potree点云可视化卡片是一款基于Potree库开发的Vue组件,它允许用户在Web应用程序中轻松嵌入和交互式可视化大规模点云数据。该卡片特别适用于需要在We…

Redis 内存淘汰策略

Redis 作为一个内存数据库,必须在内存使用达到配置的上限时采取策略来处理新数据的写入需求。Redis 提供了多种内存淘汰策略(Eviction Policies),以决定在内存达到上限时应该移除哪些数据。

LLM的训练与推断

LLM的训练与推断 目前比较流行的大模型一般都是自回归模型。在推理时,它类似于RNN,每次计算下一个token的概率。也就是说,如果除去最开始的输入情况下,最终推理长度为n的话,就需要计算n次。但是训练却是并行化的。 在…

在国产芯片上实现YOLOv5/v8图像AI识别-【2.2】RK3588上C++开发环境准备及测试更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案,专栏中实现了YOLOv5/v8在国产化芯片上的使用部署,并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频:https://www.bilibili.com/video/BV1or421T74f 板子…

Idea包含UI内容的插件开发

Idea包含UI内容的插件开发 前言插件效果项目结构配置功能的实现找一个股票接口完成最终的页面配置Plugin.xml源码地址 前言 在这一篇文章中将会做一个包含UI内容的能看股票的插件。 插件效果 首先是在设置中配置股票的编号,如sh000001,sh600519。 接着在侧边栏中…

为何2024年这4款ai智能写作工具被赞为YYDS?

在数字化的大潮中,人工智能已经深入到我们生活的各个角落,当然也包括写作领域。随着ai智能写作工具的兴起,它们不仅显著提升了写作效率,还为创作打开了全新的可能性。今天,我们就来看看四款特别受欢迎的AI写作工具&…

干货分享 | 基于VB6.0 实现 CAN信号收发 Demo

本文主要讲的是,基于TSMaster 实现 TOSUN 系列 CAN/CANFD,LIN 设备的操作。主要给大家介绍在 TSMaster 软件里如何实现 CAN 信号收发 Demo工程。 本文关键词:CAN报文、VB6.0、libTSCAN 一、关于Demo工程 简要描述: VB6.0编程语…

Python药物副作用生物图分析算法和矩阵降维算法

🎯要点 🎯人体疾病模块网络结构位置与病理生物学关系 | 🎯药物与药物靶点相互作用 | 🎯细胞和蛋白质之间的作用分层 | 🎯疾病和症状之间的联系 | 🎯药物与副作用之间的联系 | 🎯生物学分析 &a…

年过30年程序员,到底要不要考虑搞点副业

一、前言 作为一名年过三十的程序员,我深刻体会到了职场的残酷和不确定性。在这个技术日新月异的时代,我们不仅要在专业领域深耕细作,更要敏锐地捕捉互联网的风口,以确保自己不被时代淘汰。程序员的黄金年龄似乎被限定在35岁之前…

事务性邮件api接口服务怎么选?怎么集成?

事务性邮件API接口安全性如何保障?API接口调用方法? 在现代企业的运营中,事务性邮件是确保信息及时传达和用户体验的关键环节。AokSend将探讨如何选择合适的事务性邮件API接口服务,以及如何有效地集成这些服务。 事务性邮件api接…

MongoDB下载与基本使用(mac图文详解)

目录 一、下载安装 1.1 官网下载mongoDB 1.1.1 mongoDB 1.1.2 MongoDB GUI 1.2 下载流程 二、基本使用 2.1 创建数据库和集合 2.2 插入 2.3 查询 2.4 修改 2.5 删除 三、case 3.1 销售case 3.1.1 实操 3.1.2 全部指令汇总 背景: 个人练习用 一、下…

《计算机网络》(第8版)第九章 无线网络和移动网络 复习笔记

第九章 无线网络和移动网络 一、无线局域网 WLAN 1 无线局域网的组成 无线局域网提供移动接入的功能,可分为两大类:有固定基础设施的和无固定基础设 施的。 (1)IEEE 802.11 IEEE 802.11 是无线以太网的标准,是有固定…

MySQL安装教程(保姆级)

1. 首先要了解自己的计算机 打开设置——系统——系统信息 然后就可以知道自己计算机的类型了。 2. 下载MySQL 2.1. 来到MySQL官网 点击进入 我们下拉页面,可以找到DOWNLOADS 页面默认给咱们选择最新的版本,咱们不用,咱们尽量选一个稳定的版…

Linux的防火墙

一、防火墙概述 防火墙是一种计算机硬件和软件的结合,使internet和intranet之间建立一个安全网关(Security Gateway),从而保护内网免受非法用户侵入的技术。 防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成。…

绝密!OceanBase OBCP备考模拟题讲解(2)

「源de爸讲数据库」每天更新OceanBase OBCP题库及全网独家超详细题目解析,祝您早日持证上岸! 现如今,一大批国产数据库随着国产化浪潮,已经逐步被越来越多的人认可。OceanBase便是其中一个优秀代表。 做这个日更专题,…

easy_Maze

结合题目,知道是一道迷宫题型 那么我们要做的就是 1.找到迷宫 2.确定方向(一般为wasd,但是可能会改) 3.确定起点 4.确定终点 // TAGS: dict_keys([spawn]) int __cdecl main(int argc, const char **argv, const char **envp) {__int64 v3; // raxint v5[49]; // [rsp0h]…

HCIA总结

一、情景再现:ISP网络为学校提供了DNS服务,所以,DNS服务器驻留在ISP网络内,而不再学校网络内。DHCP服务器运行在学校网络的路由器上 小明拿了一台电脑,通过网线,接入到校园网内部。其目的是为了访问谷歌网站…

【ROS 最简单教程 002/300】ROS 集成开发环境安装: Noetic

💗 有遇到安装问题可以留言呀 ~ 当时踩了挺多坑,能帮忙解决的我会尽力 ! 1. 安装操作系统环境 Linux ❄️ VM / VirtualBox Ubuntu20.04 如果已有 linux 环境 (如双系统等),可跳过步骤 1 ~ 👉 保姆级图文安装教程指路…