- package com.lin.jdbc_04;
-
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- import java.util.Scanner;
-
- import com.lin.jdbc_01.JDBCUtils;
-
- /*
- * 模拟用户登录操作,判断登录是否成功
- * 分析:
- * user表,目前有两条数据
- * 1)键盘录入用户名和密码
- * 2)定义一个功能,isLogin(String username,String password)
- * 2.1)使用Statement对象进行查询
- * 通过username和password查询结果集和表中的数据对应上
- * 说明有具体的结果RequestSet里面next()
- * 2.2)如果返回值为true登录成功,否则登录失败
- *
- * */
- /*
- * *使用Statement对象查询sql语句
- *用户名和密码完全不一样:用户名和密码
- SELECT * FROM USER WHERE username='sdfsd' AND PASSWORD = 'a' OR 'a' = 'a';
- //String的sql拼接如果使用Statement就会造成"sql注入":不安全
- * sdfsd' AND PASSWORD = 'a' OR 'a' = 'a a=a 后面恒成立 (不安全)
- *
- *使用PerparesStatment:预编译对象 (推荐)
- * 1)执行预编译的sql语句,它的执行效率高
- * 2)能够有效防止sql注入,安全性更高!
- * Connection
- * PerparedStatement perpareStatment(String sql):
- * 将参数化的sql首先发送到数据库进行编译(编译一次)
- *参数化的sql语句
- * SELECT * FROM USER WHERE username= ? AND PASSWORD = ? ;
- * 给参数赋值
- * 第一个参数字符串类型:setString(1,username)
- * 第二个参数:字符串类型:setString(2,password) ;
- *
- * */
- public class PreparedStatementTest {
- 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();
- // 调用isLogin()
- boolean flag = isLogin2(username, password);
- if (flag) {
- System.out.println("登录成功");
- } else {
- System.out.println("登录失败");
- }
- }
-
- // 使用PreparedStatement执行预编译的SQL语句
- private static boolean isLogin2(String username, String password) {
- Connection conn = null ;
- PreparedStatement stmt = null ;
- ResultSet rs = null ;
- try {
- //注册驱动
- //获取连接对象
- conn = JDBCUtils.getConnection() ;
- //准备sql
- String sql = "select * from user where username = ? and password = ?;" ;
- //将参数的化的sql发送数据库,进行编译
- stmt = conn.prepareStatement(sql) ;
- System.out.println(sql);
- //参数进行赋值
- stmt.setString(1, username);
- stmt.setString(2, password);
-
- //执行sql
- rs = stmt.executeQuery() ;
- return rs.next() ;
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- return false;
- }
-
- // 使用Statement中的静态sql语句
- private static boolean isLogin(String username, String password) {
- Connection conn = null;
- Statement stmt = null;
- ResultSet rs = null;
- // 注册驱动
- // 获取连接
- try {
- conn = JDBCUtils.getConnection();
- // 准备sql
- String sql = "select * from user where" + " username='" + username + "' and password = '" + password
- + "';";
- System.out.println(sql);
- // 通过连接对象创建执行对象
- stmt = conn.createStatement();
- // 执行查询
- rs = stmt.executeQuery(sql);
- return rs.next();// 如果通过用户名和密码查询到用户存在,光标就会向有效数据移动
-
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } finally {
- // 释放资源
- JDBCUtils.close(rs, stmt, conn);
- }
- return false;
- }
- }