MySQL---JDBC基础操作、SQL注入

news2024/12/25 13:57:43

1. JDBC

JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API。

JDBC是Java访问数据库的标准规范,可以为不同的关系型数据库提供统一访问,它由一组用Java

语言编写的接口和类组成。

JDBC需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供

商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。

JDBC核心类和接口:

DriverManager:用于注册驱动

Connection: 表示与数据库创建的连接

Statement/PrepareStatement: 操作数据库sql语句的对象

ResultSet: 结果集或一张虚拟表

执行流程:

drop database if exists mydb16_jdbc;
create database if not exists mydb16_jdbc;


use mydb16_jdbc;

create table if not exists student(
	sid int primary key auto_increment,
	sname varchar(20),
	age int
);

insert into student values(NULL,'宋江',30),(NULL,'武松',28),(NULL,'林冲',26);



select * from student;


create table if not exists user(
	uid int primary key auto_increment,
	username varchar(20),
	password varchar(20)
);

insert into user values(NULL,'zhangsan','123456'),(NULL,'lisi','888888');
public class JdbcDemo1 {
    public static void main(String[] args) throws Exception {
        // 注意:使用JDBC规范,采用都是 java.sql包下的内容
        //1 注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2 获得连接
        String url = "jdbc:mysql://localhost:3306/mydb16_jdbc";
        Connection conn = DriverManager.getConnection(url, "root", "123456");
        //3获得执行sql语句的对象
        Statement stmt = conn.createStatement();
        //4执行SQL语句
        ResultSet rs = stmt.executeQuery("select * from student");
        //5处理结果集
        while(rs.next()){
            // 获得一行数据
            Integer cid = rs.getInt("sid");
            String cname = rs.getString("sname");
            Integer age = rs.getInt("age");
            System.out.println(cid + " , " + cname);
        }
        //6释放资源
        rs.close();
        stmt.close();
        conn.close();
 
 
    }

2. JDBC的SQL注入

简单的来讲,就是在写SQL语句时用字符串拼接,where查询条件拼接到了or,or后面的判别式为

真,即使SQL语句乱写,数据库也会链接成功。

将拼接的SQL语句打印出来:

由于编写的SQL语句,是在用户输入数据后,整合后再编译成SQL语句。所以为了避免SQL注入的

问题,使SQL语句在用户输入数据前,SQL语句已经完成编译,成为了完整的SQL语句,再进行填

充数据(需要在我们控制台录入后,提前把SQL语句编译成一行长长的字符串,防止注入) 。

PreparedStatement接口继承了Statement接口。执行SQL语句的方法没有区别!

PreparedStatement应用时,SQL字符串的参数都由?符号站位,被称为参数标记。在执行该SQL

语句前,要为每个?参数赋值。

当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如 or '1=1’数据库也会作

为一个参数或一个字段的属性值来处理而不会作为一个SQL指令,如此,就起到了防止SQL注入的

作用了!

我们可以看到输出的SQL是把整个参数用引号包起来,并把参数中的引号作为转义字符,从而避

免了参数也作为条件的一部分。

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

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

相关文章

unreal 5.1 增强输入实现

在ue5.1版本增加了增强输入,并且废弃了之前的轴映射和操作映射。 官方文档地址:https://docs.unrealengine.com/5.1/zh-CN/enhanced-input-in-unreal-engine/ 输入动作(Input Actions) 更改后的区别我体验下来,它将…

探索 PlanetIX:解读区块链游戏运营的奥秘

作者: danielfootprint.network 熊市之中,PlanetIX 成长为最强的 Web3 游戏,在 Polygon 网络上独占鳌头。而其开发团队深度使用了 Footprint Analtics 的零代码数据分析平台和-GameFi 的数据 API 来提升用户的游戏体验。 近日,Footprint 与…

Visual Studio添加native tools command prompt

学习UEFI开发,环境设置种需要用到native tools command prompt,但是看了一下VS2017的Tools菜单下没有这个选项。网上查询,解决了问题: Tools > External Tools > Add Title:VS Command PromptCommand:C:\Windows\System32\…

操作系统原理 —— 内存管理的概念(十八)

为什么要有内存管理 为什么要对内存进行管理,需要解决什么问题? 要回答这个问题,首先我们需要明白:进程运行时,需放在内存才能运行。比如在执行一个程序时,需将该程序的相关数据与指令装入内存才能运行。…

家居购项目 (上)

文章目录 🐀Java后端经典三层架构🐇MVC模型🐇开发环境搭建🐇会员注册🌳前端验证用户注册信息🌳思路分析🍉创建表🍉创建实体类🍉DAO🍌MemberDAOImpl &#x1f…

ISO21434 组织网络安全管理

目录 一、概述 二、目标 三、输入 3.1 先决条件 3.2 进一步支持信息 四、要求和建议 4.1 网络安全治理 4.2 网络安全文化 4.3 信息共享 4.4 管理系统 4.5 工具管理 4.6 信息安全管理 4.7 组织网络安全审计 五、输出 一、概述 为了实现网络安全工程,该…

Rotary Position Embedding (RoPE, 旋转式位置编码) | 原理讲解+torch代码实现

🔥 RoPE为苏剑林大佬之作,最早应用于他自研的RoFormer (Rotary Transformer),属于相对位置编码。效果优于绝对位置编码和经典式相对位置编码。出自论文:《RoFormer: Enhanced Transformer with Rotary Position Embedding》 &…

轻松高效!三种方法教你音频转文字!

我们在日常生活中,总会遇到许多需要音频转文字的情况。这个时候大部分小伙伴会选择一边播放音频一边记录的方式来整理音频的内容,这样既麻烦又费时,整理的效率也不高。其实我们只需要使用软件来协助我们将音频转换成文字,就可以很…

2023年03月六级真题全3套【可复制可划线查词】共11页PDF

2023年03月六级真题全3套【可复制可划线查词】共11页PDF 2023年03月六级真题全3套【可复制可划线查词】共11页PDF 2023年03月六级真题全3套【可复制可划线查词】共11页PDF

html基础知识总结

(一)html 1、html html:超文本标签语言,专门用来制作网页的一门语言。超文本:就是它不仅可以放文本内容,还可以是图片,声音,视频,多媒体等等内容 2、 html标签的分类 …

ASEMI双向可控硅BT137性能特点, BT137应用及购买指南

编辑-Z 本文将详细介绍可控硅BT137的性能特点、应用领域以及购买时需要注意的事项,帮助您更好地了解和选择BT137可控硅。 一、BT137可控硅简介 可控硅(Silicon Controlled Rectifier,简称SCR)是一种四层三端半导体器件&#xff…

sql 优化----》1)分析与定位策略

