Java任务:用户添加查询(MySql预编译

来自CloudWiki
跳转至: 导航搜索

任务描述:用户登录

如图7-1所示,运用JDBC组件实现用户登录功能;并根据登录成功与否,作出提示。

Java7-1.png

图7-1 用户登录

任务准备

加载指定数据库的驱动程序

Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到jar库文件,然后在对应的项目中导入该库文件。

你可以从群邮件里下载MySQL驱动 jar 包:mysql-connector-java-5.1.39-bin.jar

导入数据库驱动程序

具体参见 Eclipse导入数据库驱动程序

创建测试数据

接下来我们在 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>

接口介绍

假设项目与用户有关的操作接口UserDao,前面我们用HashMap实现了这个接口,

现在我们用对数据库的操作来实现这个接口。

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);//验证用户名和密码是否一致
	  
}

接口的实现类

创建实现类UserDaoSQL

UserDaoSQL:

public class UserDaoSQL implements UserDao{
	// JDBC 驱动名及数据库 URL
	static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
	static final String DB_URL = "jdbc:mysql://10.0.0.30:3306/cloud?characterEncoding=utf8";
	// 数据库的用户名与密码,需要根据自己的设置
	static final String USER = "root";
    static final String PASS = "000000";
    Connection conn;
	
    public UserDaoSQL(){
    	 
    }

建立连接函数

 
 /**
	   * 连接数据库
	   * @param 值为空
	   * @return Connection 建立的数据库连接
	   */
	private boolean getConn() {     
     
    	//Connection conn = null;       
        try {
            Class.forName(JDBC_DRIVER); //classLoader,加载对应驱动
            this.conn = (Connection) DriverManager.getConnection(DB_URL, USER, PASS);
            System.out.println("MySQL连接成功!");
        } catch (ClassNotFoundException e) {
        	System.out.println(e.getMessage());
        	return false;
        } catch (SQLException e) {
        	System.out.println(e.getMessage());
        	return false;
        }
        return true;
   }

在类的构造函数仲添加此函数的调用:

 public UserDaoSQL(){
    	 this.getConn();
    }

编写addUser()方法

	

  /**
	   * 向数据库中添加用户
	   * @param user,要添加的用户
	   * @return 返回值为空
	   */
	public void addUser(User user){//添加用户     		
        
        PreparedStatement pstmt;
        
        try {
        	//1. 编写sql模板,绑定到预编译语句上
        	String sql = "insert into user (name,password) values(?,?)";
            pstmt = (PreparedStatement) conn.prepareStatement(sql);
            
            //2.向模板上填入值
            pstmt.setString(1, user.getName());
            pstmt.setString(2, user.getPwd());  //pstmt.setInt(2, user.getAge()); pstmt.setDate  
            
            
            //3.执行sql语句
            int i = pstmt.executeUpdate();
            if(i!=0){
            	System.out.println(user.getName()+"注册成功!");
	        }else {
	        	System.out.println(user.getName()+"注册失败!");
	        }
            pstmt.close();
            
        } catch (SQLException e) {
        	System.out.println(e.getMessage());
        }
        
	}



编写hasUser方法

	  /**
	   * 验证用户名是否存在
	   * @param name,用户名	 
	   * @return 布尔值
	   */
	  public boolean hasUser(String name){//查询某个用户是否存在
		  boolean success=false;//标记验证是否成功          
		
	    	try { 
	    		   		
	    		String sql = "select * from user where name=? ";
	    		PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);	    		
	            pstmt.setString(1, name);
	            
	            ResultSet rs = pstmt.executeQuery();//执行查询    		
	    		
	    		if(rs.next()) {  
	    			//System.out.println("欢迎" + rs.getString("name"));
	    			success=true;
	    		} 
	    		pstmt.close();           
	            
	    	 }catch (SQLException e) {
	             System.out.println(e.getMessage());
	         }
	        	 
	    	return success;   
  
	  } 

编写queryUser( )方法

	 /**
	   * 向数据库中查询所有用户
	   * @param 值为空
	   * @return 值为空
	   */
	  public void queryUser( ){//查询用户		      
		  
	      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());
	        }
	  }

编写verify()方法


/**
	   * 验证用户名和密码是否正确
	   * @param usename,用户名
	   * @param password,密码
	   * @return 建立的数据库连接
	   */
	 public   boolean verify(String username, String password) {
		 boolean success=false;
		
		 try { 
		    		
		    		ResultSet rs = null;   //建立一个空的结果集

		                //1.创建PreparedStatement 对象,让它与一条SQL模板绑定;
		    		String sql = "select * from user where name=? and password=?";
		    		PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
		    		

		                //使用2. setXXX()系列方法为sql命令设置值
		                pstmt.setString(1, username);//
		                pstmt.setString(2, password);  //setInt,setFloat

		                //3.执行查询 
		                rs = pstmt.executeQuery();//   		
		    		
		    		if(rs.next()) {  
		    			success=true;
		    		} else {  
		    			success=false;
		    		}
		    		pstmt.close();
		           
		}catch (SQLException e) {
		            System.out.println(e.getMessage());
		}
		
		return success;	    	
		    
	 }
	 


编写测试类

TestUser:

package main;

import java.util.Scanner;

import dao.UserDao;
import dao.UserDaoSQL;
import entity.User;

public class TestUser {
	public static void main(String[] args) throws Exception{
		 
		 UserDao uds =new UserDaoSQL();
		 
		 /* 用户登录操作 */
		 boolean success;
		 String name,pwd;
		 Scanner sc = new Scanner(System.in);
		 do {
		    System.out.println("请输入用户名:");
	    	name =sc.next();
	        System.out.println("请输入密码:");
	        pwd = sc.next();
	        success=uds.verify(name, pwd);
	        if(success) {
		    	 System.out.println("登录成功!");
		     }else {
		    	 System.out.println("登录失败!");
		     }
		 }while(success!=true);
	     
	     
	     /* 添加新用户 */
	     do {
	    	System.out.println("新用户注册:");
	    	System.out.println("请输入新用户名:");
	    	name =sc.next();
	        System.out.println("请输入新密码:");
	        pwd = sc.next();
	        
	     }while(uds.hasUser(name));//验证此用户名是否存在,否则,重复输入     
	     
	     User u1=new User(name,pwd);
	     uds.addUser(u1);
	     
	     
	     /*查询 所有用户 */
	     uds.queryUser();
	     
	     System.out.println("Goodbye!");
	     
	 }
}


用到的其他类

User:

package entity;

public class User {
	protected String id;
    protected String name;
    protected String pwd;
    
    public User() {
    	
    }
    public User(String n,String p) {
    	this.name = n;
    	this.pwd = p;
    }
    public void setName(String name) {
    	this.name = name;
    }
    public void setPwd(String pwd) {
    	this.pwd = pwd;
    }
    public String getName() {
    	return this.name;
    }
    public String getPwd() {
    	return this.pwd;
    }
 
    public String toString() {
    	String s="";
    	s= "姓名:"+this.name + " 密码:" +this.pwd;
    	return s;
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		User u1 =  new User();
		u1.setName("wangli");u1.setPwd("000000");
		System.out.println("姓名: "+u1.getName()+" 密码: "+u1.getPwd());
		User u2 = new User("chenming","123456");
		System.out.println(u2.toString());     

	}

}