JDBC相关的知识点+大数据处理+防止sql注入攻击

什么是SQL注入攻击以及如何防止SQL注入攻击 一、什么是SQL注入攻击? CASE 1 : 模拟用户登陆案例 (1)准备数据 use jt_db; create table user( id int primary key auto_increment, username varchar(50), password varchar(50) ); insert into user values(null,'张三','123'); ... 阅读详情
JDBC
一、数据库驱动的概念、JDBC
数据库厂商提供的用来操作数据库用的jar包就是数据库驱动。各个厂商如果提供各自的数据库驱动的话会导致开发人员学习成本太高,所以sun公司提供了一套数据库驱动应该遵循的接口规范,这套规范就叫做JDBC,本质上是很多的接口。
由于所有的数据库驱动都遵循JDBC规范,我们在学习和使用数据库时只要学习JDBC中的接口就可以了。
二、JDBC快速入门
*在数据库中建立好表
*在程序中导入数据库驱动包
1.注册数据库驱动
DriverManager.registerDriver(new Driver());//缺点一:观察mysqlDriver源码发现此方法导致了数据库驱动被注册了两次。缺点二:整个程序域mysql数据库驱动绑定增加了耦合性
Class.forName(“com.mysql.jdbc.Driver”);
2.获取连接
DriverManager.getConnection(url, user, password);
~url的写法:
Oracle写法:jdbc:oracle:thin:@localhost:1521:sid
SqlServer—jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid
MySql—jdbc:mysql://localhost:3306/sid
~url可以接的参数
user、password
useUnicode=true&characterEncoding=UTF-8


3.获取传输器
createStatement():创建向数据库发送sql的statement对象。
prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
4.利用传输器执行sql语句获取结果集
executeQuery(String sql) :用于向数据发送查询语句。
executeUpdate(String sql):用于向数据库发送insert、update或delete语句
execute(String sql):用于向数据库发送任意sql语句


5.遍历结果集取出结构
ResultSet以表的样式在内存中保存了查询结果,其中还维护了一个游标,最开始的时候游标在第一行之前,每调用一次next()方法就试图下移一行,如果移动成功返回true;
ResultSet还提供了很多个Get方法,用来获取查询结果中的不同类型的数据
除了next方法,还有以下方法可以用来遍历结果集:
next():移动到下一行
Previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。
afterLast() :移动到resultSet的最后面。
6.释放资源
conn是一个有限的资源,用完立即要释放表
stat占用内存,所以使用完后也要释放
rs占用内存,所以使用完后也要释放
释放时后创建的先释放
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally{
rs = null;
}
}
if(stat != null){
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
} finally{
stat = null;
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally{
conn = null;
}
}

三、PreparedStatement
1.Sql注入:由于jdbc程序在执行的过程中sql语句在拼装时使用了由页面传入参数,如果用户恶意传入一些sql中的特殊关键字,会导致sql语句意义发生变化,这种攻击方式就叫做sql注入,参考用户注册登录案例。
2.PreparedStatement是Statement的孩子,不同的是,PreparedStatement使用预编译机制,在创建PreparedStatement对象时就需要将sql语句传入,传入的过程中参数要用?替代,这个过程回导致传入的sql被进行预编译,然后再调用PreparedStatement的setXXX将参数设置上去,由于sql语句已经经过了预编译,再传入特殊值也不会起作用了。
3.PreparedStatement使用了预编译机制,sql语句在执行的过程中效率比Statement要高。



四、大数据
1.mysql数据库也可以直至在数据库中保存大文本和大二进制数据,
Text
TINYTEXT(255)、TEXT(64k)、MEDIUMTEXT(16M)和LONGTEXT(4G)
Blob
TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB 
2.JDBC去操作大文本:
~插入大文本:
ps = conn.prepareStatement("insert into Demo2Text values(null,?,?)");
ps.setString(1, "钢铁是怎样练成");
File file = new File("1.txt");
ps.setCharacterStream(2, new FileReader(file), (int) file.length());
//1.Exception in thread "main" java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setCharacterStream(ILjava/io/Reader;J)V
//ps.setCharacterStream(2, new FileReader(file), file.length());第三个参数是long型的是从1.6才开始支持的,驱动里还没有开始支持。
//解决方案:ps.setCharacterStream(2, new FileReader(file), (int)file.length());
//2.Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
//文件大小过大,导致PreparedStatement中数据多大占用内存,内存溢出
//-Xms256M-Xmx256M
//3.com.mysql.jdbc.PacketTooBigException: Packet for query is too large (10886466 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
//数据库连接传输用的包不够大,传输大文本时报此错误
//在my.ini中配置max_allowed_packet指定包的大小
~查询大文本:
Reader rd = rs.getCharacterStream("content");
3.JDBC操作大二进制
~插入:
ps = conn.prepareStatement("insert into Demo3Blob values(null,?,?)");
ps.setString(1, "梦想的力量");
File file = new File("1.mp3");
ps.setBinaryStream(2, new FileInputStream(file), (int) file.length());

