JDBC SQL注入问题

1、SQL注入问题:
在拼接sql语句时,有一些sql的特殊关键字与字符串的拼接,会造成安全性的问题
输入用户名随便
密码输入:a’ or ‘a’ = 'a
sql : select * from user where username=‘asdfg’ and password =‘a’ or ‘a’ = ‘a’;

2、解决SQL注入问题:
使用PreparedStatement来解决

3、预编译的SQL:
参数使用?作为占位符

4、步骤
1、导入驱动jar包 mysql-connector-java-8.0.16.jar
复制mysql-connector-java-8.0.16.jar到libs目录下
右键–>Add As Library

2、注册驱动

3、获取数据库的连接对象 Connection

4、定义Sql语句
select * from user where username= ? and password = ?;

5、获取执行sql语句的对象 PreparedStatement
Connection.preparedStatement(String sql);

6、给 ? 赋值
方法: setXXX(参数1,参数2)
参数1:?的位置编号,从1开始
参数2:?的值

7、执行sql,接收返回结果,不需要传递sql语句

8、处理结果

9、释放资源

代码示例

	/**
     * 登录方法,使用PreparedStatement实现
     *
     * @param username
     * @param password
     * @return
     */
     public boolean login2(String username, String password) {
        if (username == null || password == null) {
            return false;
        }
        //连接数据库来判断是否登录成功
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        //获取连接
        try {
        	//获取连接
        	conn = JDBCUtils2.getConnection();
        	//2、定义sql
            String sql = "select * from user where username=? and password =?";
            //3、获取执行sql的对象
            pstmt = conn.prepareStatement(sql);
            //给?赋值
            pstmt.setString(1,username);
            pstmt.setString(2,password);
            //4、执行查询,不需要传递sql
            rs = pstmt.executeQuery();
            //5、判断:判断结果集是否有数据
            return rs.next();//如果有下一行,返回true
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //释放资源
            JDBCUtils2.close(rs, pstmt, conn);
        }
        return false;
     }

使用PreparedStatement实现的登录方法也时写在JDBCDemo9 项目工程里,与main()方法的类同级


测试类

import java.sql.*;
import java.util.Scanner;
public class JDBCDemo9 {
		public static void main(String[] args) {
        //1、键盘录入,接收用户名和密码
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名");
        String username = sc.nextLine();
        System.out.println("请输入密码");
        String password = sc.nextLine();

        //2、调用方法
        boolean flag = new JDBCDemo9().login2(username, password);
        //3、判断结果,输出不同语句
        if (flag) {
            //登录成功
            System.out.println("登录成功");
        } else {
            System.out.println("用户名或密码错误");
        }

    }
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

稻田里展望者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值