JDBC(2)preparestatement

PreparedStatement

Statement 的⼦类,提供了 SQL 占位符的功能
使⽤ Statement 进⾏开发有两个问题:
1、需要频繁拼接 String 字符串,出错率较⾼。
2、存在 SQL 注⼊的⻛险。
SQL 注⼊:利⽤某些系统没有对⽤户输⼊的信息进⾏充分检测,在⽤户输⼊的数据中注⼊⾮法的 SQL语句,从⽽利⽤系统的 SQL 引擎完成恶意⾏为的做法
String pword="124 'or '1=1";
 String sql="Select *from user where name='"+username+" 'and password='"+pword+"'";

显示

Select *from user wherename='肖战 'and password='124 'or '1=1'   此时密码无论如何都可以进去

用法

1.sql语句不同
String sql = "select * from t_user where username = ? and password = ?";
2.在创建prepareStatement时就将sql语句传入 PreparedStatement preparedStatement
= connection.prepareStatement(sql);
3.问号的赋值 preparedStatement.setString(
1,username); preparedStatement.setString(2,mypassword); ResultSet resultSet = preparedStatement.executeQuery(); if(resultSet.next()){ System.out.println("登录成功"); }else{ System.out.println("登录失败"); }

 

 
 错误
 
 String sql = "Insert into user('name','password') values(?,?)";

正确

 String sql = "Insert into user(name,password) values(?,?)";

 

 当JDBC里面的getConnection为静态方法时可以不声明,直接调
   connection = JDBCTools.getConnection();

 

多态

定义方法时用父类,传参用子类

表单传参

<form action="/user" method="post">
       ID: <input type="text"  value="${user.id}"  readonly><br/>
        用户名:<input type="text" name="name" value="${user.name}"><br/>
        密码:<input type="text" name="password" value="${user.password}"><br/>
    <input type="hidden" name="method" value="update">//类似于<a href="&method=update">
    <input type="submit" value="提交">
</form>

 

posted @ 2021-02-09 10:29  Hanabi_521  阅读(96)  评论(0)    收藏  举报