有关JDBC--通过用户登录了解prepared

通过验证用户名及密码是否正确来了解Prepared:

package com.jdbc.preparedStatement;

import com.jdbc.pojo.User;
import com.jdbc.user.BankUse;

import java.sql.*;
import java.util.ArrayList;

/*
*	此部分是连接数据库的代码
*/

public class UserDaoImpl {
    public User getUserInfo(String name,String psd) {
        Connection conn=null;
        //注意此处不再声明Statement,而声明PreparedStatement
        PreparedStatement ps=null;
        //声明用户对象
        User u=null;
        ResultSet rs=null;

        String driver="com.mysql.jdbc.Driver";
        String url="jdbc:mysql://localhost/moon?useSSL=false&serverTimezone=UTC&charactorEncoding=UTF-8";
        String username="root";
        String password="2019012660Moon";

        try{
            //加载驱动类
            Class.forName(driver);
            //获取数据库连接对象
            conn= DriverManager.getConnection(url,username,password);

			//注意此处是先创建sql命令,再创建sql命令对象
            //创建sql命令(?是占位符)
            String sql="select * from data where name=? and password=?";
            //创建sql命令对象
            ps=conn.prepareStatement(sql);
            //给占位符赋值(占位符从左到右角标从1开始)
            ps.setString(1,name);
            ps.setString(2,psd);
            /*
            *	以上有关占位符的部分就是PrepareStatement与Statement的不同
            *	使用PrepareStatement的好处:
            *	1. 防止SQL注入攻击
            *		关于什么是SQL注入攻击,在之后双手奉上超详细的大佬的讲解
            *	2. 提升sql语句执行效率
            *		解释:如果应用Statement,在创建sql命令时,我们是需要完整写出每一条要操作的sql语句的,
            *		但是对于相同的操作,我们势必要加入相同的sql语句,而每一次执行sql语句时,它就要被编译一次,这会大大损耗时间;
            *		而PrepareStatement就只需要编译处理一条sql语句,大大缩减了不必要的时间
            *	
            *	另外,有关setString部分,也可以统一用setObject来代替
            */

            //执行sql命令,此处如果传入sql会报错,因为sql中含有占位符
            rs=ps.executeQuery();
            //遍历查询结果
            while (rs.next()) {
                u=new User();
                u.setId(rs.getInt("id"));
                u.setName(rs.getString("name"));
                u.setPassword(rs.getString("psd"));
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //关闭资源
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return u;
        }
    }
}

package com.jdbc.pojo;

import java.util.Objects;

/*
*	此部分是创建用户对象的代码
*/

public class User {
    private int id;
    private String name;
    private String password;

    public void setId(int id) {
        this.id = id;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public int getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    public String getPassword() {
        return password;
    }
}
package preparedStatement;

import com.jdbc.pojo.User;
import com.jdbc.preparedStatement.UserDaoImpl;

import java.util.Scanner;

/*
*	此部分是Main
*/

public class Main {
    public static void main(String[] args) {
        //创建Scanner对象
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入用户名:");
        String name=sc.next();
        System.out.println("请输入密码:");
        String psd=sc.next();

        //创建数据库操作对象
        UserDaoImpl ud=new UserDaoImpl();
        User u=ud.getUserInfo(name,psd);

        if (u!=null) {
            System.out.println("用户登陆成功");
        } else {
            System.out.println("用户名或密码错误");
        }
    }
}

最后,关于什么是SQL注入攻击,请点击这里了解嗷SQL注入攻击实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值