预处理对象

预处理对象

1. PreparedStatement 接口介绍

PreparedStatement Statement 接口的子接口,继承于父接口中所有的方法。它是一个预编译的 SQL 句对象.

预编译: 是指SQL 语句被预编译,并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。

2. PreparedStatement 特 点

因为有预先编译的功能,提高 SQL 的执行效率。可以有效的防止 SQL 注入的问题,安全性更高

3. 获取PreparedStatement对象

通过Connection创建PreparedStatement对象

Connection 接口中的方法

说明

PreparedStatement prepareStatement(String sql)

指定预编译的 SQL 语句,

SQL 语句中使用占位符 ? 创建一个语句对象

4. PreparedStatement接口常用方法

常用方法

说明

int executeUpdate();

执行insert update delete语句.

ResultSet executeQuery();

执行select语句. 返回结果集对象 Resulet

5. 使用PreparedStatement的步骤

    1. 编写 SQL 语句,未知内容使用?占位:​​​​​​​

"SELECT * FROM jdbc_user WHERE username=? AND password=?";

​​​​​​​    2. 获得 PreparedStatement 对象

    3. 设置实际参数:setXxx( 占位符的位置, 真实的值)

    4. 执行参数化 SQL 语句

    5. 关闭资源

setXxx重载方法

说明

void setDouble(int parameterIndex, double x)

将指定参数设置为给定 Java double 值。

void setInt(int parameterIndex, int x)

将指定参数设置为给定 Java int 值。

void setString(int parameterIndex, String x)

将指定参数设置为给定 Java String 值。

void setObject(int parameterIndex, Object x)

使用给定对象设置指定参数的值。

使用PreparedStatement完成登录案例

package com.lagou.jdbc03;

import com.lagou.utils.JDBCUtils;

import java.sql.*;
import java.util.Scanner;

public class TestLogin02 {

    /*
    * SQL注入
    *   用户输入的用户名和密码 与我们编写的SQL进行了拼接,用户输入的内容成为了SQL语法的一部分,
    *   用户会利用这里漏洞 输入一些其他的字符串,改变SQL原有的意思
    *
    * 如果解决
    *   要解决SQL注入 就不能让用户输入的数据和我们的SQL进行直接的拼接
    *
    * 预处理对象 PrepareStatement 他是 Statement接口的子接口
    *   使用预处理对象 他有预编译的功能,提高SQL的执行效率
    *   使用预处理对象 通过占位符的方式 设置参数 可以有效的防止SQL注入
    *
    *
    * */
    public static void main(String[] args) throws SQLException {

        //1.获取连接
        Connection con = JDBCUtils.getConnection();

        //2.获取PrepareStatement 预处理对象
        //使用 ? 占位符的方式来设置参数
        String sql = "select * from jdbc_user where username = ? and password = ?";
        PreparedStatement ps = con.prepareStatement(sql);

        //3.获取用户输入的用户名和密码
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名: ");
        String name = sc.nextLine();

        System.out.println("请输入密码: ");
        String pass = sc.nextLine();

        //4.设置参数 使用setXXX(占位符的位置(整数),要设置的值)的方法设置占位符的参数
        ps.setString(1,name); // 设置第一个问号值 为 name
        ps.setString(2,pass);

        //5.执行查询
        ResultSet resultSet = ps.executeQuery();

        //6.处理结果集
        //6.处理结果集
        if(resultSet.next()){

            System.out.println("登录成功! 欢迎您: " + name);
        }else{

            System.out.println("登录失败! ");
        }

        //7.关闭流
        JDBCUtils.close(con,ps,resultSet);
    }
}

节选自拉钩教育JAVA培训系列教程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

enterpc

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

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

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

打赏作者

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

抵扣说明:

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

余额充值