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);
    }
}

你可能感兴趣的:(JDBC PrepareStatement 解决用户使用sql语句注入攻击数据库)