MySQL---JDBC

news2024/12/26 20:55:06

一、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://www.coloradmin.cn/o/1960544.html

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

相关文章

spring:xml定义bean

spring有两种方法定义bean&#xff0c;一种是使用xml标签&#xff0c;一种是注解。在这里介绍使用xml标签定义bean。 我的文件目录如上图所示&#xff0c;在这里创建了bean.xml文件&#xff0c;bean.xml文件中定义了bean。 文件内容&#xff1a; <?xml version"1.0&…

Java线程池动态内存队列思路

背景 在我们定义线程池时候&#xff0c;需要创建一个对列用来存储未执行而排队的任务&#xff0c;这个队列长度问题一直都是需要开发人员斟酌考虑点。在阿里巴巴开发手册中有怎么一个规则如&#xff1a; 说明: Executors返回的线程池对象的弊端如下 FixedThreadPool和SingleT…

【前端面试】七、算法-递归

遍历方法总结 链式调用 数组的很多操作可以构成链式操作&#xff0c;类似这样的格式&#xff1a;…map().filter(…).sort(…).map(….)链式操作就是对象方法返回类型是自身的。比如map是属于数组的方法&#xff0c;它返回数组&#xff0c;所以构成了链式操作优势&#xff1a;…

【iOS】——持久化

在iOS开发中&#xff0c;数据持久化是非常重要的&#xff0c;因为它允许应用程序在不同会话之间保存用户数据、设置、偏好等信息。 为什么数据持久化 数据保存&#xff1a; 目的&#xff1a;将应用程序中的数据保存到非易失性存储中&#xff0c;以便在应用程序关闭或重启后仍…

眼镜清洗机哪个品牌好?性价比高的超声波眼镜清洗机

清洁眼镜、化妆刷、项链等物品其实是挺麻烦的&#xff0c;尤其是化妆刷这种经常使用的物品&#xff0c;需要用专门的清洁剂并保持一定的清洗频率。眼镜的日常清洁主要是用眼镜布擦拭镜片上的灰尘和指纹&#xff0c;但对于顽固的污渍或油脂&#xff0c;只有超声波清洗机能提供快…

六西格玛管理法

六西格玛管理法是一种旨在提高业务流程效率和减少缺陷的管理策略。它最初由摩托罗拉公司在1980年代末期提出&#xff0c;并随后被通用电气等公司广泛应用和发展。六西格玛的核心理念是通过减少过程变异性来提高产品质量和服务水平。 六西格玛的含义&#xff1a; 统计学概念&am…

一款功能全面的卸载工具,强大,免费,小巧

HiBit Uninstaller是一款功能全面的卸载工具&#xff0c;它不仅可以卸载Windows程序&#xff0c;还提供了诸如注册表清理、垃圾文件清理等多种系统优化功能。该软件以其小巧、强大、免费的特点受到用户的欢迎&#xff0c;尤其适合处理顽固软件和流氓程序的卸载问题。 主要功能…

WPF的MVVM架构:如何通过数据绑定简化UI逻辑

WPF的MVVM架构&#xff1a;如何通过数据绑定简化UI逻辑 目录 MVVM模式概述数据绑定在MVVM中的作用实现MVVM模式的步骤MVVM模式中的常见问题与解决方案实践示例总结 MVVM模式概述 MVVM&#xff08;Model-View-ViewModel&#xff09;是一种设计模式&#xff0c;用于WPF应用程序…

机器学习(五) -- 无监督学习(2) --降维1

系列文章目录及链接 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 无监督学习&#xff08;1&#xff09; --聚类2 下篇&#xff1a;机器学习&#xff08;五&#xff09; -- 无监督学习&#xff08;2&#xff09; --降维2 前言 tips&#xff1a;标题前有“***”的内…

热门超声波清洗机有哪些?小型超声波清洗机推荐