~查询
InputStream in = rs.getBinaryStream("content");
在JDBC中使用preparedStatement防止SQL注入 文章目录一、SQL注入二、SQL注入实例登录场景:情形1:(免账号登录)情形2:(删除数据库)三、防止SQL注入方法四、登录项目1、用户表2、项目结构3、登录实现4、登录测试 一、SQL注入 SQL注入是一种比较常见的网路攻击方式,一些恶意人员在需要用户输入的地方,恶意输入SQL语句的片段,通过SQL语句,实现无账号登录,甚至篡改数据库。 二、SQL注入实例 登录场景: 在一个登录界面,要求用户输... 阅读详情

相关推荐

JDBC如何防止SQL注入

JDBC如何有效防止SQL注入 在我们平时的开发中,作为新手写JDBC很有可能忽略了一点,那就是根本没有考虑SQL注入的问题, 那么,什么是SQL注入,以及如何防止SQL注入的问题。 1.什么是SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是

qf2019的博客 2353

JDBC技术总结(二)

上一节主要讲了JDBC的基本操作,这一节主要总结一下JDBC如何处理大文本、如何处理图片以及进行批处理。 1.JDBC处理大文本         在MySQL中,大文本是text类型,使用java操作数据库中的大文本需要两个方法setCharacterStream和getCharacterStream,一个是写入数据库的字符流,一个是从数据库中读取的字符流。setCharacterStream

3643

Kali Linux实战:5种局域网DoS攻击手法全解析(附防御方案)

本文以Kali Linux为平台,深入解析了局域网内五种典型的DoS攻击手法,包括TCP SYN Flood、ICMP Flood、MAC地址泛洪、DHCP耗尽以及应用层CC攻击模拟。通过实战演示结合Wireshark抓包分析,清晰揭示了攻击原理与流量特征,并提供了从主机加固、防火墙规则到交换机安全配置(如端口安全、DHCP Snooping)等企业级防御方案,旨在帮助安全人员构建纵深防御体系。

weixin_29313423的博客 396

在使用jdbc的时候,如何防止出现sql注入的问题

避免动态拼接 SQL 语句:避免将用户输入直接拼接到 SQL 语句中,尤其是在没有充分验证和处理输入的情况下。使用哈希函数和加盐(Salt)来对密码进行加密,并将加密后的密码存储在数据库中。在验证用户输入的密码时,对用户输入进行相同的哈希和加盐操作,然后将其与数据库中存储的哈希值进行比较。通过限制数据库用户的权限,可以减少攻击者对数据库的潜在危害。输入验证和过滤:在接受用户输入之前,对输入进行验证和过滤是非常重要的。需要注意的是,以上措施可以大大减少 SQL 注入的风险,但不能完全消除风险。

qq_65951398的博客 2054

MPU6050运动中断唤醒STM32低功耗休眠模式实战

本文详细介绍了如何使用MPU6050运动中断唤醒STM32低功耗休眠模式的实战方案。通过配置MPU6050的运动检测中断作为STM32的唤醒源,实现设备在静止时进入低功耗Stop模式,运动时快速唤醒,大幅延长电池续航。涵盖硬件连接、软件配置、参数调试等关键步骤,并提供实际应用案例和优化建议。

rgv23456789的博客 703

《测绘综合能力》——大地测量

《测绘综合能力》大地测量 部分重要(常考)知识点(精简版)。

C_xxy's blog 803

jdbc详解(二)

使用JDBC处理大数据 l在实际开发中,程序需要把大文本或二进制数据保存到数据库。 l l基本概念:大数据也称之为LOB(Large Objects),LOB又分为: •clob和blob •clob用于存储大文本。 •blob用于存储二进制数据,例如图像、声音、二进制文等。 l对MySQL而言只有blob,而没有clob,mysql存储大文本采用的是Text,Text和blob分别又

geekczt 492

