MYSQL--JDBC优化

一.JDBC优化:

        优化前提:

        有时候我们并不清楚某些表当中一共有多少列,以及这些列的数据类型,这个时候我们就需要提前通过一些方法提前了解到这些数据,从而更好的进行输出

        具体语句:

package cn.jdbc;import java.sql.*;public class JDBCDEmo1 {public static void main(String[] args) throws SQLException {// JDBC代码编写步骤// 1.注册驱动DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());// 2.获取连接// 在3306/后面加上自己查询的数据库的名称Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc1","root","123456");// 3.执行SQLStatement statement = connection.createStatement();// 填写需要的SQL语句即可ResultSet resultSet = statement.executeQuery("select * from jdbcdemo1");//优化操作://先获取表一共有多少列,获取其列数ResultSetMetaData metaData = resultSet.getMetaData();int columnCount = metaData.getColumnCount();//在这里,conlumnCount代表的就是获得的表的列数// 4.处理结果集while(resultSet.next()){//已经获取到了一共有多少行数,之后就可以采用循环的方式对于每一列放在同一行当中进行输出// resultSet.get(?)() 但是在这里需要注意的一点是,我们并不清楚每一列的数值类型,所以我们可以直接使用getObject的方式for (int i = 1; i <=columnCount; i++) {//在这里获取的是一行当中第i列的数值System.out.print(resultSet.getObject(i)+" ");}//一行的所有列都进行输出了之后就需要我们进行换行操作,再进行下一行的每一列的操作System.out.println();}// 5.关闭连接  释放资源resultSet.close();statement.close();connection.close();}
}

                                                                        更加推荐这种方式

二:有关MYSQL的SQL语言注入

        1.介绍:    

        SQL注入: 指的是对于用户输入的内容,变成了SQL语句当中的一部分,从而改变了SQL语句真正意义

        2.具体操作演示:

package cn.jdbc;import java.sql.*;
import java.util.Scanner;public class JDBCDEmo2 {public static void main(String[] args) throws SQLException {Scanner in =new Scanner(System.in);// SQL注入: 指的是对于用户输入的内容,变成了SQL语句当中的一部分,从而改变了SQL语句真正意义System.out.println("请输入您的用户名");String username=in.next();System.out.println("请输入您的密码");String password=in.next();// 1.注册驱动DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());// 2.获取连接// 在3306/后面加上自己查询的数据库的名称Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc2","root","123456");// 3.执行SQLStatement statement = connection.createStatement();//提前设置SQL语句//如果密码正确可以直接机内String sql ="select * from user where username='"+username+"'and password='"+password+"'";ResultSet resultSet = statement.executeQuery(sql);//判断是否存在数据,如果输入正确则能够查询到并输出if (resultSet.next()){System.out.println("登陆成功!");}else {System.out.println("登录失败!");}connection.close();resultSet.close();statement.close();}

                                在这里,我们拿我MSQL当中的JDBC2的表user表格作为数据参考

                ​​​​​​​        ​​​​​​​        ​​​​​​​    

        输入正确的用户名,密码,可以正常的进入:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        但是,如果输入某些特殊的字符,就有可能导致原本错误的变成了正确的数据,从而进入到其中,也就是输入的东西对于SQL语句造成了某些改变

        可以看到账号密码明显不正确,但是依然显示登录成功

        通过对于SQL语句的打印,发现是输入的密码让原本的SQL语句的意义发生了改变,因为or之后的1=1永远成立,因此不管密码账号是否是正确的,都一直都能够登录成功

        3.SQL注入解决方式

        // 3.执行SQLStatement statement = connection.createStatement();//提前设置SQL语句//如果密码正确可以直接机内// 在这里,我们将需要用户输入的数据改为   ?  之后进行处理String sql ="select * from user where username=? and password=?";PreparedStatement preparedStatement = connection.prepareStatement(sql);// 之后调用相应的SETOBJECT方法,设置第一个?代表的什么变量,以及第二个代表什么变量,从而让SQL语句变得更加的完整preparedStatement.setObject(1,username);preparedStatement.setObject(2,password);// 在这里,我们不需要再进行输入相应的SQL语句,再预处理的时候已经接受到了SQL语句// 并且需要注意的是,使用的是预处理(prepareStatement)的方法ResultSet resultSet = preparedStatement.executeQuery();

        经过预处理之后,再输入相应的语句,再进行测试

        发现已经解决相关SQL注入问题        

                                                                感谢观看OVER!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MariaDB MaxScale实现mysql8读写分离

目录 1.MaxScale 是干什么的&#xff1f; 2.MaxScale 实验环境 3.实现数据库主从复制 4.创建用户 1) 创建监控用户 2) 创建路由用户 5.docker 安装MaxScale 6.配置maxscale 使用 maxctrl list servers 命令查看运行状态 查看注册服务 使用 maxctrl list listeners Read-…

重拾前端基础知识:CSS

重拾前端基础知识&#xff1a;CSS 前言选择器简单选择器属性选择器组合选择器 插入CSS内嵌样式&#xff08;Inline Style&#xff09;内部样式&#xff08;Internal Style&#xff09;外部样式&#xff08;External Style&#xff09; 层叠颜色背景颜色文本颜色RGB 颜色HEX 颜色…

STM32利用标准库编写程序proteus仿真流水灯

首先就是建立一个proteus工程&#xff0c;导入元器件画图&#xff1a; 接下来就是下载我已经都复制好的工程&#xff0c;下载后直接解压缩就能用&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Nx5p3Tif6eHBIVkcPfsj9w?pwd1234 提取码&#xff1a;1234 解压后打开…

<网络安全>《61 微课堂<第1课 南北向流量是什么?>》

1 形象化解释 在网络安全中&#xff0c;经常听到南北向流量这个词。那究竟是什么意思呢&#xff1f; 这里的南北&#xff0c;就是地图上的东西南北&#xff0c;是方向。我们在画网络架构图时&#xff0c;往往是由上到下依次是web层、应用层、数据层&#xff0c;流量从web层到…

【数据分享】2000~2023年MOD15A2H 061 光合有效辐射分数FPAR数据集

​各位同学们好&#xff0c;今天和大伙儿分享的是2000~2023年MOD15A2H 061 光合有效辐射分数FPAR数据集。如果大家有下载处理数据等方面的问题&#xff0c;可以评论或私信。 Myneni, R., Y. Knyazikhin, T. Park. MODIS/Terra Leaf Area Index/FPAR 8-Day L4 Global 500m SIN G…

C#高级:DataGridView的详解

一、每条数据增加一个按钮&#xff0c;点击输出对应实体 请先确保正确添加实体的名称和文本&#xff1a; private void button6_Click(object sender, EventArgs e) {//SQL查询到数据&#xff0c;存于list中List<InforMessage> list bll.QueryInforMessage();//含有字段…

【STM32】江科大STM32学习笔记汇总(50)

00. 目录 文章目录 00. 目录01. STM32学习笔记汇总02. 相关资料下载03. 附录 01. STM32学习笔记汇总 【STM32】STM32学习笔记-课程简介(01) 【STM32】STM32学习笔记-STM32简介(02) 【STM32】STM32学习笔记-软件安装(03) 【STM32】STM32学习笔记-新建工程(04) 【STM32】STM…

Mac清理电脑垃圾工具CleanMyMac X4.15中文免费版下载

嘿&#xff0c;亲爱的Mac用户们&#xff0c;你们是否曾经想象过你的电脑是一座美丽的城市&#xff0c;而垃圾文件则是那些不速之客&#xff0c;悄悄堆积&#xff0c;影响着城市的整体美观。今天&#xff0c;我们就来聊聊Mac为什么会产生垃圾文件&#xff0c;这些垃圾文件会对你…

QPS 提升 10 倍!滴滴借助 StarRocks 物化视图实现低成本精确去重

作者&#xff1a;滴滴 OLAP 开发工程师 刘雨飞 小编导读&#xff1a; 滴滴于 2022 年引入了 StarRocks。经过一年多的努力&#xff0c;StarRocks 逐渐替代了原有技术栈&#xff0c;成为滴滴内部主要的 OLAP 引擎。截至 2023 年 12 月&#xff0c;滴滴已经成功建立了超过 40 个 …

Day08-【Java SE进阶】面向对象高级二——多态、final、抽象类、接口

一、多态 对象多态多态是在继承/实现情况下的一种现象&#xff0c;表现为对象多态和行为多态。 对象多态&#xff1a;一个人可以是学生也可以是老师&#xff0c;学生和老师都是人的子类&#xff0c;创建人对象让其指向不同的对象&#xff0c;称为对象多态&#xff0c;这里是向…

带着问题阅读源码——Spring MVC是如何将url注册到RequestMappingHandlerMapping?

背景 在 Spring MVC 中&#xff0c;DispatcherServlet 是前端控制器&#xff08;front controller&#xff09;&#xff0c;它负责接收所有的 HTTP 请求并将它们映射到相应的处理器&#xff08;handler&#xff09;。为了实现这一点&#xff0c;Spring MVC 使用了适配器模式将…

备考2025年AMC8数学竞赛:2000-2024年AMC8真题练一练

想了解如何提高小学和初中数学成绩&#xff1f;小学和初中可以参加的数学竞赛有哪些&#xff1f;不妨看看AMC8美国数学竞赛&#xff0c;现在许多小学生和初中生都在参加这个比赛。如果孩子有兴趣&#xff0c;有余力的话可以系统研究AMC8的历年真题&#xff0c;即使不参加AMC8竞…