在繁忙的工作和生活中&#xff0c;许多人常常会因为种种原因忽略日常的小事&#xff0c;比如忘记清洁手表、眼镜、首饰等常用物品。实际上&#xff0c;这些物品表面不仅积累了灰尘和污垢&#xff0c;特别是跟眼部朝夕相处的眼镜&#xff0c;还可能滋生各种致病细菌&#xff0c;…

Vue3-如何自己写一个“返回顶部”功能

功能描述&#xff1a; 在屏幕的右下角固定一个“返回顶部”按钮&#xff0c;只有当用户滚动屏幕一定程度后出现&#xff0c;否则隐藏。 点击按钮&#xff0c;网页平滑的滚动到页面顶部。 环境&#xff1a;Vue3,js&#xff0c;antd 具体思路&#xff1a; 1、给窗口挂载滚动事…

Python 学习中的 API,如何调用API ?

1.1 API的定义 API&#xff0c;全称是Application Programming Interface&#xff08;应用程序编程接口&#xff09;。它是一组定义好的协议和工具&#xff0c;用于在软件应用程序之间进行通信。API可以简化软件开发&#xff0c;使不同的应用程序能够相互协作。它是软件开发中…

阿里云服务器 Ubuntu18.04 安装 mysql8.0并允许外部连接

参考教程&#xff1a; 官网教程 参考教程一 首先彻底删除mysql5.7 dpkg --list|grep mysql #查看 sudo apt-get remove mysql-common #卸载 sudo apt-get autoremove --purge mysql-server-5.7 #版本自己修改 dpkg -l|grep ^rc|awk {print$2}|sudo xargs dpkg -P #清除残留数…

LeetCode Hot100 将有序数组转换为二叉搜索树

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,-3,null,9] 也将被视为正确…

电商老司机教您批量下载1688高清主图、详情图、sku及视频信息

图片在电商中至关重要&#xff0c;高质量的商品图片能吸引顾客注意&#xff0c;提升购买欲望。它们是展示商品特性和细节的主要方式&#xff0c;有助于增强消费者信任&#xff0c;减少退换货率。好的图片还能优化搜索排名&#xff0c;提高转化率。简而言之&#xff0c;图片是电…

Luma AI的战略转向:从Nerf到视频生成领域的背后故事

引言 今天我们将深入探讨Luma AI近期引发关注的视频生成模型——Dream Machine。Luma AI从最初的3D重建和生成业务逐步转向视频生成领域的背后&#xff0c;隐藏着什么样的战略考量和技术演进&#xff1f;让我们通过Luma AI首席科学家宋佳铭的最新访谈&#xff0c;揭开这场技术…

【每日一题 | 数据结构】时间复杂度计算

题目 解题方法 对于二重循环求时间复杂度&#xff1a; 写出外层i的变化值写出内层循环语句执行次数&#xff08;看j&#xff09;对次数求和找到频度和n的关系 笔记 视频跳转&#xff1a; 【每日一题 | 数据结构】时间复杂度计算

手写操作系统:二级引导程序

项目简介 在上篇博客&#xff0c;我们完成了主引导扇区的编写&#xff0c;在主引导扇区我们初始化了寄存器&#xff0c;加载了二级引导程序到内存地址 0x8000处&#xff0c;并跳转至0x8000处执行&#xff0c;在本文我们将继续编写二级引导程序。 在二级引导程序将完成以下任务…

Unity UGUI 实战学习笔记(6)

仅作学习&#xff0c;不做任何商业用途 不是源码&#xff0c;不是源码! 是我通过"照虎画猫"写的&#xff0c;可能有些小修改 不提供素材&#xff0c;所以应该不算是盗版资源&#xff0c;侵权删 因为注册和登录面板的逻辑与数据存储方面已经相对完善 服务器面板逻辑…

为什么现在的家具很多带缓冲器?

在当今的家具市场中&#xff0c;我们不难发现&#xff0c;很多的家具配备了缓冲器。这一现象的背后&#xff0c;有着多方面的原因。首先&#xff0c;随着人们生活水平的提高&#xff0c;对于生活品质的追求也日益增强。缓冲器能够有效地减少家具关闭时产生的噪音&#xff0c;为…