JDBC PrepareStatement 解决用户使用sql语句注入攻击数据库

解决用户使用sql语句注入攻击数据库

用statement 接口的子类
java.sql.PrepareStatement Extends Statement 接口 表示预编译的SQL语句

如何使用PrepareStatement对象
1. 获取conn.PrepareStatement (String sql)
sql语句可以使用占位符 ?
2. 设置占位符的实际数据
3. 执行sql语句



import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

public class jdbc03pre {
    /*
    解决用户使用sql语句注入攻击数据库
    用statement 接口的子类
    java.sql.PrepareStatement Extends Statement 接口 表示预编译的SQL语句

     如何使用PrepareStatement对象
     1. 获取conn.PrepareStatement (String sql)
        sql语句可以使用占位符 ?
     2.  设置占位符的实际数据
     3. 执行sql语句
     */
    public static void main(String[] args) throws SQLException {
        //1 使用scanner获得用户名和用户密码
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名");
        String pname = sc.nextLine();
        System.out.println("请输入密码");
        String pasword = sc.nextLine();
        //2. 使用jdbc操作数据库
        //获取连接对象
        Connection conn = JdbcUntil.getConnection();
        //获得执行对象
        String sql="SELECT * FROM users WHERE pname=? AND pasword=?;";
        //3. 获取预编译执行对象  并传入sql语句
        PreparedStatement pst = conn.prepareStatement(sql);
        // 给占位符赋值 使用给定对象设置指定参数的值 setObject
        pst.setObject(1,pname);
        pst.setObject(2,pasword);

        //4.执行sql语句 获取结果
        //int executeUpdate()  insrt update delete
        // ResultSet excuteQuery; select
        ResultSet i = pst.executeQuery();
        //5. 处理结果
        if (i.next()){
            //有结果
            System.out.println("登录成功---》"+i.getString("pname")+i.getString("pasword"));
        }else {
            System.out.println("没有结果");
        }
        //释放资源
        JdbcUntil.close(i,pst,conn);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值