JDBC-ProparedStatement实现登录Login
PreparedStatement:执行sql的对象
1. SQL注入问题:在拼接sql时,有一些生气了的特殊关键字参与字符串的拼接。会造成安全性问题
1. 输入用户名随便,输入密码:a' or 'a' = 'a
2.sql:select * from user where username = 'fhdsjkf' and password = 'a' or 'a' = 'a'
2. 解决sql注入问题:使用ProparedStatement对象来解决
3. 预编译的SQL:参数使用?作为占位符
4. 步骤:
1. 导入驱动jar包:mysql-connector-java-8.0.17.jar
2. 注册驱动
3. 获取数据库连接对象 Connection
4. 定义sql
* 注意:sql的参数使用?作为占位符。如:select * from user wehre username = ? and password = ?;
6. 给?赋值:
* 方法: setXxx(参数1,参数2)
* 参数1:?的位置编号 从1开始
* 参数2:?的值
7. 执行sql,接收返回结果,不需要传递sql语句
8. 处理结果
9. 释放资源
5. 注意:后期都会使用ProparedStatement来完成增删改查的所有操作
1. 可以防止SQL注入
2. 效率更高
package cn.itcast.jdbc; import cn.itcast.util.JDBCUtils; import java.sql.*; import java.util.Scanner; public class JDBCDemo9 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入用户名:"); String username = sc.nextLine(); System.out.println("请输入密码:"); String password = sc.nextLine(); boolean flag = new JDBCDemo9().Login2(username, password); if(flag){ System.out.println("登录成功!"); }else { System.out.println("输入的用户名或密码错误!"); } } public boolean Login2(String username,String password){ if(username == null || password == null){ return false; } Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = JDBCUtils.getConnection(); String sql = "select * from user where username=? and password=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1,username); pstmt.setString(2,password); rs = pstmt.executeQuery(); return rs.next(); } catch (SQLException e) { e.printStackTrace(); }finally { JDBCUtils.close(rs,pstmt,conn); } return false; } }