狗凡

导航

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

posted on 2019-06-13 17:41  狗凡  阅读(169)  评论(0编辑  收藏  举报