MYSQL--JDBC优化

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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.执行SQL
        Statement 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.执行SQL
        Statement 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.执行SQL
        Statement 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!

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
28天前
|
SQL 缓存 关系型数据库
下次老板问你MySQL如何优化时,你可以这样说,老板默默给你加工资
【5月更文挑战第20天】下次老板问你MySQL如何优化时,你可以这样说,老板默默给你加工资
38 3
|
1月前
|
SQL 存储 关系型数据库
Mysql优化提高笔记整理,来自于一位鹅厂大佬的笔记,阿里P7亲自教你
Mysql优化提高笔记整理,来自于一位鹅厂大佬的笔记,阿里P7亲自教你
|
6天前
|
SQL 缓存 关系型数据库
MySQL慢查询优化实践问答
MySQL慢查询优化实践问答
|
9天前
|
缓存 关系型数据库 MySQL
如何优化MySQL 8.0的性能?
【6月更文挑战第14天】如何优化MySQL 8.0的性能?
33 5
|
7天前
|
关系型数据库 MySQL 数据库
mysql索引优化
【6月更文挑战第16天】mysql索引优化
12 2
|
11天前
|
缓存 监控 关系型数据库
mysql优化
【6月更文挑战第12天】mysql优化
19 3
|
16天前
|
SQL 关系型数据库 MySQL
MySQL大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化
|
17天前
|
存储 SQL 关系型数据库
MySQL数据库——SQL优化(1/3)-介绍、插入数据、主键优化
MySQL数据库——SQL优化(1/3)-介绍、插入数据、主键优化
227 1
|
23天前
|
SQL 关系型数据库 MySQL
mysql 故障排除与优化
mysql 故障排除与优化
|
3天前
|
存储 关系型数据库 MySQL
索引的威力--记一次MySQL存储过程优化
在MySQL存储过程中,一个`INSERT INTO SELECT`语句起初执行超过130秒,优化后,执行时间降低到1秒内,实现了100倍的性能提升。问题在于`NOT IN`子查询导致的慢查询,最终通过创建单列索引获得了最佳效果。文章还介绍了索引创建的基本语法,并讨论了单列索引与组合索引的优缺点。作者强调,随着数据量增加,索引对于查询性能的重要性,计划未来采用读写分离来进一步优化处理大量插入和查询的场景。