从数据读取到业务事件:理解 ABAP CDS 视图的目的与选型(含 RAP、扩展与分析场景)

CDS视图在SAP S/4HANA中不仅是数据查询工具,更是语义模型和运行时能力的载体。它通过分层架构(基础视图、组合视图、消费视图等)实现数据复用与场景适配,支持UI、分析、事务处理等多样化消费。视图类型包括提供数据访问的接口视图(I_前缀)、消费视图(C_前缀)和事务视图,以及不提供数据访问的扩展视图。这种分层设计确保了数据模型的稳定性与扩展性,同时支持自定义字段和上下文感知分析。正确理解CDS视图的用途和分层规则,能帮助开发者构建更健壮、可维护的SAP应用。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 302

JDBC

JDBC 1、使用JDBC处理大数据 (1)基本概念:大数据也称之为LOB(Large Objects),LOB又分为: clob和blob clob用于存储大文本。  blob用于存储二进制数据,例如图像、声音、二进制文等。 (2)对MySQL而言只有blob,而没有clob,mysql存储大文本采用的是Text,Text和blob分别又分为:           TINYTEXT、T

LGJ1025的专栏 1051

控制科学与工程(自动化)保研经验【4】——浙大篇

控制科学与工程(自动化)保研经验【4】——浙大篇

Control Everything 1万+

Python爬虫实战:利用Selenium与反反爬技术高效爬取企查查工商信息

本文将详细介绍如何使用Python最新爬虫技术(包括Selenium、Playwright、智能代理池等)爬取企查查工商信息数据。文章包含完整的代码实现、反反爬策略、数据解析与存储方案,以及法律合规性讨论,共计约8000字。企查查作为国内领先的企业信息查询平台,收录了超过2亿家企业的工商信息、司法信息、知识产权等数据。这些数据对于市场分析、商业决策等具有重要价值。法律边界提示禁止大规模爬取导致服务器过载不得绕过付费接口获取数据数据使用需遵守《个人信息保护法》商业用途需获得授权。

2201_76125261的博客 2236

如何防止SQL注入攻击

作者:禅与计算机程序设计艺术 如何防止 SQL 注入攻击 SQL 注入攻击已经成为 Web 应用程序中最常见、最具破坏性的攻击之一。 SQL 注入攻击是指攻击者通过构造恶意的 SQL 语句,进而欺骗服务器执行恶意 SQL 操作,从而盗取、删除或者修改数据库中的数据。本文将介绍如何防止

AI天才研究院 7292

深入浅出:大型语言模型(LLM)的全面解读

在当今的数字化时代,人工智能技术已经成为各行各业的核心驱动力之一。而在人工智能的领域中,大型语言模型(LLM)作为一种引人瞩目的技术,正在以其强大的语言理解和生成能力引领着一场革命。本文旨在深入浅出地解读大型语言模型,探讨其背后的原理、技术突破、应用场景以及未来发展趋势。

fudaihb的博客 10万+

mybatis是如何防止SQL注入的

SQL注入是一种很简单的攻击手段,但直到今天仍然十分常见。究其原因不外乎:No patch for stupid。为什么这么说,下面就以JAVA为例进行说明: 假设数据库中存在这样的表: table user( id varchar(20) PRIMARY KEY , name varchar(20) , age varchar(20) );   ...

义臻的博客 3万+

【2026OD新机考】【哈希表】20260422-文章特征提取【Py/Java/C++/C/JS/Go六种语言OD真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解

90+天陪伴式学习,100+直播课时,300+动画图解视频,500+LeetCode经典题,500+华为OD真题/大厂真题,还有简历修改、模拟面试、陪伴小群、资深HR对接将为你解锁。这道题的本质是多集合交集问题的变形,属于非常典型的哈希表应用题。,储存全局的每个片段中,各个字符最少出现的次数。表示该字母并非所有片段的公共字母。,按照顺序构建答案即可。没有字母在所有三个字符串中都出现。每个字母在各字符串中都至少出现。次,所以结果中每个字母出现一次。这样,当上述循环结束后,最终。显然在上述代码中,如果字母。

weixin_48157259的博客 66

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MyBatis以及Druid 防止sql注入攻击

SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者)。[摘自] SQL injection - Wikipedia SQL注入,大家都不陌生,是一种常见的攻击方式。攻击者在界面的表单信息或URL上输入一些奇怪的SQL片段(例如“or ‘1’=’1’”这样的语句),有可能入侵参数检验不足的应用程序。所以,在我们的应用中需要...

