java数据库连接(二)

问题:前一篇(Java数据库连接(一))中步骤三,获得sql语句连接对象时,不能有效的预防sql注入,导致存在数据安全问题。

什么是sql注入?

java数据库连接(二)_第1张图片
捕获.PNG

解决办法:使用 PreparedStatement
【使用 PreparedStatement 预编译(防止SQL注入)】
// 使用占位符
String sql = “select * from user where username = ? and password = ?”;

       // 使用 preparedStatement 进行预编译
      PreparedStatement ptmt = conn.preparedStatement(sql);

      // 给SQL占位符设置值
      // 占位符,下标从1开始
       ptmt.setString(1, “Jss”);
        ptmt.setString(2, “1234”);

      // 执行操作,此时不需要再传递 sql,因为上面已经预编译过了
      ptmt.executeQuery();

    【PreparedStatement 执行修改】

      // 使用 executeUpdate(),其中返回值是 int,指的是多少条数据发生了变动。
      ptmt.executeUpdate();

     【PreparedStatement 执行查询】
      ptmt.executeQuery();

代码操作
package DatabaseConnection;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;

public class practiceTwo {

public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub

    //步骤1:注册数据驱动
    Class.forName("com.mysql.jdbc.Driver");
    
    //步骤2:获取数据库连接
    String url = "jdbc:mysql://localhost:3306/student_information";
    String user = "root";
    String password = "1234";
    Connection conn = DriverManager.getConnection(url, user, password);
    
    //System.out.println(conn);
    
    
    //步骤3:获得sql语句执行对象
    Statement stmt = conn.createStatement();
    
    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入要查询的人的性别:");
    String sex = scanner.nextLine();
    System.out.println("请输入要查询的系别:");
    String sdept = scanner.nextLine();
    
    //步骤4:准备sql语句 
    //使用createStatement不能预防sql注入
    /*请输入要查询的人的性别:
    女
    请输入要查询的系别:
    就是不介绍说 'or '1=1*/
    String sql = "select *from student where Ssex = '"+sex+"' and Sdept = '"+sdept+"'";
    
    
    //步骤5:执行sql语句
    ResultSet rs = stmt.executeQuery(sql);
    
    //步骤6:处理获取到的结果
    while(rs.next()) {
        
        System.out.println(rs.getString("Sno") + "\t" + rs.getString("Sname") + "\t" + rs.getString("Ssex") + "\t"
                + rs.getInt("Sage") + "\t" + rs.getString("Sdept") + "\t" + rs.getString("S_entrance"));
    }
    
    rs.close();
    stmt.close();
    scanner.close();
    conn.close();
}

}

你可能感兴趣的:(java数据库连接(二))