Java开发基础-JDBC-核心对象的使用—03

java基础之JDBC 第一章:走进JDBC 什么是JDBC呢?JDBC就是通过java语句来对数据库进行的一个访问和修改 1.1使用JDBC 的好处 1)只需要会调用JDBC接口当中的方法就可以了,不用关注类是如何实现的。 2)使用同样的代码,进行少量的修改,就可以访问其他数据库。 1.2 使用JDBC开发使用到的包 1.3 JDBC的核心API 1.4 导入驱动jar包 如下图所示,就是显示的是连接成功之后的图片 下图是对应的代码 import java.sql.Connection; import java.s 阅读详情
演示JDBC应用编程中的安全问题:

PreparedStatement和Statement对SQL参数注入攻击的处理:

SQL注入攻击简要介绍:

SQL注入攻击是黑客对数据库进行攻击的常用手段之一,SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

Statement没有对此做任何校验,需要用户自己额外编写大量检验SQL参数注入的代码,而且还不一定考虑全面,

PreparedStatement采用预编译语句的方式很好的解决了SQL参数注入攻击的问题。


下面通过简单的实例展示:查询用户信息

1.在数据库中创建一张表users_jdbc

-- Create table
create table USERS_JDBC
(
  username      VARCHAR2(20),
  password      VARCHAR2(20),
  register_time VARCHAR2(10)
)

插入一些数据:

admin manager 2018/02/03

jack         1234          2018/06/05

2.编写测试程序

public class TestDay02 {
	
	/**
	 * 使用PreparedStatement解决注入攻击
	 */
	@Test
	public void test6(){
		//假设用户输入的数据如下
		String username = "admin";
		String password = "a'or'b'='b";
		
		Connection conn = null;
		try {
		  conn = DBUtil.getConnection();
		  String sql  = "select * from users_jdbc "
				  		+"where username=? "
				  		+"and password=? ";
		  //System.out.println(sql);
		  PreparedStatement ps = conn.prepareStatement(sql);
		  ps.setString(1, username);
		  ps.setString(2, password);

		  ResultSet rs = ps.executeQuery();
		  while(rs.next()){
			  System.out.println("登录成功!");
		  }
		  
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("查询用户失败!",e);
		}finally{
			DBUtil.close(conn);
		}
		
	}
	
	/**
	 * Statement:sql注入攻击
	 */
	@Test
	public void test61() {
		//假设用户输入的数据如下
		String username = "admin";
		String password = "a' or 'b'='b";
		
		Connection con = null;
		try {
			con = DBUtil.getConnection();
			 String sql  = "select * from users_jdbc "
				  		 +"where username='"+username+"'"
				  		 +" and password='"+password+"'";
			System.out.println(sql);
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(sql);
			while(rs.next()) {
				System.out.println("登录成功.");
				System.out.println(rs.getString(2));
			}
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException(
				"查询用户失败", e);
		} finally {
			DBUtil.close(con);
		}
	}

}
分别使用Junit方式运行如上程序【test61,test6】可以看到

PreparedStatement很好的解决了sql注入问题,而Statement则存在sql注入问题,随意访问了数据库数据。


控制台test61,test6输出截图如下:

国央企创新负责人如何提升企业创新与技术合作的精准度?.docx 国央企创新负责人如何提升企业创新与技术合作的精准度? 立即下载

相关推荐

Qt思岚激光雷达

Qt关于思岚激光雷达研究示例,本示例采用qt界面开发,可以串口也可以tcp进行设备连接。接收数据进行相关的数据进行绘图, 这种雷达可以用于大屏触摸场景,会场互动触摸场景开发。 #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QTimer> #include <QWidget> #include "lidarmgr.h" namespace Ui { class MainWidget; } class MainWidget.

cqltbe131421的博客 1598

2024年最全Java开发基础-JDBC-核心对象的使用—03(1),写给Java软件工程师的3条建议

