zoukankan      html  css  js  c++  java
  • 03010_防止SQL注入

    1、预处理对象

      (1)使用PreparedStatement预处理对象时,建议每条sql语句所有的实际参数,都使用逗号分隔

    String sql = "insert into sort(sid,sname) values(?,?)";;
    PreparedStatement预处理对象代码:
    PreparedStatement psmt = conn.prepareStatement(sql)

      (2)执行SQL语句

    int executeUpdate(); --执行insert update delete语句.
    ResultSet executeQuery(); --执行select语句.
    boolean execute(); --执行select返回true 执行其他的语句返回false

      (3)设置实际参数

        ①void setXxx(int index, Xxx xx) 将指定参数设置为给定Java的xx值。在将此值发送到数据库时,驱动程序将它转换成一个 SQL Xxx类型值;

    setString(2, "家用电器") 把SQL语句中第2个位置的占位符? 替换成实际参数 "家用电器"

      (4)代码演示

     1 import java.sql.Connection;
     2 import java.sql.DriverManager;
     3 import java.sql.PreparedStatement;
     4 import java.sql.ResultSet;
     5 import java.util.Scanner;
     6 
     7 public class JDBCDemo3 {
     8     public static void main(String[] args) throws Exception {
     9         Class.forName("com.mysql.jdbc.Driver");
    10         String url = "jdbc:mysql://localhost:3306/mybase";
    11         String username = "root";
    12         String password = "root";
    13         Connection con = DriverManager.getConnection(url, username, password);
    14         Scanner sc = new Scanner(System.in);
    15         String user = sc.nextLine();
    16         String pass = sc.nextLine();
    17 
    18         // 执行SQL语句,数据表,查询用户名和密码,如果存在,登录成功,不存在登录失败
    19         String sql = "SELECT * FROM users WHERE username=? AND PASSWORD=?";
    20         // 调用Connection接口的方法prepareStatement,获取PrepareStatement接口的实现类
    21         // 方法中参数,SQL语句中的参数全部采用问号占位符
    22         PreparedStatement pst = con.prepareStatement(sql);
    23         System.out.println(pst);
    24         // 调用pst对象set方法,设置问号占位符上的参数
    25         pst.setObject(1, user);
    26         pst.setObject(2, pass);
    27 
    28         // 调用方法,执行SQL,获取结果集
    29         ResultSet rs = pst.executeQuery();
    30         while (rs.next()) {
    31             System.out.println(rs.getString("username") + "   "
    32                     + rs.getString("password"));
    33         }
    34 
    35         rs.close();
    36         pst.close();
    37         con.close();
    38     }
    39 }
  • 相关阅读:
    在SQL Server通过DBLINK执行ORACLE存储过程
    WIFI无线网卡全双工
    ORACLE判断日期、时间的字符串是否有效日期、时间
    FN_SPLIT-表值函数, 将字符串转列表
    EBS-从职责到报表名
    LeetCode 791 自定义字符串排序
    cgit——github快速下载器
    Ubuntu 16.04下使用git clone时报“gnutls_handshake() failed: Error in the pull function”错误
    LeetCode 1702 修改后的最大二进制字符串
    一个因编码习惯不正确而产生的BUG
  • 原文地址:https://www.cnblogs.com/gzdlh/p/8111408.html
Copyright © 2011-2022 走看看