码迷,mamicode.com
首页 > 数据库 > 详细

00310_防止SQL注入

时间:2017-12-25 23:28:20      阅读:346      评论:0      收藏:0      [点我收藏+]

标签:gpo   print   其他   mys   pass   row   password   name   位置   

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 }

 

00310_防止SQL注入

标签:gpo   print   其他   mys   pass   row   password   name   位置   

原文地址:https://www.cnblogs.com/gzdlh/p/8111408.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!