首页 > 数据库 >登录注册java版:结合mysql数据库

登录注册java版:结合mysql数据库

时间:2024-08-21 21:38:12浏览次数:10  
标签:java String 数据库 sql System mysql println new out

package com.shujia.day18.logindemo;

import com.shujia.day18.utils.MysqlTool;

import java.io.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Properties;
import java.util.Scanner;

/*
    登录注册java版:结合mysql数据库

 */
public class IOTest3 {
    //TODO: 自己完善注册和修改的功能
    private static Scanner sc = new Scanner(System.in);


    public static void init() {
        System.out.println("=============== ^_^ 欢迎进入魏一民婚恋介绍网站 ^_^ ==================");

        System.out.println("1.登录  2.注册  3.修改  4.注销");
        System.out.print("请输入您的操作编号:");
        int choice = sc.nextInt();
        switch (choice) {
            case 1:
                login();
                break;
            case 2:
                regeist();
                break;
            case 3:
                update();
                break;
            default:
                System.out.println("您的输入有误!");
                break;
        }
    }

    public static void update() {
        //查询所有的用户
        ArrayList<User> allUsers = getAllUsers();

        System.out.println("请输入您需要修改的用户名:");
        String name = sc.next();

        //查询用户是否存在
        User user = getUserByName(name);
        if(user!=null){
            for(int i=0;i<allUsers.size();i++){
                User u = allUsers.get(i);
                if(u.getName().equals(name)){
                    allUsers.remove(u);
                }
            }

            System.out.println("请选择您要修改的内容:1.姓名   2.密码");
            int choice = sc.nextInt();
            switch (choice){
                case 1:
                    System.out.println("请输入新名称:");
                    String newName = sc.next();
                    user.setName(newName);
                    break;
                case 2:
                    System.out.println("请输入新密码:");
                    String newPwd = sc.next();
                    user.setPassword(newPwd);
                    break;
                default:
                    System.out.println("无效输入!");
                    break;
            }
        }else {
            return;
        }

        //将修改后用户添加到集合中
        allUsers.add(user);

        BufferedWriter bw= null;
        try {
            //创建字符缓冲输出流
            bw = new BufferedWriter(new FileWriter("src/com/shujia/day17/data/users.txt"));
            for (User allUser : allUsers) {
                bw.write(allUser.getName()+","+allUser.getPassword());
                bw.newLine();
                bw.flush();
            }

            System.out.println("用户修改成功!");

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(bw!=null){
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }



    }

    public static User getUserByName(String name) {
        BufferedReader br = null;
        boolean flag = true;

        User user = null;

        try {
            //创建字符缓冲输入流对象
            //public FileReader(File file)
            File file = new File("src/com/shujia/day17/data/users.txt");
            //判断用户文件中是否用用户
            if (file.length() > 0) {
                br = new BufferedReader(new FileReader(file));
                String line = null;
                while ((line = br.readLine()) != null) {
                    //魏一民,123456
                    String name1 = line.split(",")[0];
                    String password1 = line.split(",")[1];
                    //判断用户是否与登录的用户一样
                    if (name1.equals(name)) {
                        flag = false;
                        user = new User(name1,password1);
                        break;
                    }
                }

                if (flag) {
                    System.out.println("该用户未进行注册!");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return user;
    }

    public static void regeist() {
        System.out.println("----------------- 欢迎注册魏一民婚恋介绍网站 --------------------");
        ArrayList<User> allUsers = getAllUsers();
        String password = null;
        BufferedWriter bw = null;

        System.out.print("请输入您的用户名:");
        String name = sc.next();
        for (User user : allUsers) {
            if (user.getName().equals(name)) {
                System.out.println("该用户名已被使用!");
                return; // 方法已经结束了
            }
        }

        System.out.println("请设置账户密码:");
        password = sc.next();

        try {
            //将用户名和密码写到文件中
            bw = new BufferedWriter(new FileWriter("src/com/shujia/day17/data/users.txt", true));

            bw.newLine();
            bw.write(name + "," + password);
            bw.flush();
            System.out.println("用户注册成功!");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bw != null) {
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static ArrayList<User> getAllUsers() {
        BufferedReader br = null;
        //创建一个ArrList集合,用户存储读取到用户
        ArrayList<User> users = new ArrayList<>(); // 新创建的集合中元素个数是0
        try {
            //创建字符缓冲输入流对象
            //public FileReader(File file)
            File file = new File("src/com/shujia/day17/data/users.txt");
            //判断用户文件中是否用用户
            if (file.length() > 0) {
                br = new BufferedReader(new FileReader(file));
                String line = null;
                while ((line = br.readLine()) != null) {
                    //魏一民,123456
                    String name1 = line.split(",")[0];
                    String password1 = line.split(",")[1];
                    //判断用户是否与登录的用户一样
                    users.add(new User(name1, password1));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return users;
    }


    public static void login() {
        try {
            Scanner sc2 = new Scanner(System.in);
            System.out.print("请输入您的用户名:");
            String name = sc2.nextLine();
            System.out.print("请输入您的密码:");
            String password = sc2.nextLine();

            //去数据库中查询用户数据,若查到结果集是有数据的
//        String url = "jdbc:mysql://192.168.136.100:3306/bigdata31?useUnicode=true&characterEncoding=utf-8&useSSL=false";
//        String username2 = "root";
//        String password2 = "123456";
            //读取配置文件,获取键对应的值
            //创建Properties类对象
            Properties properties = new Properties();
            //指定要读取的配置文件
            properties.load(new BufferedReader(new FileReader("src/com/shujia/day18/confs/info.properties")));
            //getProperty()  通过键获取对应的值
            String url = properties.getProperty("url");
            String username2 = properties.getProperty("user");
            String password2 = properties.getProperty("password");
            Connection conn = MysqlTool.getConnection(url, username2, password2);
            System.out.println("成功获取与数据库的链接对象:"+conn);

            /**
             *  普通的Statement数据库操作对象,会存在sql注入的问题
             *  原因是因为先进行sql拼接的,然后再做解析,会将sql中一些本来应该是值的内容解析成sql中的语法了
             *
             */
//            Statement state = conn.createStatement();
//            //select * from users where username='小虎' and password='123456';
//            //select * from users where username='小虎' and password='123 345'
//            //select * from users where username='小虎' and password='qwew' or '1'='1'
//            String sql = "select * from users where username='" + name + "' and password='" + password + "'";
//            System.out.println(sql);
//            ResultSet resultSet = state.executeQuery(sql);


            /**
             *  要想解决sql注入的问题,就不能使用普通的Statement数据库操作对象,改用预编译对象
             */
            PreparedStatement prepareStatement = conn.prepareStatement("select * from users where username=? and password=?");
            //传?的值
            prepareStatement.setString(1,name);
            prepareStatement.setString(2,password);
            //执行sql语句
            ResultSet resultSet = prepareStatement.executeQuery();

            if(resultSet.next()){
                System.out.println("登录成功!!");
            }else {
                System.out.println("登录失败!!");
            }

        }catch (Exception e){
            e.printStackTrace();
        }
    }


    public static void main(String[] args) {
        init();

    }
}

标签:java,String,数据库,sql,System,mysql,println,new,out
From: https://www.cnblogs.com/qiwei-bigdata/p/18372608

相关文章

  • 基于JAVA的高校竞赛和考级查询系统论文
    摘   要传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,竞赛信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大用户的需求,因此就应运而生出相应的高校竞赛和考级查询系......
  • java变量定义与数据类型
    变量:在java程序运行过程中,其值可以发送改变的量定义变量的语句格式:数据类型变量名=初始化值;使用变量的注意事项:1、使用基本数据类型的变量,实际上使用的是变量中存储的值2、在同一作用域(同一个大括号)中,变量名不能重复3、变量名是区分大小写的4、java中整数默认是int类型......
  • Java泛型里的Intersection Type
    IntersectionType直译是叫交集类型,语法:&示例写法publicclassMyClass{publicvoidhello(){System.out.println("hello");}}interfaceMyInteface{//...defaultvoidworld(){Syst......
  • Java毕业设计作品(98):基于thymeleaf前后端分离 体育赛事购票系统设计与实现
      博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书......
  • JAVA接口
    JAVA接口目录JAVA接口1接口定义2接口与类相似点:3接口与类的区别:4接口特性5抽象类和接口的区别6接口中默认方法7接口中静态方法8接口的多继承接口的声明1接口定义接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类......
  • JAVA学习之异常
    一、异常的概念    在Java编程中,异常是指在程序执行过程中可能发生的错误或问题,这些问题可能会导致程序无法继续正常运行,异常可以分为两种类型:编译时异常和运行时异常。1.编译时异常是在编译阶段被检测到的异常,程序员在代码中必须显示地处理这些异常,否则无法通过编......
  • Java中static的用法
    目录1.静态变量(StaticVariables)2.静态方法(StaticMethods)3.静态代码块(StaticBlocks)4.静态内部类(StaticNestedClasses)5.执行顺序6.注意事项在Java中,static关键字有几个重要的用途,主要用于定义类的静态成员,如静态变量、静态方法和静态代码块。以下是对这些用......
  • Java中关键字static的学习
    static关键字目录static关键字静态变量(静态成员变量)静态方法静态初始化块静态内部类静态导入在Java中,static关键字是一个非常重要的修饰符,它主要用于创建静态变量、静态方法、静态初始化块、静态内部类以及静态导入。使用static关键字的主要目的是为了实现共享,即被static修饰的......
  • 高级java每日一道面试题-2024年8月21日-框架篇[Spring篇]-使用IOC容器应该注意哪些?
    如果有遗漏,评论区告诉我进行补充面试官:使用IOC容器应该注意哪些?我回答:1.理解IOC的基本概念控制反转:在传统的编程模式中,程序会主动控制依赖关系的创建和管理。而在IoC容器中,这种控制权被反转给了容器本身。程序员只需要声明依赖关系,而由容器负责实例化和注入这些依......
  • java如何判断一个列表中是否存在大于1000的数字
    个人名片......