由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档还有更多面试复习笔记分享如下本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取插入一些数据:2.编写测试程序/**使用PreparedStatement解决注入攻击*/@Test//假设用户输入的数据如下try {

2401_84584740的博客 572

java实现mavlink协议解析与封包上传数据,实现mavlink数据交互,附带代码、详解

本篇文章介绍了使用java来进行mavlink协议解析,封包与解包的过程,并附带源码供大家使用。MAVLink(Micro Air Vehicle Link,微型空中飞行器链路通讯协议)是无人飞行器与地面站(Ground Control Station ,GCS)或云端服务器之间通讯,以及无人飞行器之间通讯最常用的协议。它已经在PX4、APM、PIXHAWK和Parrot AR.Drone飞控平台上进行了大量测试。

qq_30279827的博客 1450

【Java】JDBC基础使用教程

JDBC一、JDBC简介 一、JDBC简介 JDBC 通过Java代码来操作数据库 实际工作中大部分的数据库操作,都是通过代码来完成的.格子编程语言都可以操作数据库,主要是数据库提供了各种版本的API(一组函数 / 一组类),调用这些API就可以操作数据库 ...

意愿三七 3万+

C# emgu.cv图像识别 从大图中寻找小图,判断存在图的相似度

这是2个问题,我采用emgu.cv来解决这个识别问题,这里需要在nuget中引用emgu。最近写了一个在一张图片中,截取一部分,通过机器判断截取图片是这张图片的。第一、通过小图去找判断是否存在大图中,第二、小图存在大图的什么位置。

一个专注于技术研究创新的程序员 2467

STM32N6:MCU+NPU架构如何重塑边缘AI部署新范式

STM32N6作为业界首款MCU+NPU架构的通用微控制器,通过集成600 GOPS算力的NPU与800MHz Cortex-M55内核,实现了边缘AI部署的革命性突破。该方案在工业视觉和智能家居等场景中,以超低功耗和成本提供实时AI处理能力,性能较传统MCU提升超100倍,重塑了边缘智能设备的设计范式。

g8f9d0s1a2的博客 1292

Java基础-JDBC

学习目标:了解java中jdbc的概念与使用方法

来自想要赚大钱的小周同学 3267

u3d逆向学习之纯C内存读写与ImGui绘制(Android)

方法:需要在/proc/pid/maps文件查找模块名,一行行遍历所有内存,第一个参数为模块名,第二个参数为索引index(因为该模块会有多个,index为正序遍历第index个该模块),若找到了则使用。32位游戏的指针大小采用4字节,而64位游戏的指针大小采用8字节(这里需要注意),数据地址以16进制存储,使用unsigned long类型 ,该函数只有一个参数,数据地址,返回该地址的指针跳转地址。文件,比较其中的内容是否与传入的包名相同,如果相同,则返回该进程的PID。

zhoujunjie2004的博客 1689

JDBC上课总结(1)(JDBC核心API、JDBC基本编码步骤)(JDBC底层由来、使用)

本篇博客是关于JDBC上课的一个总结。其中主要内容是关于JDBC的底层由来、发展与使用,JDBC的核心API、JDBC的基本编码步骤...

岁岁岁平安的博客 997

八、ILI2511 初版调试

8.1 TP成品过程 TP厂在制造TP过程中会经过FPC、FOG和Model三个阶段。 FPC: 将IC做在FPC上面; FOG: 将FPC与sensor 绑定; Model:FOG阶段后,贴上CG(cover glass)。 经过上面三个阶段后,将会拿到没有烧录固件的TP模组。这个时候触摸TP,并不能上报触摸数据,需要对TP模组烧录固件(执行程序)后才会有TP有触摸数据。 8.2 源码编译固件与工具生成固件 我们可以通过以下两种方式获得固件 1)由奕力原厂直接通过源码,进行编...

qq_34343637的博客 3692

