jdbc-实现用户登录业务(解决sql注入问题)[亲测有效]

jdbc-实现用户登录业务(解决sql注入问题)[亲测有效]package com.cqust; import java.sql.*; import java.util.HashMap; import java.util.Map; import java.ut

jdbc-实现用户登录业务(解决sql注入问题)

package com.cqust;

import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**

  • 解决sql注入问题使用预编译
  • 在还没有拼接sql的时候,直接编译
  • 需要传值的位置使用?
  • 使用PreparedStatement 效率比较高,sql一次编译可以执行n次,Statement是编译一次执行一次
  • 多数时候使用PreparedStatement,如果要求使用sql注入,或者字符串拼接则使用Statement
  • PreparedStatement statement = connection.prepareStatement(sql);
  •     statement.setString(1,username);传值这里传值会做类型检查比较安全
    
  •     statement.setString(2,userpwd);传值
    
  •     1,2分别指的是第一个,第二个?
    
  • statement.executeQuery();这里执行的时候不需要传sql了

*/
public class JDBCTest06 {
public static void main(String[] args) throws Exception {
//初始化界面,返回用户输入的信息,使用map集合存储
Map<String,String> userInfo = initLogin();
//登录方法,返回值是布尔类型
Boolean loginInfo = login(userInfo);
System.out.println(loginInfo ? “登录成功”:”登录失败”);

}

/**
 * 用户登录界面
 * @return 返回用户的信息,存在集合中
 */
public static Map<String,String> initLogin(){
    Map<String,String> userInfo = new HashMap<>();
    System.out.print("请输入你的用户名:");
    Scanner scanner = new Scanner(System.in);
    String username =  scanner.next();
    System.out.print("请输入你的密码:");
    String userpwd = scanner.next();
    userInfo.put("username",username);
    userInfo.put("userpwd",userpwd);

    return userInfo;
}

/**
 * 使用jdbc技术完成登录检测
 * @param map 用户的信息存储在集合map中
 * @return  最后返回登录成功还是失败
 * @throws Exception 这里为了省点劲直接throws
 */
public static boolean login(Map<String,String> map) throws Exception{
    String username = map.get("username");
    String userpwd = map.get("userpwd");
    boolean loginInfo = false;
    //1.注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    //2.获取连接
    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/cqust_db",
            "root","hch1");
    //3.获取数据库操作对象,预编译sql
    String sql = "select username,userpwd from t_user_login where username = ? and userpwd = ?";

    PreparedStatement statement = connection.prepareStatement(sql);
    statement.setString(1,username);
    statement.setString(2,userpwd);

    //4.执行sql
    //String sql = "select username,userpwd from t_user_login where username = ""+username+"" and userpwd = ""+userpwd+""";

    ResultSet resultSet = statement.executeQuery();
    //5.这里只需要看是否有数据,如果查询到数据,则登录成功,直接loginInfo = true;
    if (resultSet.next()){
        loginInfo = true;


    }

    //6.关闭资源
    if (resultSet!=null){
        resultSet.close();
    }
    if (statement!=null){
        statement.close();
    }

    if (connection!=null){
        connection.close();
    }




    return loginInfo;
}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5699.html

(0)
上一篇 2023-04-28
下一篇 2023-04-28

相关推荐

  • Oracle中的函数——Trunc()[亲测有效]

    Oracle中的函数——Trunc()[亲测有效]trunc(exp1) trunc(exp1)和Round(exp1,exp2)类似,只不过trunc()不指定截取的小数位数进行处理,只取到整数位,不做舍去处理 select trunc(123.1

    2023-02-20
    155
  • mysql添加索引(建表之后)「建议收藏」

    mysql添加索引(建表之后)「建议收藏」一.使用ALTER TABLE语句创建索引 语法如下: 其中包括普通索引、UNIQUE索引和PRIMARY KEY索引3种创建索引的格式,table_name是要增加索引的表名,column_list

    2023-01-25
    162
  • Insert into select语句引发的生产事故

    Insert into select语句引发的生产事故前言   Insert into select请慎用。这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份。本想通过程序先查询查出来然后批量插入。但xxx觉得这样有点慢,需要耗费大量的网…

    2023-02-04
    143
  • MySQL 字符串截取_sql截取某个字段某个字符后面的

    MySQL 字符串截取_sql截取某个字段某个字符后面的使用SUBSTRING_INDEX()函数 substring_index(str,delim,count) str:要处理的字符串 delim:分隔符 count:分隔符计数 例子 取出上述表中数…

    2023-02-10
    146
  • Python字母大小写转换

    Python字母大小写转换Python是一种很受欢迎的编程语言,在Python中有许多内置函数和方法可以用来操作字符串。字符串是Python中非常重要的一种数据类型,通常用来存储文本类型的数据。其中一种字符串操作是将字母的大小写转换,这是非常常见的操作。

    2024-08-21
    32
  • oracle基础~linux整体性能优化[通俗易懂]

    oracle基础~linux整体性能优化[通俗易懂]包括三方面 1 sysctl.conf //扩大文件句柄数 fs.aio-max-nr = 1048576 fs.file-max = 6815744 // 扩大共享内存段 影响SGA kernel…

    2023-04-09
    212
  • 使用Python的Grid函数实现数据网格化

    使用Python的Grid函数实现数据网格化在数据分析和机器学习的过程中,数据网格化是一个必不可少的步骤。该步骤将原始数据转换为均匀间隔排列的二维数组,使得数据可以进一步被分析和处理,例如图像分析和任意定位。Python提供了许多函数用于数据网格化,其中最常用的是Grid函数。本文将详细介绍如何使用Python的Grid函数实现数据网格化。

    2024-04-25
    72
  • Oracle行结果合计的实现

    Oracle行结果合计的实现Oracle行结果合计的实现,主要应用于日期结果的集计,下面是具体的实现代码。 With AA as ( select 'A' tNo , 10 B from dual union s

    2023-01-31
    154

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注