• MYSQL--JDBC优化


    一.JDBC优化:

            优化前提:

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

            具体语句:

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

                                                                            更加推荐这种方式

    二:有关MYSQL的SQL语言注入

            1.介绍:    

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

            2.具体操作演示:

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

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

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

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

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

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

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

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

            3.SQL注入解决方式

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

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

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

                                                                    感谢观看OVER!

  • 相关阅读:
    【Vue五分钟】五分钟让你了解vue组件的层级关系
    【Linux】Linux的常见指令详解(上)
    33_ue4进阶末日生存游戏开发[拾取面板UI]
    YOLO系列 --- YOLOV7算法(三):YOLO V7算法train.py代码解析
    如何通过MES系统提高生产计划效率?
    java-net-php-python-ssm电影推荐网站计算机毕业设计程序
    ​AAAI 2023 | 基于历史对比学习的时序知识图谱推理
    Mac下载安装配置运行MySQL
    leetcode做题笔记129. 求根节点到叶节点数字之和
    8年思科C语言程序员转web独立开发者年收入超10万美元
  • 原文地址:https://blog.csdn.net/2303_79546217/article/details/136393551