PreparedStatement 防止sql注入 练习
Posted 小小的梦想丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PreparedStatement 防止sql注入 练习相关的知识,希望对你有一定的参考价值。
使用的数据库 MariaDB 10.5.4版本 端口1054 数据库为jt_db,表 为user
数据库的建表和插入相关数据代码:
create table user( id int primary key auto_increment, username varchar(50), password varchar(50) ); insert into user values(null,"张三","123"); insert into user values(null,"李四","234");
其中使用到的JdbcUtil 类参见:https://www.cnblogs.com/lxsfve/p/13232402.html
package day02; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Scanner; /** * @author 小小的梦想丶 * @create 2020-07-03 19:13:01 * @desc 练习 prepareStatement 防止sql 注入 */ public class loginByPreparedSatementTest { public static void main(String[] args) throws Exception { // 根据用户名和密码查询用户信息 // 提示用户输入 账号 密码 Scanner sc = new Scanner(System.in); System.out.println("请登录!!"); System.out.println("请输入账号>>>"); String user = sc.nextLine(); System.out.println("请输入密码>>>"); String pwd = sc.nextLine(); // 执行login 方法 login(user, pwd); } private static void login(String user, String pwd) throws Exception { // 通过 jdbcutil 获取数据库连接 Connection conn = JdbcUtil.getConn(); // 获取 传输器 执行sql 语句 String sql = "select * from user where username=? and password=?"; PreparedStatement ps = conn.prepareStatement(sql); // 设置参数 ps.setString(1, user); ps.setString(2, pwd); // 执行sql 语句 这里不需要传sql 语句 返回结果 ResultSet rs = ps.executeQuery(); // 处理结果 // 如果 账号密码正确 则能在数据库中查询到相应得结果 也就是 rs里面有值 if (rs.next()) { System.out.println("登录成功!!!"); } else { System.out.println("账号密码错误,请重新输入!!!"); } } }
以上是关于PreparedStatement 防止sql注入 练习的主要内容,如果未能解决你的问题,请参考以下文章
PreparedStatement可以有效地防止sql被注入
oracle体系结构------Oracle 使用PreparedStatement防止SQL注入---转载
Statement和PreparedStatement有什么区别?哪个性能更好?预编译语句,防止sql注入问题
面试题--如何防止sql注入,使用PreparedStatement的预编译,传入的内容就不会和原来的语句发生任何匹配的关系,达到防止注入的方法
防止sql注入方法 如何防止java中将MySQL的数据库验证密码加上 ' or '1'= '1 就可以出现万能密码 的PreparedStatement