• 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>
  • 相关阅读:
    redis五类型及原理|redis主从及问题|Uninstall Redis CentOs 7
    netty4与netty5序列化问题记录
    [转载]【深入Java虚拟机】之四:类加载机制
    序列化原理机制新谈
    [Eclipse使用技巧] Eclipse使用External Tools定位java 源文件目录路径
    学习vue的一些资源
    中国国内可用API合集
    适合初学者学习的的vue+webpack的小项目
    前端性能优化----yahoo前端性能团队总结的35条黄金定律
    Angular2优质学习资源收集
  • 原文地址:https://www.cnblogs.com/hanabi-521/p/14392071.html
Copyright © 2020-2023  润新知