“Java任务:修改用户密码”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
程序代码
程序代码
 
(未显示同一用户的1个中间版本)
第26行: 第26行:
 
*现在我们用MYSQL数据库来实现这个接口。
 
*现在我们用MYSQL数据库来实现这个接口。
 
==任务实现==
 
==任务实现==
 +
===创建测试数据===
 +
 +
接下来我们在 MySQL 中创建 cloud 数据库,并创建 user 数据表,表结构如下:
 +
 +
<nowiki>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
 +
</nowiki>
 +
 +
插入一些数据:
 +
 +
<nowiki>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>
 +
 +
</nowiki>
 +
 
===程序代码===
 
===程序代码===
 
  <nowiki>package dao;
 
  <nowiki>package dao;
第36行: 第67行:
 
// JDBC 驱动名及数据库 URL
 
// JDBC 驱动名及数据库 URL
 
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";   
 
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";   
static final String DB_URL = "jdbc:mysql://localhost:3306/cloud";
+
static final String DB_URL = "jdbc:mysql://localhost:3306/cloud?characterEncoding=utf8";
 
// 数据库的用户名与密码,需要根据自己的设置
 
// 数据库的用户名与密码,需要根据自己的设置
 
static final String USER = "root";
 
static final String USER = "root";

2018年6月9日 (六) 01:10的最新版本

任务描述:修改用户密码

如图7-2所示,用户登录成功后还可以根据需要选择自己需要的服务,如修改密码,查询图书等。本节先来完成密码修改,下节内容将完成图书查询。 Java7-2.png

图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程序设计