https://www.cnblogs.com/cshaptx4869/p/10482500.html 1:通过 show status 了解各种的SQL的执行频率 2:定位执行频率低的SQL语句: 1):通过慢日志定位 慢日志:可以通过两个方式配置 方式一:配置文件,my.cnf show_query…

25 # eventloop 执行流程

浏览器事件环 1、浏览器的进程 进程是计算机调度的基本单位,进程中包含着线程,浏览器是多进程进程,大致有下面几种 每一个页卡都是进程(互不影响)浏览器也有一个主进程(用户界面)每一个页卡里…

聊一聊行业的前景、就业方向和薪资待遇

软件测试行业是和软件开发相辅相成得一个行业,但目前大家对于软件测试行业的了解并不多,甚至很多学了软件测试的朋友也不是很了解。今天,就来给大家说一说,软件测试行业的前景、就业方向和薪资待遇。 岗位前景 很多小伙伴都曾听…

【PHPWord】PHPWord 根据word模板生成的内容动态生成目录以及页码

文章目录 一、需求分析二、PHPWord 中模板页码的设置三、模板内生成目录四、总结一、需求分析 在实际业务中,我们可能需要根据一些比较复杂的业务模板,生成对应的Word 文件。 本文将掌握: 使用模板配置页码使用模板插入目录二、PHPWord 中模板页码的设置 1.配置页码 注意…

dex2jar 报错 com.googlecode.d2j.DexException: not support version

​ 目录 ​ 一.问题发现 二.调查原因: 三. 根本原因调查: 四.解决问题 一.问题发现 使用dex2jar工具反编的时候,一输入指令,结果报com.googlecode.d2j.DexException: not support version错误(如下图) 异常情况.png 二.调查…

Autosar之自签名证书与CA证书

文章目录 一、安全传输1.框架2.如何实现传输安全?3. 对称加密和非对称加密的区别?4.伪随机数和真随机数5.数字签名 —— 验证完整性 & 认证数据来源6.为什么使用摘要算法的数字签名可以验证完整性?7.为什么数字签名可以认证数据来源&…

南开大学计算机考研分析

关注我们的微信公众号 姚哥计算机考研 更多详情欢迎咨询 南开大学(B)考研难度(☆☆☆☆☆☆) 南开大学计算机学科的研究工作始于1958年,是在实力雄厚的数学学科和物理学科的基础上发展起来的,是我国最早…

关于Gitee上传代码以后主页没有显示贡献度(没有显示小绿块)

事情起因:在一个闲暇的下午,吃着火锅唱着歌,突然!我发现我的Gitee有一片白 起初,没有人在意这场灾难 当我首次发现这个问题的时候,我毫无波澜的认为是Gitee出现了BUG。因为我的这些空白天数里都是有提交的…

Linux fork—进程控制

程序和进程 程序:是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁…)。进程:是一个抽象的概念,与操作系统原理联系紧密,进程是活跃的程序,占用系统资源&…