美文网首页
java数据库连接(二)

java数据库连接(二)

作者: 简书生活2017 | 来源:发表于2017-09-17 22:56 被阅读0次

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

什么是sql注入?

捕获.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();
}

}

相关文章

  • 连接数据库(JDBC)

    JDBC:Java DataBase Connection Java数据库连接,用来操作关系型数据库。 连接数据库...

  • JDBC

    直接用Java对数据库进行操作 JDBC(Java DataBase Connectivity,java数据库连接...

  • 1.0.1 JDBC基础概述

    JDBC Java DataBase Connectivity 就是Java数据库连接,用Java语言向数据库发送...

  • 阿里P6告诉解析Java数据库连接(JDBC)

    DBC英文全称为Java DataBase Connectivity,即Java数据库连接,也就是Java程序连接...

  • JDBC操作

    JDBC(Java Data Base Connectivity,java数据库连接)是java数据可连接技术的简...

  • 8.7JDBC学习

    jdbc连接mysql JDBC(Java Data Base Connectivity,java数据库连接)是一...

  • 【JAVA基础】JAVA 连接数据库

    为什么要连接数据库 JAVA如何去连接,操作数据库*. JDBC Java Database Connecti...

  • JDBC基础

    JDBC: JDBC:Java DataBase Connectivity Java 数据库连接, Java语言...

  • JDBC学习笔记(一)

    JDBC:Java Database Connectivity,即java数据库连接,用java语言操作数据库。 ...

  • JDBC

    概念∶Java DataBase Connectivity Java 数据库连接, Java语言操作数据库。JDB...

网友评论

      本文标题:java数据库连接(二)

      本文链接:https://www.haomeiwen.com/subject/cuzmsxtx.html