xiaolong2230的博客 7313

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

mybatis 是如何防止 sql 注入

MyBatis 防 SQL 注入的核心是优先使用#{}占位符(依赖 JDBC 预编译),从根源上隔离用户输入和 SQL 语法;对于必须使用${}的场景,通过「白名单校验+手动转义」限制输入;配合类型校验、数据库权限控制等兜底机制,形成完整防护。凡是用户输入的内容,一律用#{}接收;动态表名、排序字段等非用户输入场景,用${}并严格校验,就能避免 99% 以上的 SQL 注入风险。

ThisIsMirror的博客 1436

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

怎么防止SQL注入攻击

但是由于程序员的水平及经验参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想获取的数据,这就是所谓的SQL Injection,即SQL注入。你所有的数据配置都完全暴露出来了,除此之外,还可以完成很多操作,更新数据、删库、删表等等。系统提供了一个功能查询该学生的课程完成情况,代码如下。. 如果我们想要获取这张表的所有数据,只需要保证上面这个sql的where条件恒真就可以了。

butterfly_onfly的专栏 1012

MyBatis是如何防止SQL注入的?

什么是SQL注入? sql存在漏洞,会被攻击,导致数据泄露 SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。 如果程序员信息安全意识不强,采用动态构造SQL语句访问数据库,并且对用户的输入未进行有效性验证,则存在SQL注入漏洞的可能性很大。一般通过页面的报错信息来确定是否存在SQL注入漏洞

weixin_43481234的博客 6055

Java使用JDBC开发 之 SQL注入攻击和解决方案

目录 一、注入攻击 二、注入攻击解决方案 一、注入攻击 在用户登录的时候,我们往往需要输入账号和密码,通过账号和密码和数据库中保存的账号密码进行匹配,匹配成功则登录成功,但是在匹配的时候会存在注入攻击的安全隐患,在输入账号和密码的时候,在末尾加上"or" 再接上任何为真的语句,这样一来,有真就为真,这样也能登录成功。 现有 mylogon 数据库,里面有 users 数据表,存储了账号...

ONESTARの博客 3503

Mybatis如何防止sql注入

Mybatis通过预编译机制和参数绑定防止SQL注入。使用#{}占位符时,参数会被转义并作为预编译参数传递,避免拼接SQL语句。动态SQL标签(如<if>)会自动处理参数安全,框架内部采用PreparedStatement确保参数与指令分离。避免使用${}进行字符串拼接可降低注入风险。

weixin_46084191的博客 2818

JDBC和MyBatis防止SQL注入攻击的原理

文章目录JDBCMyBatis JDBC 使用Statement执行查询语句的时候 : 比如要执行用户名 密码登录验证的sql语句 经常要输入 String sql = " select * from login where name=’ " +name+ " ’ and pwd = ’ " +pwd+ " ’ "; 这时候如果用户输入的密码是 ’ or ‘1’ = '1 这时候 整条输出语句可以拼装为 select * from login where name=‘xx’ and pwd =’

Syntactic Sugar 470

SQL注入攻击如何防止?

SQL注入攻击是一种常见的网络安全威胁,攻击者通过在用户输入中插入恶意的SQL代码,从而可以执行未经授权的数据库操作。:这是防止SQL注入的最有效手段之一。参数化查询允许开发者将SQL语句的结构与数据分开处理,数据部分通过参数传递,避免了SQL代码的直接拼接。例如,在Java中可以使用来实现参数化查询。:对用户输入进行严格的验证和过滤,拒绝不符合预期的输入。虽然仅依赖输入验证并不能完全防止SQL注入,但它可以减少攻击者利用输入漏洞的可能性。

破损的天堂鸟博客 1246

如何有效防止SQL注入攻击

SQL注入攻击是黑客对数据库进行攻击常用的手段之一,随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验参差不齐,相当大一部分程序员在编写...

HollisChuang's Blog 1496

JDBC PreparedStatement 防止sql注入原理

JDBC PreparedStatement 防止sql注入原理 使用Statement执行查询语句的时候  :            比如要执行用户名 密码登录验证的sql语句 经常要输入 String sql =  " select * from login where name=' " +name+ " ' and pwd = ' " +pwd+ " ' ";

风的博客 2194
上一篇: Mysql基础知识(创建库、表、对表的增删改查、多表设计、多表查询、数据库的备份和恢复)
下一篇: 事务+事务的四大特性+隔离性的具体分析+数据库连接池
escdelete
博客等级 码龄14年 37粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值