引言
我们还是用之前使用的方法,只不过这次是为了实现密码修改功能,在4个包除了vo包,其余我们都需要修改增加。
功能函数包(增删改查)—dao
在我们对数据库进行简单操作时,最主要的数据操作就是增加、删除、修改、查询,我们之前已经写了用户名查询函数,用来实现对数据库的操作,那么现在我们分析一下,密码修改涉及密码查询是否输入正确和修改功能。
我们可以看到在两个函数中sql语句,分别对应密码查询和密码修改功能。当然在用java使用数据库语句进行操作时,我们一定要连接数据库,调用util包DBUtil类中连接函数来连接数据库。
其他功能函数包—util
在util中,我们增加MD5解密,为了登录安全问题,这里增加MD5解密,那么同时数据库中也需要更改增加数据,密码需加密。(这里是为大家提供的进阶性操作,我们暂时先用简单方法来实现密码修改。)
主函数界面包—ui
基于控制台的应用程序,允许用户更改他们的密码。它提示用户输入其用户名并验证其是否存在,检查当前密码,确保新密码满足复杂性要求,并通过重新输入新密码来确认新密码,然后再使用新密码更新数据库。这是一个非常简单的逻辑,我们对应代码。这里最后记得更新到数据库中
对于密码修改要求,我们为了保证密码复杂性,设置限制,密码长度不少于6个字符,至少有一个小写字母,至少有一个大写字母,至少一个数字。
结果展示
我们进行测试修改密码,结束后刷新数据库,发现存储的密码已经发生变化。
完整代码
Driver
package ui;
import vo.User;
import java.util.Scanner;
import static dao.UserDAO.*;
import static util.Encrypt.MD5;
public class Driver {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户名:");
String userName = scanner.nextLine();
while (!isUserNameExit(userName)) {
System.out.println("该用户不存在,请重新输入");
userName = scanner.nextLine();
}
System.out.println("请输入当前用户的原密码:");
String oldPassword = scanner.nextLine();
while (!isOldPasswordExit(oldPassword)) {
System.out.println("原密码输入不正确,请重新输入");
oldPassword = scanner.nextLine();
}
System.out.println("请设置新的密码:");
String newPassword = scanner.nextLine();
while (!isDifficult(newPassword)) {
System.out.println("您的密码不符合复杂性要求(密码长度不少于6个字符,至少有一个小写字母,至少有一个大写字母,至少一个数字)");
System.out.println("请重新输入:");
newPassword = scanner.nextLine();
}
System.out.println("请输入确认密码:");
String AgainPassword = scanner.nextLine();
while(!AgainPassword.equals(newPassword)) {
System.out.println("两次输入的密码必须一致,请重新输入确认密码:");
AgainPassword = scanner.nextLine();
}
// 修改数据库中的用户表
update(userName,AgainPassword);
System.out.println("您已成功修改密码,请谨记,退出程序");
System.exit(0);
}
private static boolean isDifficult(String newPassword) {
return newPassword.length() >= 6 &&
newPassword.matches(".*[a-z].*") &&
newPassword.matches(".*[A-Z].*") &&
newPassword.matches(".*\\d.*");
}
private static boolean isOldPasswordExit(String oldPassword) {
User password = queryPassword(oldPassword);
return password!=null && oldPassword.equals(password.getPassword());
}
private static boolean isUserNameExit(String userName) {
User user = queryUserName(userName);
return user != null && userName.equals(user.getUserName());
}
}
Encrypt
package util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Encrypt {
public static String MD5(String str) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(str.getBytes());
byte[] b = md.digest();
StringBuffer sb = new StringBuffer();
for (byte c : b) {
int val = ((int) c) & 0xff;
if (val < 16)
sb.append("0");
sb.append(Integer.toHexString(val));
}
return sb.toString().toUpperCase();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
}
UserDAO
package dao;
import util.DBUtil;
import vo.User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDAO {
public static User queryUserName(String userName) {
//获取链接
Connection con = DBUtil.getConnection();
//创建语句
String sql = "select * from t_yonghu where yonghuming = ?";
PreparedStatement pst = null;
User user = null;
try {
pst = con.prepareStatement(sql);
//执行语句
pst.setString(1,userName);
ResultSet rs = pst.executeQuery();
//处理结果 将rs存放在user对象中
if(rs.next()) {
user = new User();
user.setUserName(rs.getString("yonghuming"));
user.setPassword(rs.getString("mima"));
user.setChrName(rs.getString("xingming"));
user.setRole(rs.getString("juese"));
}
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
//释放资源
DBUtil.close(con,pst);
}
return user;
}
public static User queryPassword(String password) {
//获取链接
Connection con = DBUtil.getConnection();
//创建语句
String sql = "select * from t_yonghu where mima = ?";
PreparedStatement pst = null;
User user = null;
try {
pst = con.prepareStatement(sql);
//执行语句
pst.setString(1,password);
ResultSet rs = pst.executeQuery();
//处理结果 将rs存放在user对象中
if(rs.next()) {
user = new User();
user.setUserName(rs.getString("yonghuming"));
user.setPassword(rs.getString("mima"));
user.setChrName(rs.getString("xingming"));
user.setRole(rs.getString("juese"));
}
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
//释放资源
DBUtil.close(con,pst);
}
return user;
}
public static void update(String userName, String newPassword) {
//获取链接
Connection con = DBUtil.getConnection();
//创建语句
String sql = "UPDATE t_yonghu SET mima = ? WHERE yonghuming = ?";
PreparedStatement pst = null;
try {
pst = con.prepareStatement(sql);
//设置参数
pst.setString(1, newPassword);
pst.setString(2, userName);
//执行更新
pst.executeUpdate();
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
//释放资源
DBUtil.close(con, pst);
}
}
}
其余相关代码User和DBUtil请参考前面的博客。Java超市收银系统(一、用户登录)-CSDN博客
标签:Java,String,rs,System,超市,密码,user,收银,pst From: https://blog.csdn.net/m0_74325713/article/details/140969490