2020-10-23

3 篇文章 0 订阅

Java–JDBC经典练习题

T_User表:
字段名称–说明–数据类型–约束 备注
id --编号 --int–主键
userName–用户名 --varchar(50)-- 唯一、不允许空
pwd --密码–varchar(50) --不允许空
email–邮箱–varchar(50)-- 唯一、不允许为空
数据示例:
id UserName Pwd Email
2 Jerry 888888 Jerry@126.com

1.实现用户的注册功能
2.实现用户的登陆功能
3.实现用户的修改,但要考虑用户是否真实存在
4.实现用户的删除功能。
5.实现用户的查询功能,查询全部及根据userName名去查询
6.通过Scanner实现人机交互。
流程如下,先显示菜单,提示用户选择登录还是注册,选择注册时,让用户输入用户名以及密码、邮箱,输入用户名时判断此用户是否存在,如果存在则不能完成注册,不存在则注册成功;选择登录之后输入用户名以及密码判断用户名是否存在,不存在给出提示,存在的话判断密码是否正确,如果密码正确则进行登录,执行对用户的查询、删除、修改操作

package com.rang.excercise;

public class User {
	private int id;
	private String username;
	private String pwd;
	private String email;

	public User() {
	}

	public User(int id, String username, String pwd, String email) {
		this.id = id;
		this.username = username;
		this.pwd = pwd;
		this.email = email;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	@Override
	public String toString() {
		return "编号:"+this.getId()+",姓名:"+this.getUsername()+",邮件:"+this.getEmail();
	}
}

package com.rang.excercise;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class UserDao implements BaseDao<User> {

    public UserDao() {
    }

    @Override
    public void insert(User t) {
        String sql = "insert into t_user(username,pwd,email) values(?,?,?);";
        DbTools.executeUpdate(sql, t.getUsername(),t.getPwd(),t.getEmail());
    }

    @Override
    public void update(User t) {
        String sql = "update t_user set username=?,pwd=?,email=? where id=?";
        DbTools.executeUpdate(sql,  t.getUsername(),t.getPwd(),t.getEmail(),t.getId());
    }

    @Override
    public void delete(User t) {
        String sql = "delete from t_user where id=?";
        DbTools.executeUpdate(sql, t.getId());
    }

    @Override
    public User selectById(User t) {
        User user = null;
        String sql = "select * from t_user where id=?";
        List<Object[]> list = DbTools.executeQuery(sql, t.getId());
        if (list.size() > 0) {
            Object[] objs = list.get(0);
            int id = (Integer) objs[0];
            String username = (String) objs[1];
            String pwd = (String) objs[2];
            String email=(String) objs[3];
            user =new User(id,username,pwd,email);
        }
        return user;
    }

    @Override
    public List<User> selectAll() {
        List<User> users = new ArrayList<>();
		String sql = "select * from t_user";
      	List<Object[]> list=DbTools.executeQuery(sql,null);
		if (list.size() > 0) {
			for(int i=0;i<list.size();i++){
				Object[] objs = list.get(i);
                int id = (Integer) objs[0];
                String username = (String) objs[1];
                String pwd = (String) objs[2];
                String email=(String) objs[3];
                User user =new User(id,username,pwd,email);
				users.add(user);
			}
		}
        return users;
    }
    public User selectUserByUserName(String key){
        User user = null;
        String sql = "select * from t_user where username=? ";
        List<Object[]> list = DbTools.executeQuery(sql, key);
        if (list.size() > 0) {
            Object[] objs = list.get(0);
            int id = (Integer) objs[0];
            String username = (String) objs[1];
            String pwd = (String) objs[2];
            String email=(String) objs[3];
            user =new User(id,username,pwd,email);
        }
        return user;
    }
    public User selectUserByEmail(String key){
        User user = null;
        String sql = "select * from t_user where email=? ";
        List<Object[]> list = DbTools.executeQuery(sql, key);
        if (list.size() > 0) {
            Object[] objs = list.get(0);
            int id = (Integer) objs[0];
            String username = (String) objs[1];
            String pwd = (String) objs[2];
            String email=(String) objs[3];
            user =new User(id,username,pwd,email);
        }
        return user;
    }
}

package com.rang.excercise;

import java.util.List;

public interface BaseDao<T> {
	public abstract void insert(T t);
	public abstract void update(T t);
	public abstract void delete(T t);
	public abstract T selectById(T t);
	public abstract List<T> selectAll();
}

package com.rang.excercise;

import java.sql.*;

import java.util.ArrayList;
import java.util.List;

public class DbTools {
    //URL
    private  static  final String URL="jdbc:mysql://localhost:3306/test";
    //user
    private static final String USER="root";
    //pwd
    private static final String PWD="root";
    //PreparedStatement 对象
    private static PreparedStatement preparedStatement=null;
    //ResultSet对象
    private static ResultSet resultSet=null;
    //connection对象
    private  static Connection connection=null;
    //编写一个静态块用于加载驱动
    static  {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection()  {
        if (connection == null) {
            try {
                connection = DriverManager.getConnection(URL, USER, PWD);
                connection.setAutoCommit(false);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return  connection;
    }
    //insert,update,delete
    public static void executeUpdate(String sql,Object...objs){
        //获取connection 对象
        connection=getConnection();
        //获取PreparedStatement 对象
        try {
            preparedStatement=connection.prepareStatement(sql);
            if(objs!=null){
                for(int i=0;i<objs.length;i++){
                    preparedStatement.setObject(i+1,objs[i]);
                }
            }
            preparedStatement.executeUpdate();
            commit();
        } catch (SQLException e) {
            e.printStackTrace();
            rollback();
        }finally {
            close();
        }
    }
    //select方法
    public static List<Object[]> executeQuery(String sql,Object...objs){
        List<Object[]> list=new ArrayList<>();
        connection=getConnection();
        try {
            preparedStatement=connection.prepareStatement(sql);
            if(objs!=null&&objs.length>0){
                for(int i=0;i<objs.length;i++){
                    preparedStatement.setObject(i+1,objs[i]);
                }
            }
            resultSet=preparedStatement.executeQuery();
            while(resultSet.next()){
                Object[] datas=new Object[resultSet.getMetaData().getColumnCount()];
                for(int i=0;i<datas.length;i++){
                    datas[i]=resultSet.getObject(i+1);
                }
                list.add(datas);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            close();
        }
        return list;
    }
    //事务提交
    public  static  void commit(){
        if (connection!=null){
            try {
                connection.commit();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    //回滚
    public  static  void rollback(){
        if (connection!=null){
            try {
                connection.rollback();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    //静态方法关闭资源
    public static  void close(){
        if(resultSet!=null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(preparedStatement !=null){
            try {
                preparedStatement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(connection!=null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            connection=null;
        }
    }
}

package com.rang.excercise;

public class Menu {
    public  static void showMenu(){
        System.out.println("欢迎登录XXX系统");
        System.out.println("1.注册");
        System.out.println("2.登录");
        System.out.println("3.退出");
    }
    public  static void showOperator(){
        System.out.println("请选择你要执行的操作:");
        System.out.println("1.修改当前用户");
        System.out.println("2.注销当前用户");
        System.out.println("3.查询用户");
    }
    public static void showSelect(){
        System.out.println("1.按名称查询");
        System.out.println("2.查询全部");
    }
}

package com.rang.excercise;

import java.util.Scanner;

public class Input {
    private Scanner scan=null;
    private UserDao userDao=null;
    public Input(UserDao userDao){
        scan=new Scanner(System.in);
        this.userDao=userDao;
    }
    public String getString(String info){
        System.out.println(info);
        return scan.nextLine();
    }
    public int getInt(String info,String error){
        String str=getString(info);
        while(!str.matches("\\d+")){
            System.out.println(error);
            str=getString(info);
        }
        return Integer.parseInt(str);
    }
    public String getEmail(String info,String error){
        String str=getString(info);
        while(!str.matches("\\w{5,20}@\\w{5,7}(\\.com|\\.cn|\\.net)")){
            System.out.println(error);
            str=getString(info);
        }
        User user=userDao.selectUserByEmail(str);
        if(user!=null){
            str="";
            System.out.println("电子邮件已被占用了!");
        }
        return str;
    }
    public String getUserName(String info){
        String key=getString(info);
        User user=userDao.selectUserByUserName(key);
        if(user!=null){
            System.out.println("用户已存在!!");
            key="";
        }
        return key;
    }

}

package com.rang.excercise;

import java.util.List;

public class Operator {
    private boolean flag;
    private Input in = null;
    private UserDao userDao = new UserDao();

    public Operator() {
        flag = true;
        in = new Input(userDao);
    }

    public void operator() {
        while (flag) {
            Menu.showMenu();
            int n = in.getInt("请选择您要执行的操作", "选择错误,重新选择!");
            switch (n) {
                case 1:
                    String username = in.getUserName("请输入用户名:");
                    if (username.equals("")) {
                        break;
                    }
                    String pwd = in.getString("请输入密码:");
                    String email = in.getEmail("请输入电子邮件:", "格式不正确!");
                    if (email.equals("")) {
                        break;
                    }
                    User user = new User(0, username, pwd, email);
                    userDao.insert(user);
                    break;
                case 2:
                    //获取用户输入的用户名
                    String username1 = in.getString("请输入用户名:");
                    User user1 = userDao.selectUserByUserName(username1);
                    if (user1 == null) {
                        System.out.println("用户名不存在");
                        break;
                    }
                    String pwd1 = in.getString("请输入密码:");
                    if (!pwd1.equals(user1.getPwd())) {
                        System.out.println("密码输入错误!");
                        break;
                    }
                    Menu.showOperator();
                    //获取用户输入的信息
                    int n1 = in.getInt("请选择您要执行的操作:", "选项应该是整数数字");
                    switch (n1) {
                        case 1:
                            //获取用户输入的用户名
                            String username2 = in.getUserName("请输入用户名:");
                            if (username2.equals("")) {
                                username2 = user1.getUsername();
                            }
                            //获取用户输入的密码
                            String pwd2 = in.getString("请输入密码:");
                            //获取用户输入的电子邮件
                            String email2 = in.getEmail("请输入电子邮件:", "电子邮件的格式不正确");
                            if (email2.equals("")) {
                                email2 = user1.getEmail();
                            }
                            user1.setEmail(email2);
                            user1.setPwd(pwd2);
                            user1.setUsername(username2);
                            userDao.update(user1);
                            break;
                        case 2:
                            userDao.delete(user1);
                            break;
                        case 3:
                            Menu.showSelect();
                            int n2 = in.getInt("请选择您要执行的操作:", "选项应该是整数数字");
                            switch (n2) {
                                case 1:
                                    String username3 = in.getString("请输入用户名:");
                                    User user2 = userDao.selectUserByUserName(username3);
                                    if (user2 == null) {
                                        System.out.println("没有此用户");
                                    } else {
                                        System.out.println(user2);
                                    }
                                    break;
                                case 2:
                                    List<User> users = userDao.selectAll();
                                    for (User u : users) {
                                        System.out.println(u);
                                    }
                                    break;

                                default:
                                    System.out.println("没有这个选项");
                                    break;
                            }
                            break;
                        default:
                            System.out.println("没有这个选项");
                            break;
                    }
                    break;
                case 3:
                    System.out.println("系统退出成功!");
                    flag = false;
                    break;
                default:
                    System.out.println("没有此选项");
                    break;
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过Java中的日期时间类 `LocalDate` 和 `LocalDateTime` 来实现该功能。 首先,我们需要将时间段转换为 `LocalDateTime` 对象,然后将时间部分设置为 00:00:00 或 23:59:59,最后遍历每一天,获取每一天的开始时间和结束时间。 以下是代码示例: ```java import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; public class TimeUtils { public static void main(String[] args) { String startStr = "2020-11-20 09:09:09"; String endStr = "2021-10-09 10:10:10"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime start = LocalDateTime.parse(startStr, formatter); LocalDateTime end = LocalDateTime.parse(endStr, formatter); // 将时间部分设置为 00:00:00 或 23:59:59 LocalDateTime startOfDay = start.with(LocalTime.MIN); LocalDateTime endOfDay = end.with(LocalTime.MAX); // 遍历每一天,获取每一天的开始时间和结束时间 LocalDate startDate = startOfDay.toLocalDate(); LocalDate endDate = endOfDay.toLocalDate(); while (!startDate.isAfter(endDate)) { LocalDateTime startOfDayOfDate = startDate.atStartOfDay(); LocalDateTime endOfDayOfDate = startDate.atTime(LocalTime.MAX); System.out.println("Start time of " + startDate + ": " + startOfDayOfDate); System.out.println("End time of " + startDate + ": " + endOfDayOfDate); startDate = startDate.plusDays(1); } } } ``` 输出结果如下: ``` Start time of 2020-11-20: 2020-11-20T00:00 End time of 2020-11-20: 2020-11-20T23:59:59.999999999 Start time of 2020-11-21: 2020-11-21T00:00 End time of 2020-11-21: 2020-11-21T23:59:59.999999999 ... Start time of 2021-10-09: 2021-10-09T00:00 End time of 2021-10-09: 2021-10-09T23:59:59.999999999 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值