Java任务:用户添加查询(MySql)实现

来自CloudWiki
跳转至: 导航搜索


接口介绍

假设项目与用户有关的操作接口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();
    }

查询函数介绍

Statement接口

Statement接口 用于执行静态的sql语句(单次执行),通过 Connection对象创建实例。

例如: Statementstmt=conn.createStatement();//创建Statement对象 其常用方法如下:

executeQuery(sql)方法

executeQuery(sql)方法 执行查询语句,并返回结果集。例如: ResultSetrs= stmt.executeQuery(sql);

用于产生单个结果集(ResultSet)的语句,例如:被执行最多的SELECT 语句。

这个方法被用来执行 SELECT 语句,但也只能执行查询语句,执行后返回代表查询结果的ResultSet对象。

executeUpdate(sql)方法

executeUpdate(sql)方法 执行 DML语句,并返回影响的记录数。例如: intcount= stmt.executeUpdate(sql);

用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。

INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。

executeUpdate 的返回值是一个整数(int),指示受影响的行数(即更新计数) 。 对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。


execute(sql)方法

execute(sql)方法 若sql是查询语句且有结果集,则返回true;若是非查询语句或者没有结果集,则返回 false。例如: booleanflag= stmt.execute(sql);


编写hasUser方法

/**
	   * 验证用户名是否存在
	   * @param name,用户名	 
	   * @return 布尔值
	   */
	  public boolean hasUser(String name){//查询某个用户是否存在
		  boolean success=false;//标记验证是否成功   	
	       
	    	try { 
	    		
	    		Statement stmt = null;  
	    		ResultSet rs = null;       
	    		stmt = conn.createStatement();
	    		String sql = "SELECT * FROM user WHERE " + "name='" + name + 
	                   "'";
	    		rs = stmt.executeQuery(sql);
	    		if(rs.next()) { 
	    			success=true;;
	    		} else {  
	    			success=false;
	    		}
	    	 }	catch (SQLException e) {
	             	System.out.println(e.getMessage());
	         }
	    	return success;   
	  }

编写addUser()方法

	  /**
	   * 向数据库中添加用户
	   * @param user,要添加的用户
	   * @return 返回值为空
	   */
	public void addUser(User user){//添加用户     
      
        try {
        	//Connection conn = getConn();     
        	Statement stmt = null; 
    		     
    		stmt = conn.createStatement();
    		//INSERT INTO `user` (name,password) VALUES ('ma', '123456');
    		String sql = "INSERT INTO `user` (name,password) VALUES ('" + user.getName() + 
                   "', '"+user.getPwd()+"')";
    		int i=stmt.executeUpdate(sql);
    		
    		//conn.close();
        } 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 { 
			 
	    		Statement stmt = null;  
	    		ResultSet rs = null;       
	    		stmt = conn.createStatement();
	    		String sql = "SELECT * FROM user WHERE " + "name='" + username + 
	                   "' and password='" + password + "'";
	    		rs = stmt.executeQuery(sql);
	    		if(rs.next()) { 
	    			success=true;;
	    		} else {  
	    			success=false;
	    		}
	    	 }	catch (SQLException e) {
	             	System.out.println(e.getMessage());
	         }
	    	return success;   
	    }

编写queryUser( )方法

 /**
	   * 向数据库中查询所有用户
	   * @param 值为空
	   * @return 值为空
	   */
	  public void queryUser( ){//查询用户			
	      
	      try {
	    	   // Connection conn = getConn();
	    		Statement stmt = null;  
	    		ResultSet rs = null;       
	    		stmt = conn.createStatement();
	    		String sql = "SELECT * FROM user ";
	    		rs = stmt.executeQuery(sql);
	    		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("============================");
	    		
	            //conn.close();
	        } catch (SQLException e) {
	        	System.out.println(e.getMessage());
	        }
	  }

编写测试类

TestUser:

package main;

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

public class TestUser {
	public static void main(String[] args) throws Exception{
		 
		 UserDao uds =new UserDaoSQL();
		 
	     uds.verify("ma","123456");
	     User u1=new User("zhangwu","456");//这里可能会遇到构造方法参数不符的问题,重新修改一下构造方法
	     uds.addUser(u1);
	     System.out.println(uds.hasUser(u1.getName()));
	     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());     

	}

}