Java任务:修改用户密码
来自CloudWiki
任务描述:修改用户密码
如图7-2所示,用户登录成功后还可以根据需要选择自己需要的服务,如修改密码,查询图书等。本节先来完成密码修改,下节内容将完成图书查询。
图7-2 修改密码
前情回顾
用户数据接口UserDao
package dao; import entity.User; public interface UserDao { public void addUser(User u);//添加用户 public void queryUser( );//查询用户 public boolean hasUser(String name);//查询某个用户是否存在 public boolean verify(String name, String pwd);//验证用户名和密码是否一致 }
实现思路
- 我们之前已经定义了一个UserDao接口。
- 现在我们用MYSQL数据库来实现这个接口。
任务实现
创建测试数据
接下来我们在 MySQL 中创建 cloud 数据库,并创建 user 数据表,表结构如下:
mysql> create database cloud; Query OK, 1 row affected (0.00 sec) mysql> use cloud; Database changed mysql> CREATE TABLE IF NOT EXISTS `user`( `id` INT UNSIGNED AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL, `password` VARCHAR(40) NOT NULL, PRIMARY KEY ( `id` ) )ENGINE=InnoDB DEFAULT CHARSET=utf8; mysql> CREATE UNIQUE INDEX uname on user(name); Query OK, 0 rows affected (0.25 sec) Records: 0 Duplicates: 0 Warnings: 0
插入一些数据:
mysql> INSERT INTO `user` (name,password) VALUES ('ma', '123456'); Query OK, 1 row affected (0.12 sec) mysql> INSERT INTO `user` (name,password) VALUES ('ma', '123457'); ERROR 1062 (23000): Duplicate entry 'ma' for key 2
</nowiki>
程序代码
package dao; import java.sql.*; import entity.User; public class UserDaoSQL implements UserDao{ // JDBC 驱动名及数据库 URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost:3306/cloud?characterEncoding=utf8"; // 数据库的用户名与密码,需要根据自己的设置 static final String USER = "root"; static final String PASS = "000000"; public UserDaoSQL(){ } /** * 连接数据库 * @param 值为空 * @return Connection 建立的数据库连接 */ private static Connection getConn() { Connection conn = null; try { Class.forName(JDBC_DRIVER); //classLoader,加载对应驱动 conn = (Connection) DriverManager.getConnection(DB_URL, USER, PASS); System.out.println("MySQL连接成功!"); } catch (ClassNotFoundException e) { System.out.println(e.getMessage()); } catch (SQLException e) { System.out.println(e.getMessage()); } return conn; } /** * 向数据库中添加用户 * @param user,要添加的用户 * @return 返回值为空 */ public void addUser(User user){//添加用户 Connection conn = getConn(); String sql = "insert into user (name,password) values(?,?)"; PreparedStatement pstmt; try { pstmt = (PreparedStatement) conn.prepareStatement(sql); pstmt.setString(1, user.getName()); pstmt.setString(2, user.getPassword()); //pstmt.setInt(2, user.getAge()); pstmt.setDate pstmt.executeUpdate(); pstmt.close(); conn.close(); } catch (SQLException e) { System.out.println(e.getMessage()); } } /** * 向数据库中查询所有用户 * @param 值为空 * @return 值为空 */ public void queryUser( ){//查询用户 Connection conn = getConn(); String sql = "select * from user"; PreparedStatement pstmt; try { pstmt = (PreparedStatement)conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery();//执行查询 int col = rs.getMetaData().getColumnCount();//获取字段数 System.out.println("============================"); while (rs.next()) { for (int i = 1; i <= col; i++) { System.out.print(rs.getString(i) + "\t"); if ((i == 2) && (rs.getString(i).length() < 8)) {//此行仅仅是为了显示更好看,可以删去 System.out.print("\t"); } } System.out.println(""); } System.out.println("============================"); } catch (SQLException e) { System.out.println(e.getMessage()); } } /** * 验证用户名是否存在 * @param name,用户名 * @return 布尔值 */ public boolean hasUser(String name){//查询某个用户是否存在 boolean success=false;//标记验证是否成功 try { Connection con = getConn(); String sql = "select * from user where name=? "; PreparedStatement pstmt = (PreparedStatement) con.prepareStatement(sql); pstmt.setString(1, name); ResultSet rs = pstmt.executeQuery();//执行查询 if(rs.next()) { //System.out.println("欢迎" + rs.getString("name")); success=true; } pstmt.close(); con.close(); }catch (SQLException e) { System.out.println(e.getMessage()); } return success; } /** * 验证用户名和密码是否正确 * @param usename,用户名 * @param password,密码 * @return 建立的数据库连接 */ public boolean verify(String username, String password) { boolean success=false;//标记验证是否成功 try { Connection con = getConn(); String sql = "select * from user where name=? and password=?"; PreparedStatement pstmt = (PreparedStatement) con.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, password); ResultSet rs = pstmt.executeQuery();//执行查询 if(rs.next()) { //System.out.println("欢迎" + rs.getString("name")); success=true; } pstmt.close(); con.close(); }catch (SQLException e) { System.out.println(e.getMessage()); } return success; } public static void main(String[] args) { getConn(); UserDaoSQL uds =new UserDaoSQL(); uds.verify("ma","123456"); User u1=new User("zhangyi","456");//这里可能会遇到构造方法参数不符的问题,重新修改一下构造方法 uds.addUser(u1); System.out.println(uds.hasUser(u1.getName())); uds.queryUser(); System.out.println("Goodbye!"); } }
其他类
User类:
package entity; import service.*; public class User { private String id; //用户登录账号 private String name; //用户名-真实姓名 private String password;//用户登录密码 private CartService cart = new CartService(); //用户的购物车 /** * 无参构造函数 */ public User() { } /** * 带参构造函数 * * * @param name * @param password */ public User(String name, String password) { this(); this.name = name; this.password = password; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public CartService getCart() { return cart; } @Override public String toString() { return "用户编号:" + this.id + " | 用户姓名:" + this.name; } }
返回 Java程序设计