Java 新纪元 — JDK 25 + Spring Boot 4 全栈实战(十九):微服务实战——Boot 4 + Spring Cloud 2026.x,构建高并发电商分布式系统

Component@Slf4j@Autowired// 白名单路径@Override// 白名单放行// 提取Token// 传递用户信息到下游服务.mutate().build();@Override// 最高优先级if (bearer!@Component技术点Boot 3 时代Boot 4 时代提升线程模型平台线程池(200线程上限)虚拟线程(百万级并发)50x+服务通信。

qq_17204557的博客 186

【Java】JDBC-基础篇

3.创建Java项目,在项目下创建Iib文件夹,将下载的驱动jar包复制到文件夹里。mysql版本要和jar包匹配,比如5.0的数据库要用5.0的驱动版本;推荐使用8.0.26之后的版本,因为8.0.25之前是要下载时区的。对象,可以向数据库发送SQL语句并获取执行结果。java中使用第三方jar或拓展都放在。进行实现,更安全、效率更高!5.JDBC核心6步;一般实际开发不使用。

yimeng_Sama的博客 2363

大数据分析案例-基于随机森林算法构建二手房价格预测模型

通过应用随机森林算法,我们希望建立一个能够有效预测二手房价格的模型。这个模型可以基于各种因素,如区域位置、房屋属性、市场供需等,来预测未来某一时间点的房价。通过提高预测准确性,我们可以更好地把握房地产市场动态,为决策提供更有价值的参考。揭示影响二手房价格的因素及其影响方式:通过分析随机森林算法生成的模型,我们可以进一步了解哪些因素对二手房价格有重要影响,以及这些因素如何影响房价。这有助于我们深入理解房地产市场的运行规律,为制定更为有效的市场策略提供依据。

m0_64336780的博客 1万+

Java开发基础-JDBC-核心对象的使用—02(1)

在JDBC应用中,具有一定开发经验的开发者,就应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement。Statement的语句中,即使是相同一操作,因为数据内容不一样,每执行一次都要对传入的语句编译一次.效率低。select * from emp where ename= '随意' and sal = ' ';只要将参数直接传入编译过的语句执行代码中(相当于一个函数效果)就会得到执行,sql语句与参数混合拼接,可读性差,拼接sql语句易出错。

2401_84003690的博客 571

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JDBC原理,JDBC基础编程

JDBCWHAT IS JDBC Java Database Connectivity:Java访问数据库的解决方案。 JDBC是Java应用程序访问数据库的里程碑式解决方案。Java研发者希望用相同的方式访问不同的数据库,以实现与具体数据库无关的Java操作界面。 JDBC定义了一套标准接口,即访问数据库的通用API,不同的数据库厂商根据各自数据库的特点去实现这些接口。 JDBC接

SwmIsMe的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java开发基础-JDBC-核心对象的使用—06

作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2019 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动?就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Java程序员的技术功底。最近我整理了一份复习用的面试题及面试高频的考点题及技术点梳理成一份“Java经典面试问题(含答案解析).pdf和一份网上搜集的“Java程序员面试笔试真题库.pdf。

2401_86358808的博客 1168

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java开发基础-JDBC-核心对象的使用—02

在JDBC应用中,具有一定开发经验的开发者,就应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement。Statement的语句中,即使是相同一操作,因为数据内容不一样,每执行一次都要对传入的语句编译一次.效率低。select * from emp where ename= '随意' and sal = ' ';只要将参数直接传入编译过的语句执行代码中(相当于一个函数效果)就会得到执行,sql语句与参数混合拼接,可读性差,拼接sql语句易出错。

2501_90392025的博客 430

JDBC在Java项目开发中的核心作用与实战应用

