用户登录业务简易实现(IDEAJava实现)(练习JDBC)

news/2024/5/18 23:11:26 标签: mysql, 数据库, sql, jdbc

使用IDEA开发JDBC代码配置驱动
在这里插入图片描述
在这里插入图片描述

注:1.提前下载好jar包

​ 2.不是配置一次就行了,每次新建一个模块,都需要再次配置。

创建一个数据库,模拟一个用户信息表。

sql">create database userdata;
create table t_user(username varchar(255),userpwd varchar(255));
insert into t_user(username,userpwd) values('zhangsan',123);

在这里插入图片描述

JDBC编程六步

  • 注册驱动

  • 获取连接

  • 获取数据库操作对象

  • 执行sql语句

  • 处理查询结果集、

  • 结束资源

具体代码:

public class userLogin {
    public static void main(String[] args) {
        // 初始化界面,返回用户的信息。
        Map<String, String> userLoginInfo = initUI();
        // 验证用户名和密码
        boolean loginSuccess = login(userLoginInfo);
        System.out.println(loginSuccess ? "Success" : "False");
    }

    private static boolean login(Map<String, String> userLoginInfo) {
        // 打一个标记
        boolean loginSuccess = false;

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            // 1.注册驱动
            Class.forName("com.sql>mysql.cj.jdbc.Driver");
            // 2.获取连接
            conn = DriverManager.getConnection("jdbc:sql>mysql://127.0.0.1:3306/userdata",
                    "root", "root");
            // 3.获取数据库操作对象
            stmt = conn.createStatement();
            // 4.执行sql语句
            String sql = "select * from t_user where username = '" + userLoginInfo.get("userLoginName")
                    + "' and userpwd = '" + userLoginInfo.get("userLoginPwd") + "'";
            // 5.处理查询结果集
            rs = stmt.executeQuery(sql);
            if (rs.next()) {
                loginSuccess = true;
            }
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        } finally {
            // 6.关闭资源
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return loginSuccess;
    }

    private static Map<String, String> initUI() {
        // 获取用户信息
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入账号:");
        String userLoginName = sc.nextLine();
        System.out.println("请输入密码:");
        String userLoginPwd = sc.nextLine();
        Map<String, String> userLoginInfo = new HashMap<>();
        // 将用户信息存入Map中
        userLoginInfo.put("userLoginName", userLoginName);
        userLoginInfo.put("userLoginPwd", userLoginPwd);
        return userLoginInfo;
    }
}

不足:存在sql注入的问题


http://www.niftyadmin.cn/n/1326946.html

相关文章

SQL注入问题的解决(PreparedStatement)

sql注入的问题 上篇博客用户登录业务简易实现结尾提到了代码的不足&#xff1a;存在SQL注入问题。 下面演示一下什么是SQL&#xff0c;注入问题。&#xff08;就拿上篇的代码举个例子&#xff09; 以上为正常现象&#xff0c;但有些“不法分子”抓住了代码的漏洞&#xff0c;干…

之前写sql语句都是懵的,明白各查询命令执行顺序,才能有逻辑的写

掌握了查询命令的执行顺序&#xff0c;才能真正理解SQL语句的执行原理。 1&#xff09;FROM 执行顺序&#xff1a;FROM命令永远是第一个执行的作用&#xff1a;FROM命令相当于一个读取流&#xff0c;负责将硬盘上的文件加载到内存中生成一个【临时表】&#xff0c;供后续查询命…

之前sql语句都是蒙的,懂了临时表才明白

理解临时表&#xff0c;会对查询语句有更深的理解&#xff0c;知其然&#xff0c;更要知其所以然。 临时表&#xff1a; 1&#xff09;作用&#xff1a;每一个查询命令在执行的时候&#xff0c;实际上操作的都是上一个查询命令生成的临时表。 2&#xff09;生命周期&#xff1a…

Javase基础面试题

接口 特殊的类文件 作用&#xff1a;1. 指定规则 2.降低耦合度 使用规则&#xff1a; 接口中属性默认都是静态常量属性&#xff08;public static final&#xff09;。 接口中方法都是抽象的&#xff08;public abstract&#xff09;&#xff0c;如果需要定义具体方法的实现…

(不要小瞧数组)玩转数据结构之数组,手写动态数组(Java)

带有泛型类的数组 import java.util.Arrays;public class Array<E> {private E[] data;private int size;// 传入capacity初始化数组的容量public Array(int capacity) {// 不能直接实例化泛型类&#xff0c;通过Object强制类型转换data (E[])new Object[capacity];si…

数据结构之手写单链表(数组)(Java)

import java.util.*; import java.io.*;class Main {static int[] e new int[100010];// 存储值static int[] ne new int[100010];// 存储下一个节点的地址&#xff0c;充当指针static int head -1;// head&#xff1a;表示头节点的下标&#xff0c;NULL表示为-1&#xff08…

数据结构之双链表(数组模拟)(Java)

import java.util.*;class Main {static int[] e new int[100010];static int[] l new int[100010];static int[] r new int[100010];static int idx;static Scanner in new Scanner(System.in);// 0:左端点 1:右端点static void init(){r[0] 1;l[1] 0;idx 2;}// 只要实…

C/S和B/S架构介绍

1.系统架构包括哪些形式&#xff1f; C/S架构B/S架构 2.什么是C/S架构&#xff1f; 说白了就是客户端/服务端&#xff0c;我们需要安装特定的客户端软卷&#xff0c;例如&#xff1a;QQ。 C/S架构的优缺点是什么? 优点&#xff1a; 速度快&#xff08;软件中的数据大部分都是…