zoukankan      html  css  js  c++  java
  • MySQL数据库 JDBC 无注入攻击bug

    PreparedStatement
    JDBC对数据库表进行增删改查操作
     
    • 导入jar包
    • 注册驱动 告诉jvm 我们使用哪种驱动程序
    Class.forName("com.mysql.jdbc.Driver");
    • 获得连接对象 Connection
    Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名称","用户名","密码")
    • 获得预编译执行者对象 Statement接口的子接口preparedStatement用于执行SQL语句 把SQL语句发送到数据库执行PreparedStatement pst = conn.prepareStatement() 
    • 执行SQL语句 返回结果
    int row=pst.executeUpdate(sql语句);----→增删改
    ResultSet rs=pst.executeQuery(sql语句);----→查
    1.其中SQL语句 可以使用占位符
          2.设置?占位符的实际数据 pst.setObject(下标,用户名);
          3.执行SQL语句
    • 处理结果 (打印行数、遍历结果集)
    遍历结果集:while(rs.naxt()){
    rs.getXxx("字段名1");
    ...
    rs.getXxx("字段名n");
    }
    • 释放资源
     
     
    package cn.kgc.jdbc;
     
    import cn.kgc.utilsjdbc.UtilsJDBC;
     
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.Scanner;
     
    public class Login02 {
        /**
         * 解决用户使用SQL语句注入攻击数据库
         * 用Statement接口的子接口
         * java.sql.PrepareStatement extends Statement接口 表示预编译的SQL语句的对象
         * 如何使用:
         *  1.获取PrepareStatement对象 conn.prepareStatement(String sql)
         *  其中SQL语句 可以使用占位符
         *  2.设置?占位符的实际数据
         *  3.执行SQL语句
         */
        public static void main(String[] args) throws SQLException {
            //1.使用Scanner获取用户输入的用户名和密码
            Scanner input = new Scanner(System.in);
            System.out.print("请输入用户名:");
            String username = input.nextLine();
            System.out.print("请输入密码:");
            String password = input.nextLine();
            //2.使用JDBC技术操作数据库
            Connection conn = UtilsJDBC.getConnection();
            String sql="select * from users where username=? and password=?;";
            //3.获取预编译执行对象 并且传入SQL语句
            PreparedStatement pst = conn.prepareStatement(sql);
            pst.setObject(1,username);
            pst.setObject(2,password);
            //4.执行SQL 获取结果
            ResultSet rs = pst.executeQuery();
            //5.处理结果
            if (rs.next()){
                //有结果 登陆成功
                System.out.println("登录成功"+rs.getString("username")+" "+rs.getString("password"));
            }else{
                System.out.println("用户和密码不匹配");
            }
            //6.释放资源
            UtilsJDBC.close(rs,pst,conn);
        }
    }

  • 相关阅读:
    mac 终端命令kill掉某个指定端口
    python web开发之flask框架学习(1) 创建flask项目
    ios json转model的简单现实
    SnapKit swift实现高度自适应的新浪微博布局
    IOS swift实现密码的显示与隐藏切换
    IOS UIWebView与js的简单交互swift3版
    android 手写万能adapter适配器
    简单几步实现 IOS UITextField输入长度的控制
    IOS Swift UITableViewcontroller实现点击空白处隐藏键盘
    xcode 版本控制推送代码到远程git仓库的步骤
  • 原文地址:https://www.cnblogs.com/KiligYou/p/11018178.html
Copyright © 2011-2022 走看看