JDBC(Java Database Connectivity)是Java语言中用来规范客户端程序如何访问数据库的应用程序接口(API),它为Java开发者提供了与各种关系型数据库进行交互的统一方式。JDBC的核心价值提供与数据库无关的标准接口简化Java程序与数据库的交互过程支持多种关系型数据库(MySQL, Oracle, SQL Server等)成为Java EE企业级应用数据持久层的基石。

jnimiijabc的博客 1038

Java Web开发基础——数据库基础与JDBC

关系型数据库(RDBMS)是基于关系模型的数据管理系统,它使用表格(或称为关系)来存储数据,表格中的数据以行和列的形式组织,每一行表示一条记录,每一列表示一个属性。:PreparedStatement是Statement的子接口,用于执行预编译的SQL语句,它提供了更高的效率和更好的防止SQL注入的安全性。:JDBC驱动程序用于在Java应用程序和数据库之间建立连接,不同的数据库有不同的JDBC驱动(如MySQL、Oracle等)。:ResultSet用于保存查询的结果,返回的是一个数据库结果集。

好看资源网的博客 944

JAVA基础程序——JDBC

一、JDBC 1.1、概述 JDBC就是使用JAVA语言操作关系型数据库的一套API 1.2、JDBC本质 官方定义的一套操作所有关系型数据库的规则,即接口 各个数据库厂商去实现这套接口,提供数据库驱动jar包 通过使用这套接口来编程,真正执行的代码时驱动jar包中的实现类 1.3、JDBC的好处 各个数据库厂商使用同样的接口,JAVA代码不需要针对不同的数据库分别开发 可随时替换底层数据库,访问数据库的JAVA代码基本不变 二、JDBC快速入门 JAVA操作数据库的流程: 编写JAVA

weixin_45890771的博客 1340

Java开发基础-JDBC-核心对象的使用—02(2)

三个工作日收到了offer,头条面试体验还是很棒的,这次的头条面试好像每面技术都问了我算法,然后就是中间件、MySQL、Redis、Kafka、网络等等。第一个是算法关于算法,我觉得最好的是刷题,作死的刷的,多做多练习,加上自己的理解,还是比较容易拿下的。而且,我貌似是将《算法刷题LeetCode中文版》、《算法的乐趣》大概都过了一遍,尤其是这本。

2401_84003733的博客 955

【JDBC】JDBC核心基础

  Java DataBase Connectivity,Java数据库连接, 即用Java语言操作数据库 JDBC的本质:其实是Sun公司定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商(Oracle,MySql)去实现这套接口,提供数据库驱动(jar包)。我们使用这套接口(JDBC)去编程,真正执行的是数据库驱动(jar包)中的实现类———通过多态,解决了数据库种类过多的问题 ...

丧心病狂Loli控的博客 194

day03 jdbc

JDBC是Java连接数据库的标准接口,通过统一API屏蔽不同数据库差异。其核心包括DriverManager管理驱动、Connection建立连接、Statement执行SQL及ResultSet处理结果集。学习重点应掌握基础操作(增删改查)、事务管理(commit/rollback)、防SQL注入(PreparedStatement)及批处理优化。此外需理解连接池原理(如HikariCP)和JDBC底层机制(驱动加载、TCP连接等)。实际开发中,JDBC是ORM框架基础,掌握其原理和性能优化对求职大有裨

weixin_62730133的博客 1227

【Java 初级】详解 Mysql 的连接 JDBC

JDBC(Java Database Connectivity)是Java语言中用于与关系型数据库进行交互的API(Application Programming Interface)。它提供了一组类和接口,使Java应用程序能够连接、查询和操作各种数据库。

激流丶的博客 1679

JDBC基础

JDBC: Java Database Connectivity,意为Java数据库连接JDBC是java提供的一组独立于任何数据库管理系统的API。

2402_86577162的博客 707
上一篇: Java开发基础-JDBC-核心对象的使用—02
下一篇: Java开发基础-JDBC-核心概念—01
Coder_Boy_
博客等级 码龄10年 2804粉丝 819原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder_Boy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值