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

}

/**
 * 用户登录界面
 * @return 返回用户的信息,存在集合中
 */
public static Map<string,string> initLogin(){
    Map<string,string> userInfo = new HashMap<>();
    System.out.print("&#x8BF7;&#x8F93;&#x5165;&#x4F60;&#x7684;&#x7528;&#x6237;&#x540D;:");
    Scanner scanner = new Scanner(System.in);
    String username =  scanner.next();
    System.out.print("&#x8BF7;&#x8F93;&#x5165;&#x4F60;&#x7684;&#x5BC6;&#x7801;:");
    String userpwd = scanner.next();
    userInfo.put("username",username);
    userInfo.put("userpwd",userpwd);

    return userInfo;
}

/**
 * &#x4F7F;&#x7528;jdbc&#x6280;&#x672F;&#x5B8C;&#x6210;&#x767B;&#x5F55;&#x68C0;&#x6D4B;
 * @param map &#x7528;&#x6237;&#x7684;&#x4FE1;&#x606F;&#x5B58;&#x50A8;&#x5728;&#x96C6;&#x5408;map&#x4E2D;
 * @return  &#x6700;&#x540E;&#x8FD4;&#x56DE;&#x767B;&#x5F55;&#x6210;&#x529F;&#x8FD8;&#x662F;&#x5931;&#x8D25;
 * @throws Exception &#x8FD9;&#x91CC;&#x4E3A;&#x4E86;&#x7701;&#x70B9;&#x52B2;&#x76F4;&#x63A5;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.&#x6CE8;&#x518C;&#x9A71;&#x52A8;
    Class.forName("com.mysql.jdbc.Driver");
    //2.&#x83B7;&#x53D6;&#x8FDE;&#x63A5;
    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/cqust_db",
            "root","hch1");
    //3.&#x83B7;&#x53D6;&#x6570;&#x636E;&#x5E93;&#x64CD;&#x4F5C;&#x5BF9;&#x8C61;,&#x9884;&#x7F16;&#x8BD1;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.&#x6267;&#x884C;sql
    //String sql = "select username,userpwd from t_user_login where username = '"+username+"' and userpwd = '"+userpwd+"'";

    ResultSet resultSet = statement.executeQuery();
    //5.&#x8FD9;&#x91CC;&#x53EA;&#x9700;&#x8981;&#x770B;&#x662F;&#x5426;&#x6709;&#x6570;&#x636E;&#xFF0C;&#x5982;&#x679C;&#x67E5;&#x8BE2;&#x5230;&#x6570;&#x636E;&#xFF0C;&#x5219;&#x767B;&#x5F55;&#x6210;&#x529F;&#xFF0C;&#x76F4;&#x63A5;loginInfo = true;
    if (resultSet.next()){
        loginInfo = true;

    }

    //6.&#x5173;&#x95ED;&#x8D44;&#x6E90;
    if (resultSet!=null){
        resultSet.close();
    }
    if (statement!=null){
        statement.close();
    }

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

    return loginInfo;
}
</string,string></string,string></string,string>

}

Original: https://www.cnblogs.com/journeyhch/p/15574236.html
Author: journeyhch
Title: jdbc-实现用户登录业务(解决sql注入问题)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/508022/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Django中后台语言设置的注意点

    2022-09-28 问题描述: 今天在设置Django项目后台语言设置的时候,出现了一个问题, 显示没有”zh-Hanz”语言,之前,输入语言设置的时候,…

    数据库 2023年6月14日
    074
  • Java并发编程之CAS

    在Java并发编程的世界里,synchronized 和 Lock 是控制多线程并发环境下对共享资源同步访问的两大手段。其中 Lock 是 JDK 层面的锁机制,是轻量级锁,底层使…

    数据库 2023年6月11日
    074
  • Mysql生成测试数据函数

    1、查看设置是否允许创建函数系统参数 show variables like ‘log_bin_trust_function_creators’; 2、临时设置允许创建函数系统参数…

    数据库 2023年6月16日
    083
  • 链表(Java)实现

    链表 先给出自定义的list接口,后面几种链表的实现了该接口 public interface List { //统计顺序表元素个数 int size(); //判断顺序表是否为空…

    数据库 2023年6月16日
    083
  • Airbnb JavaScript 代码规范(转载)

    一种写JavaScript更合理的代码风格。 其他代码风格指南 1.1 原始值: 当你访问一个原始类型的时候,你可以直接使用它的值。 string number boolean n…

    数据库 2023年6月11日
    0121
  • 数据库多表查询 联合查询 增删改查

    插入 方式一 语法: insert into 表名 (字段名,…) values (值,…); 特点: 1、要求值的类型和字段的类型要一致或兼容 2、字段的个数和顺序不一定…

    数据库 2023年6月16日
    0149
  • Redis-持久化

    因为Redis是内存操作,意味着掉电就GG, 所以为了保证异常重启等问题后能尽快恢复服务,还是需要一定的持久化机制来保证。Redis提供了两种持久化机制: AOF Append O…

    数据库 2023年6月11日
    0101
  • Spring MVC的生命周期与简单三大组件的简单介绍

    1.说到Spring MVC就会想到它是基于MVC设计模式的思想来设计的: 那么MVC设计模式是什么呢? 下面来介绍一下 MVC 设计模式 MVC是模型(model)-视图(vie…

    数据库 2023年6月6日
    087
  • Django中使用QQ登录

    1.返回QQ登录网址的视图 请求方式: GET /oauth/qq/authorization/?next=xxx 请求参数: 查询字符串 参数名 类型 是否必须 说明 next …

    数据库 2023年6月14日
    0108
  • 手把手教你定位线上MySQL锁超时问题,包教包会

    昨晚我在床上睡着了,突然来了一条短信。 [En] I was asleep in bed last night when suddenly a text message came….

    数据库 2023年5月24日
    080
  • windows运行xcopy计划任务 结果是0x4解决方案

    近几天发现一直好好的数据备份计划任务一直返回0x4失败,直接执行bat又是正常的。 bat命令中使用的是xcopy,到处找方案没解决。 今天意外在使用另一个命令时,发现提示:网络连…

    数据库 2023年6月14日
    074
  • PHP array_reduce()

    array_reduce array_reduce() 将回调函数 callback 迭代地作用到 array 数组中的每一个单元中,从而将数组简化为单一的值。 示例一: 示例二:…

    数据库 2023年6月14日
    093
  • Docker安装部署Mysql8(以作数据持久化)

    1.创建容器并进行持久化处理 #拉取镜像 docker pull mysql:8.0.20 #启动镜像,用于拷贝配置文件到宿主机 docker run -p 3306:3306 -…

    数据库 2023年6月11日
    0103
  • MDC日志链路设计

    正文 本篇博客主题是MDC(MDC 全称是 Mapped Diagnostic Context,可以粗略的理解成是一个线程安全的存放诊断日志的容器),其具体流程是通过某些标识将整个…

    数据库 2023年6月6日
    097
  • 小公司比较吃亏的两道微服务面试题

    其实选择工作的时候,很多技术牛人都会选择一些小而美的公司,技术全面,能够以一个更全面的视角看整个公司的运作,人和人之间的相处也很简单。但是,有两道微服务的面试题,小公司的朋友们会比…

    数据库 2023年6月6日
    0126
  • 2022蓝帽杯初赛wp(取证)

    战果 取证全解 misc出了1个 解其他题就像在坐牢 有那么一点思路,但不是完全有 手机取证_1 解压并打开阅读器,搜索627604C2-C586-48C1-AA16-FF33C3…

    数据库 2023年6月11日
    0100
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球