jdbc详解:用户部门管理案例(在部门中对用户进行增删改查)

1问题定义    

  这个程序设计可以对用户信息,部门信息进行增删改查,而且可以通过部门来对用户信息进行增删改查。

2开发工具

  Mysql数据库,eclipse。

3设计过程

3.1流程图

jdbc详解:用户部门管理案例(在部门中对用户进行增删改查)_第1张图片

  3.2思路

   (1)JDBC的步骤:加载JDBC驱动程序 → 建立数据库连接Connection →

创建执行SQL的语句PreparedStatement→ 处理执行结果ResultSet → 释放资源。

   (2)通过部门信息对用户信息进行修改时,应该将这两个表相关联。可以在用户表中定义一个部门编号与部门表进行关联。

   (3)在程序运行成功后,会出现一个初始界面,可以选择登录或者退出系统。登录成功后会有用户管理以及部门管理两个选项,根据需要进行选择。

   (4)dao层是和数据库打交道的,它的实现类里面封装了数据库操作的一些基本方法。在这里我们将对数据库中的数据的增删改查的方法写在这里面。service层是业务层,调用Dao层里面的方法。所以在service层中你可以在需要的时候随时调用dao层中的方法。就是说,按照自己的逻辑在需要的时候调用dao层中的方法。

3.3创建数据库

   在数据库中创建user与dept两个表,表中的名称根据User与Dept类中的属性进行创建,创建完成后在user表中存储一个或多个数据,在程序运行后通过这些数据来连接数据库并且进行数据操作。

3.4连接数据库

    (1)下面是jdbc.properties中的配置:

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/ugrowstock

jdbc.user=root

jdbc.pwd=root

上面几行代码是用来连接mysql数据库的。其中ugrowstock代表数据库的名称。这个程序的数据库是在navicat premium中创建的,先创建了一个mysql的连接,其中用户名和密码都是root,在这个连接名称下面创建了ugrowstock数据库,所以在这里user与pwd配置为root。

(2)导入DbUtils类,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。需要注意的是,在这个封装类中的一行代码:

InputStream is=Thread.currentThread().getContextClassLoader().

getResourceAsStream("com/zxy/jdbc.properties");

表示的是从装载的类路径中取得资源。com/zxy/jdbc.properties是jdbc配置文件的路径。

3.5用户管理界面及功能的实现

   进入用户管理界面,会有对用户信息的增删改查以及返回上一级的功能实现。选择想要实现的功能并输入相应的数字,如下图:

  jdbc详解:用户部门管理案例(在部门中对用户进行增删改查)_第2张图片

     在选择相应功能的时候,service层调用dao层的查询方法,在Menu类中对service层的方法进行调用,就是说分别在service层中new一个dao类的对象,在Menu类中new一个service类的对象。   

  3.5.1查询用户信息

     (1)此时,在Menu类中会调用UserService中的showUserList()方法。


   public void showUserList() throws Exception{
    	List list= uDao.findAll();
    	 System.out.println("查询数据如下:");
System.out.println("id\t\tuserNo\t\tusername\tpwd\t\tdept\tsex\t\tage\t\troloer\t\tremark");
   	 for (int i = 0; i < list.size(); i++) {
			User user=list.get(i); 
			if(user!=null){
	System.out.println(user.getId()+"\t\t"+user.getUserNo()+"\t\t"+us     er.getUserName()+"\t\t"+user.getPwd()+"\t\t"+user.getDepartNo()+"\t"+ user.getSex()+"\t\t"+user.getAge()+"\t\t"+user.getRoloer()+"\t\t"+user.getRemark());		
			}
		}
         }   

 注意,List list= uDao.findAll();表示调用UserDAO中的查询所有用户信息的方法,并且将所得数据交由List保存。通过List接口的get方法取出所保存的数据。

    (2) 下面是UserDAOImpl中的查询所有用户信息的方法:


public List findAll()throws SQLException{
	 String sql="Select * from user";

	 Connection conn= DBUtils.getConnection();
	 PreparedStatement state=conn.prepareStatement(sql);
	
	ResultSet i=state.executeQuery();
	List list=new ArrayList();
	while(i.next()){
	
		User  user=new User();
   	user.setId(i.getInt(1));
   	user.setUserNo(i.getString(2));
   	user.setUserName(i.getString(3));
   	user.setPwd(i.getString(4));
   	user.setDepartNo(i.getString(5));
   	user.setSex(i.getString(6));
   	user.setAge(i.getInt(7));
   	user.setRoloer(i.getString(8));
   	user.setRemark(i.getString(9));	
   	list.add(user);
	}

	DBUtils.close(i, state, conn);
	 return list;
   }

上述代码中的sql语句是查询user表中的所有用户信息。其中用来连接数据库的代码:Connection conn= DBUtils.getConnection();之后就是对sql语句进行预编译:PreparedStatement state=conn.prepareStatement(sql);
executeQuery(String sql):表示运行select语句,返回ResultSet结果集。
所以:ResultSet i=state.executeQuery();
创建一个只能放User类的list对象,通过ResultSet中的getString(int index)方法获得在数据库里是varchar、char等类型的数据对象,并给user赋值,最后添加到list对象中去。
在这里需要特别注意的是User user=new User()这行代码必须放在循环体之中,因为add加进去的是对象的一个引用,对象实例化放在循环外面,你每次都更新了这个引用的值,当然list里面的值都一样的。如果把User user = new User();放到循环里面,每次都生成一个新的对象,更改自身不会对其他元素有影响
   在使用resultset后要依次关闭对象及连接:ResultSet → Statement → Connection。所以:DBUtils.close(i, state, conn);

executeQuery(String sql):表示运行select语句,返回ResultSet结果集。

所以:ResultSeti=state.executeQuery();

创建一个只能放User类的list对象,通过ResultSet中的getString(intindex)方法获得在数据库里是varchar、char等类型的数据对象,并给user赋值,最后添加到list对象中去。

在这里需要特别注意的是Useruser=new User()这行代码必须放在循环体之中,因为add加进去的是对象的一个引用,对象实例化放在循环外面,你每次都更新了这个引用的值,当然list里面的值都一样的。如果把User user = new User();放到循环里面,每次都生成一个新的对象,更改自身不会对其他元素有影响

   在使用resultset后要依次关闭对象及连接:ResultSet → Statement → Connection。所以:DBUtils.close(i,state, conn);

3.5.2添加用户信息
      (1)此时,在Menu类中调用的是UserService中的addUser()方法。方法的实现如下:
public void addUser(Scanner scanner) throws Exception {
		User user=new User();
		System.out.println("请输入要新用户的用户码");
           user.setUserNo(scanner.next());
		System.out.println("请输入要新用户的名字");
		user.setUserName(scanner.next());
		System.out.println("请输入要新用户的密码");
		user.setPwd(scanner.next());
		System.out.println("请输入要新用户的部门编号");
		user.setDepartNo(scanner.next());
		System.out.println("请输入要新用户的性别");
		user.setSex(scanner.next());
		System.out.println("请输入要新用户的年龄");
		user.setAge(scanner.nextInt());
		System.out.println("请输入要新用户的角色");
		user.setRoloer(scanner.next());
		System.out.println("请输入要新用户的备注");
		user.setRemark(scanner.next());
		int i=uDao.add(user);//将user得到的值放入数据库中。
		if(i>0){System.out.println("添加成功");}
		else {
			System.out.println("添加失败");
		}
	}
 (2)最后调用UserDAO中的add()方法将数据添加到user表中,add()方法的具体实现如下:

public int add(User user) throws Exception {
		
		String sql="insert into user values(0,?,?,?,?,?,?,?,?)";
		Connection conn= DBUtils.getConnection();//连接数据库
		PreparedStatement prepareStatement = conn.prepareStatement(sql);
        prepareStatement.setString(1,user.getUserNo());
        prepareStatement.setString(2,user.getUserName());
        prepareStatement.setString(3,user.getPwd());
        prepareStatement.setString(4,user.getDepartNo());
        prepareStatement.setString(5,user.getSex());
        prepareStatement.setInt(6,user.getAge());
        prepareStatement.setString(7,user.getRoloer());
        prepareStatement.setString(8,user.getRemark());
        int i = prepareStatement.executeUpdate();		
        if(i>0){
        	return i;
        }else{return 0;}    
	}


 创建sql语句→连接数据库→对sql语句进行预编译→赋值。因为executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。所以int i = prepareStatement.executeUpdate();
3.5.3修改用户信息
   (1)在Menu类中调用insertUser()方法,在UserService类中具体的实现如下:
public void insertUser(Scanner scanner) throws Exception {
 		System.out.println("请输入要修改的id号");
        int id=scanner.nextInt();
		System.out.println("您现在正在修改id为"+id+"的用户信息!\n下面请输入需要修改的内容");


    	 User user=new User();
		System.out.println("请输入要您要修改的用户码");
           user.setUserNo(scanner.next());
		System.out.println("请输入要您要修改的名字");
		user.setUserName(scanner.next());
		System.out.println("请输入要您要修改的密码");
		user.setPwd(scanner.next());
		System.out.println("请输入要您要修改的部门编号");
		user.setDepartNo(scanner.next());
		System.out.println("请输入要您要修改的性别");
		user.setSex(scanner.next());
		System.out.println("请输入要您要修改的年龄");
		user.setAge(scanner.nextInt());
		System.out.println("请输入要您要修改的角色");
		user.setRoloer(scanner.next());
		System.out.println("请输入要您要修改的备注");
		user.setRemark(scanner.next());
		int i=uDao.update(id, user);
		if(i>0){System.out.println("修改成功");}
		else {
			System.out.println("修改失败");
		}
	}


     调用UserDAOImpl中的update()方法进行修改,UserDAOImpl中的update()方法如下:
  
  public int update(int id,User user) throws Exception {
		
String sql="UpdateusersetuserNo=?,userName=?,pwd=?,departNo=?,sex=?,
age=?,roloer=?,remark=? where id=?";
		Connection conn= DBUtils.getConnection();
		PreparedStatement prepareStatement =conn.prepareStatement(sql); 
        prepareStatement.setString(1,user.getUserNo());
        prepareStatement.setString(2,user.getUserName());
        prepareStatement.setString(3,user.getPwd());
        prepareStatement.setString(4,user.getDepartNo());
        prepareStatement.setString(5,user.getSex());
        prepareStatement.setInt(6,user.getAge());
        prepareStatement.setString(7,user.getRoloer());
        prepareStatement.setString(8,user.getRemark());
        prepareStatement.setInt(9,id);
        int i = prepareStatement.executeUpdate();		
        if(i>0){
        	return i;
        }else{return 0;}   


	}
 创建sql语句→连接数据库→对sql语句进行预编译→赋值。注意,  executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。所以在这里用int i = prepareStatement.executeUpdate();使得i获得更新的行数,如果更新的行数大于0,则更新成功。
3.5.4删除用户信息
     (1)在Menu类中调用deleteUser()方法,具体的方法在UserService类中的实现如下:
public void deleteUser(Scanner scanner) throws Exception {
  		System.out.println("请输入要删除的id号");
        int id=scanner.nextInt();
        int i=uDao.delete(id);
		if(i>0){System.out.println("删除成功");}
		else {
			System.out.println("删除失败");
		}
	}
      (2)UserDAOImpl中的delete()方法实现如下:
   public int delete(int id) throws Exception {
		
		String sql="delete from user where id=?";
		Connection conn= DBUtils.getConnection();
		PreparedStatement prepareStatement =conn.prepareStatement(sql);
        prepareStatement.setInt(1,id);
        int i = prepareStatement.executeUpdate();	
        if(i>0){
        	return i;
        }else{return 0;}   
	}


     创建sql语句→连接数据库→对sql语句进行预编译→赋值。因为executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。所以int i = prepareStatement.executeUpdate();
3.6部门管理界面及功能的实现
3.6.1查询部门信息
   (1)在Menu类中调用inf()方法,DeptService类中的具体实现如下:
public void inf() throws Exception {
	List list= deptDAO.infdept();
	 System.out.println("查询数据如下:");
	 System.out.println("id\t\tDeptNo\t\tDeptname\tDeptLeader");
	 for (Dept dept : list) {
		System.out.println(dept.getId()+"\t\t"+dept.getDeptNo()+"\t"+dept.getDeptName()+"\t\t"+dept.getDeptLeader());		
	}
}



(2)在DeptDAOImpl中的infdept()方法的具体实现如下:
public List infdept() throws Exception {
	
		String sql="select * from dept";
		Connection conn= DBUtils.getConnection();
	PreparedStatement prepareStatement =conn.prepareStatement(sql);
		ResultSet i =prepareStatement.executeQuery();
		List list=new ArrayList();
		while(i.next()){
			
				Dept dept=new Dept();
		    	dept.setId(i.getInt(1));
		    	dept.setDeptNo(i.getString(2));
		    	dept.setDeptName(i.getString(3));
		    	dept.setDeptLeader(i.getString(4));
		    	list.add(dept);
			}
		DBUtils.close(i,prepareStatement, conn);
		return list;


	}


    上述代码中的sql语句是查询dept表中的所有用户信息。其中用来连接数据库的代码:Connection conn= DBUtils.getConnection();之后就是对sql语句进行预编译:PreparedStatement state=conn.prepareStatement(sql);
executeQuery(String sql):表示运行select语句,返回ResultSet结果集。
所以:ResultSet i=state.executeQuery();
创建一个只能放User类的list对象,通过ResultSet中的getString(int index)方法获得在数据库里是varchar、char等类型的数据对象,并给user赋值,最后添加到list对象中去。
在这里需要特别注意的是User user=new User()这行代码必须放在循环体之中,因为add加进去的是对象的一个引用,对象实例化放在循环外面,你每次都更新了这个引用的值,当然list里面的值都一样的。如果把User user = new User();放到循环里面,每次都生成一个新的对象,更改自身不会对其他元素有影响
在使用resultset后要依次关闭对象及连接:ResultSet → Statement → Connection。所以:DBUtils.close(i, state, conn);
3.6.2查询部门员工信息
  (1)在Menu类中,调用infUser()方法,其具体的实现代码如下:
 
 public void infUser (Scanner scanner)throws Exception
       {
	System.out.println("请输入要查询员工信息的部门名称:");
    String name=scanner.next();
	List list= deptDAO.infdeptUser(name); 
	 System.out.println("查询数据如下:");
	 System.out.println("id\t\tuserNo\t\tusername\tpwd\t\tdept\t\tsex\t\tage\t\troloer\t\tremark");
 	 for (int i = 0; i < list.size(); i++) {
		User user=list.get(i);
		if(user!=null){
			System.out.println(user.getId()+"\t\t"+user.getUserNo()+"\t\t"+user.getUserName()+"\t\t"+user.getPwd()+"\t\t"+user.getDepartNo()+"\t"+user.getSex()+"\t\t"+user.getAge()+"\t\t"+user.getRoloer()+"\t\t"+user.getRemark());		
		}
		
	}


}


注意,List list= deptDAO.infdeptUser(name);表示调用deptDAO中的查询某个部门名称的员工信息,并且将所得数据交由List保存。通过List接口的get方法取出所保存的数据。是在部门中查询用户信息,所以list对象只是存储User类的值。
(2)在DeptDAOImpl中的infdeptUser()方法如下:
 
 public List infdeptUser(String name) throws Exception {
		
		String sql="select * from user where departNo=(select deptNo from dept where deptName= ?)";
		Connection conn= DBUtils.getConnection();
		PreparedStatement prepareStatement = conn.prepareStatement(sql);
        prepareStatement.setString(1,name);
        ResultSet i=prepareStatement.executeQuery();
		List list=new ArrayList();
		while(i.next()){
		
			User  user=new User();
	    	user.setId(i.getInt(1));
	    	user.setUserNo(i.getString(2));
	    	user.setUserName(i.getString(3));
	    	user.setPwd(i.getString(4));
	    	user.setDepartNo(i.getString(5));
	    	user.setSex(i.getString(6));
	    	user.setAge(i.getInt(7));
	    	user.setRoloer(i.getString(8));
	    	user.setRemark(i.getString(9));	
	    	list.add(user);
		}
	
		DBUtils.close(i,prepareStatement, conn);
		 return list;
		
	}  


     user中的departNo和dept中的deptNo相关联,查询部门的员工信息的时候要先知道部门名称。
3.6.3增加部门员工信息
  (1)在Menu类中调用addUser()方法,其具体的实现方式为:
     
   public void addUser(Scanner scanner) throws Exception {
	User user=new User();
	System.out.println("请输入要添加新员工的部门名称");
	user.setDepartNo(scanner.next());
	System.out.println("您现在正在为["+user.getDepartNo()+"]添加新员工");
	System.out.println("请输入要添加新员工的用户码");
      user.setUserNo(scanner.next());
	System.out.println("请输入要添加新员工的名字");
	user.setUserName(scanner.next());
	System.out.println("请输入要添加新员工的密码");
	user.setPwd(scanner.next());
	System.out.println("请输入要添加新员工的性别");
	user.setSex(scanner.next());
	System.out.println("请输入要添加新员工的年龄");
	user.setAge(scanner.nextInt());
	System.out.println("请输入要添加新员工的角色");
	user.setRoloer(scanner.next());
	System.out.println("请输入要添加新员工的备注");
	user.setRemark(scanner.next());
	int i=deptDAO.add(user);
	if(i>0){System.out.println("添加成功");}
	else {
		System.out.println("添加失败");
	}
}


(2)add()方法的具体实现如下:
public int add(User user) throws Exception {
		
		String sql="insert into user values(0,?,?,?,(select deptNo from dept where deptName=?),?,?,?,?)";
		Connection conn= DBUtils.getConnection();
	
PreparedStatement prepareStatement = conn.prepareStatement(sql);
	
        prepareStatement.setString(1,user.getUserNo());
        prepareStatement.setString(2,user.getUserName());
        prepareStatement.setString(3,user.getPwd());
        prepareStatement.setString(4,user.getDepartNo());
        prepareStatement.setString(5,user.getSex());
        prepareStatement.setInt(6,user.getAge());
        prepareStatement.setString(7,user.getRoloer());
        prepareStatement.setString(8,user.getRemark());
        int i = prepareStatement.executeUpdate();		
        if(i>0){
        	return i;
        }else{return 0;}  
	}


    需要注意的是sql语句的写法,我们是用部门编号来将这两个表联系起来。
3.6.4修改部门员工信息
(1)在Menu类中调用updataUser()方法,这个方法的具体实现如下:
   
 public void updataUser(Scanner scanner) throws Exception {
     User user=new User();
	System.out.println("请输入要您要修改用户的部门名称");
	user.setDepartNo(scanner.next());
    DeptDAO deptDAO=new DeptDAOImpl();
	List list=deptDAO.infdeptUser(user.getDepartNo());
	 System.out.println("查询数据如下:");
	 System.out.println("id\t\tuserNo\t\tusername\tpwd\t\tdept\t\tsex\t\tage\t\troloer\t\tremark");
	 for (User user1 : list) {
		System.out.println(user1.getId()+"\t\t"+user1.getUserNo()+"\t\t"+user1.getUserName()+"\t\t"+user1.getPwd()+"\t\t"+user1.getDepartNo()+"\t"+user1.getSex()+"\t\t"+user1.getAge()+"\t\t"+user1.getRoloer()+"\t\t"+user1.getRemark());				
	}
	System.out.println("以上是{"+user.getDepartNo()+"} 部门的所有员工信息,请输入要修改的id号");
   int id=scanner.nextInt();
	System.out.println("您现在正在修改id为"+id+"的用户信息!\n下面请输入需要修改的内容");
	System.out.println("请输入要您要修改的用户码");
      user.setUserNo(scanner.next());
	System.out.println("请输入要您要修改的名字");
	user.setUserName(scanner.next());
	System.out.println("请输入要您要修改的密码");
	user.setPwd(scanner.next());
	System.out.println("请输入要您要修改的性别");
	user.setSex(scanner.next());
	System.out.println("请输入要您要修改的年龄");
	user.setAge(scanner.nextInt());
	System.out.println("请输入要您要修改的角色");
	user.setRoloer(scanner.next());
	System.out.println("请输入要您要修改的备注");
	user.setRemark(scanner.next());
	int i=deptDAO.update(id, user);
	if(i>0){System.out.println("修改成功");}
	else {
		System.out.println("修改失败");
	}
}


 修改部门的员工信息,首先要知道修改的是哪个部门,由部门名称查询到这个部门的员工,对想要修改的员工进行修改。
(2)DeptDAOImpl中的update()方法实现如下:
  
 public int update(int id, User user) throws Exception {
		
String sql="Update user set userNo=?,userName=?,pwd=?,departNo=(select deptNo from dept where deptName=?),sex=?,age=?,roloer=?,remark=? where id=?";
		Connection conn= DBUtils.getConnection();
PreparedStatement prepareStatement = conn.prepareStatement(sql);
        prepareStatement.setString(1,user.getUserNo());
        prepareStatement.setString(2,user.getUserName());
        prepareStatement.setString(3,user.getPwd());
        prepareStatement.setString(4,user.getDepartNo());
        prepareStatement.setString(5,user.getSex());
        prepareStatement.setInt(6,user.getAge());
        prepareStatement.setString(7,user.getRoloer());
        prepareStatement.setString(8,user.getRemark());
        prepareStatement.setInt(9,id);
        int i = prepareStatement.executeUpdate();		
        if(i>0){
        	return i;
        }else{return 0;}  
	}


     prepareStatement.setString(4,user.getDepartNo());是给user表中的departNo进行赋值。
3.6.5删除部门员工信息
(1)在Menu类中调用deleteUser()方法,具体的实现如下:

public void deleteUser(Scanner scanner) throws Exception {
	System.out.println("请输入要删除用户的部门名称");
	String name=scanner.next();
	DeptDAO deptDAO=new DeptDAOImpl();
	List list=deptDAO.infdeptUser(name);
	 System.out.println("查询数据如下:");
	 System.out.println("id\t\tuserNo\t\tusername\tpwd\t\tdept\t\tsex\t\tage\t\troloer\t\tremark");
	 for (User user1 : list) {
		System.out.println(user1.getId()+"\t\t"+user1.getUserNo()+"\t\t"+user1.getUserName()+"\t\t"+user1.getPwd()+"\t\t"+user1.getDepartNo()+"\t"+user1.getSex()+"\t\t"+user1.getAge()+"\t\t"+user1.getRoloer()+"\t\t"+user1.getRemark());				
	}
	System.out.println("以上是{"+name+"} 部门的所有员工信息,请输入要删除用户的id号");
   int id=scanner.nextInt();
   int i=deptDAO.delete(id);
	if(i>0){System.out.println("删除成功");}
	else {
		System.out.println("删除失败");
	}
}



(2)在deptDAOImpl中的delete()方法实现如下:
  
   public int delete(int id) throws Exception {
		
		String sql="delete from user where id=?";
		Connection conn= DBUtils.getConnection();
		PreparedStatement prepareStatement = conn.prepareStatement(sql);
        prepareStatement.setInt(1,id);
        int i = prepareStatement.executeUpdate();		
        if(i>0){
        	return i;
        }else{return 0;}   


	}


3.6.6调动员工到其他部门
   (1)在Menu类中调用vertUser()方法,实现如下:
    
 
public void vertUser(Scanner scanner)throws Exception {
	List list= deptDAO.findAll();
	 System.out.println("查询数据如下:");
	 System.out.println("id\t\tuserNo\t\tusername\tpwd\t\tdept\t\tsex\t\tage\t\troloer\t\tremark");
	 for (User user : list) {
		System.out.println(user.getId()+"\t\t"+user.getUserNo()+"\t\t"+user.getUserName()+"\t\t"+user.getPwd()+"\t\t"+user.getDepartNo()+"\t"+user.getSex()+"\t\t"+user.getAge()+"\t\t"+user.getRoloer()+"\t\t"+user.getRemark());		
	}
	 System.out.println("请输入要调动员工的ID");
	 int id=scanner.nextInt();
	 System.out.println("你要调动ID为"+id+"的员工 现所在  ["+deptDAO.findById(id)+"]  部门,\n您现在要调动这名员工到哪个部门?");
	 String name=scanner.next();
	 int i=deptDAO.vert(name, id);
		if(i>0){System.out.println("调动成功");}
		else {
			System.out.println("调动失败");
		}
}


先查出这个部门的员工有哪些,然后对需要调整的员工进行调整。
(2)在DeptDAOImpl中的vert()方法实现如下:
   
public int vert(String name,int id) throws Exception {
		// TODO Auto-generated method stub
		String sql="update user set departNo=(select deptNo from dept where deptName=?) where id=?";
		Connection conn= DBUtils.getConnection();
PreparedStatement prepareStatement = conn.prepareStatement(sql);
        prepareStatement.setString(1,name);
        prepareStatement.setInt(2,id);
        int i = prepareStatement.executeUpdate();//因为executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数,所以用int。		
        if(i>0){
        	return i;
        }else{return 0;}  
	}
        



4项目目录

jdbc详解:用户部门管理案例(在部门中对用户进行增删改查)_第3张图片

下面分别是各个类的具体代码:

package com.zxy;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.security.PrivateKey;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import com.zxy.Menu;

public class DBUtils {
    private static String DRIVER;
    private static String URL;
    private static String USER;
    private static String PWD;
	static {
		try {
			loadConfig();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			Class.forName(DRIVER);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	 
	//加载配置信息
 public  static void loadConfig() throws IOException{
	 
/**
 * "ClassLoader提供了两个方法用于从装载的类路径中取得资源:
  public URL getResource(String name);
  public InputStream getResourceAsStream(String name);
    这里name是资源的类路径,它是相对与“/”根路径下的位置。
  getResource得到的是一个URL对象来定位资源,而getResourceAsStream取得该资源输入流的引用保证程序可以从正确的位置抽取数据。
 */
	 Properties properties=new Properties();
	 InputStream is=Thread.currentThread().getContextClassLoader().getResourceAsStream("com/zxy/jdbc.properties");//线程
     properties.load(is);
	 DRIVER=properties.getProperty("jdbc.driver");
	 URL=properties.getProperty("jdbc.url");
	 USER=properties.getProperty("jdbc.user");
	 PWD=properties.getProperty("jdbc.pwd");
 }
 //获取数据库链接
 public static Connection getConnection() throws SQLException{
	 Connection conn=DriverManager.getConnection(URL,USER,PWD);
	 return conn;
 }
 //关闭连接
 public static void close(ResultSet rs,PreparedStatement ps,Connection conn){
	 if (rs!=null)
		try {
			rs.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	 if (ps!=null)
			try {
				ps.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	 if (conn!=null)
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
 }

  // public static void main(String[]   args	 ) throws SQLException{
  //
//	 Connection conn=new DBUtils().getConnection();
//	 System.out.println(conn);
// }

}

package com.zxy;

public class Dept {
	private int id;
    private String deptNo ;
    private String deptName;
    private String deptLeader;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getDeptNo() {
		return deptNo;
	}
	public void setDeptNo(String deptNo) {
		this.deptNo = deptNo;
	}
	public String getDeptName() {
		return deptName;
	}
	public void setDeptName(String deptName) {
		this.deptName = deptName;
	}
	public String getDeptLeader() {
		return deptLeader;
	}
	public void setDeptLeader(String deptLeader) {
		this.deptLeader = deptLeader;
	}
    
}

package com.zxy;

import java.util.List;

public interface DeptDAO {
	//查询部门信息,因为查询会给我们显示查询内容,所以直接返回查询的内容就可以,这里用List保存数据。
	public List infdept()throws Exception;
	//查询部门用户信息
 	public List infdeptUser(String name) throws Exception;
 	//增加部门用户信息
 	public  int add(User user)throws Exception;
	//修改部门用户信息
	public int update(int id,User user)throws Exception;
	//删除部门用户信息
	public int delete(int id) throws Exception;
	//调动员工到其他部门
	public String findById(int id)throws Exception;
    public List findAll()throws Exception;
    public int vert(String name,int id) throws Exception;

}
package com.zxy;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.PseudoColumnUsage;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

public class DeptDAOImpl implements DeptDAO {
	//查询部门信息
	
	public List infdept() throws Exception {
		// TODO Auto-generated method stub
		String sql="select * from dept";
		Connection conn= DBUtils.getConnection();
		PreparedStatement prepareStatement = conn.prepareStatement(sql);
		ResultSet i =prepareStatement.executeQuery();
		List list=new ArrayList();
		while(i.next()){
			//	System.out.println("用户名:"+i.getString(3)+"  部门号:"+i.getString(5)+"    性别:"+i.getString(6)+"    年龄:"+i.getInt(7)+"      角色:"+i.getString(8)+"     备注:"+i.getString(9));
				Dept dept=new Dept();
		    	dept.setId(i.getInt(1));
		    	dept.setDeptNo(i.getString(2));
		    	dept.setDeptName(i.getString(3));
		    	dept.setDeptLeader(i.getString(4));
		    	list.add(dept);
			}
		DBUtils.close(i,prepareStatement, conn);//ResultSet使用后依次关闭对象及连接:ResultSet → Statement → Connection
		return list;

	}
	//查询部门的员工信息
	public List infdeptUser(String name) throws Exception {
		//user中的departNo和dept中的deptNo相关联。查询部门的员工信息的时候要先知道部门名称
		String sql="select * from user where departNo=(select deptNo from dept where deptName= ?)";
		Connection conn= DBUtils.getConnection();
		PreparedStatement prepareStatement = conn.prepareStatement(sql);
        prepareStatement.setString(1,name);
        ResultSet i=prepareStatement.executeQuery();
		List list=new ArrayList();
		while(i.next()){
		//	System.out.println("用户名:"+i.getString(3)+"  部门号:"+i.getString(5)+"    性别:"+i.getString(6)+"    年龄:"+i.getInt(7)+"      角色:"+i.getString(8)+"     备注:"+i.getString(9));
			User  user=new User();
	    	user.setId(i.getInt(1));
	    	user.setUserNo(i.getString(2));
	    	user.setUserName(i.getString(3));
	    	user.setPwd(i.getString(4));
	    	user.setDepartNo(i.getString(5));
	    	user.setSex(i.getString(6));
	    	user.setAge(i.getInt(7));
	    	user.setRoloer(i.getString(8));
	    	user.setRemark(i.getString(9));	
	    	list.add(user);
		}
	//	 List list=null;
		DBUtils.close(i,prepareStatement, conn);//ResultSet使用后依次关闭对象及连接:ResultSet → Statement → Connection
		 return list;
		
	}
	@Override
	//添加部门的员工信息
	public int add(User user) throws Exception {
		
		String sql="insert into user values(0,?,?,?,(select deptNo from dept where deptName=?),?,?,?,?)";
		Connection conn= DBUtils.getConnection();
	
		PreparedStatement prepareStatement = conn.prepareStatement(sql);
	
        prepareStatement.setString(1,user.getUserNo());//给第一个问号赋值
        prepareStatement.setString(2,user.getUserName());
        prepareStatement.setString(3,user.getPwd());
        prepareStatement.setString(4,user.getDepartNo());
        prepareStatement.setString(5,user.getSex());
        prepareStatement.setInt(6,user.getAge());
        prepareStatement.setString(7,user.getRoloer());
        prepareStatement.setString(8,user.getRemark());
        int i = prepareStatement.executeUpdate();//executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。		
        if(i>0){
        	return i;
        }else{return 0;}  
	}
	@Override
	//更新部门的员工信息
	public int update(int id, User user) throws Exception {
		// TODO Auto-generated method stub
		String sql="Update user set userNo=?,userName=?,pwd=?,departNo=(select deptNo from dept where deptName=?),sex=?,age=?,roloer=?,remark=? where id=?";
		Connection conn= DBUtils.getConnection();
		PreparedStatement prepareStatement = conn.prepareStatement(sql);
        prepareStatement.setString(1,user.getUserNo());
        prepareStatement.setString(2,user.getUserName());
        prepareStatement.setString(3,user.getPwd());
        prepareStatement.setString(4,user.getDepartNo());
        prepareStatement.setString(5,user.getSex());
        prepareStatement.setInt(6,user.getAge());
        prepareStatement.setString(7,user.getRoloer());
        prepareStatement.setString(8,user.getRemark());
        prepareStatement.setInt(9,id);
        int i = prepareStatement.executeUpdate();		
        if(i>0){
        	return i;
        }else{return 0;}  
	}
	@Override
	//删除部门的员工信息
	public int delete(int id) throws Exception {
		// TODO Auto-generated method stub
		String sql="delete from user where id=?";
		Connection conn= DBUtils.getConnection();
		PreparedStatement prepareStatement = conn.prepareStatement(sql);
        prepareStatement.setInt(1,id);
        int i = prepareStatement.executeUpdate();		
        if(i>0){
        	return i;
        }else{return 0;}   

	}
	/**
	 * 查询全部用户信息
	 */
	public List findAll() throws Exception {
		 String sql="select * from user";
/*		 QueryRunner runner=new QueryRunner();
		 List list = (List) runner.query(DBUtils.getConnection(), sql, new BeanListHandler(User.class));         
		 for (User user : list) {
			user.show();
		}*/
		 Connection conn= DBUtils.getConnection();
		 PreparedStatement state=conn.prepareStatement(sql);
		ResultSet i=state.executeQuery();//executeQuery(String sql):运行select语句,返回ResultSet结果集
		List list=new ArrayList();
		while(i.next()){
		//	System.out.println("用户名:"+i.getString(3)+"  部门号:"+i.getString(5)+"    性别:"+i.getString(6)+"    年龄:"+i.getInt(7)+"      角色:"+i.getString(8)+"     备注:"+i.getString(9));
			User  user=new User();
	    	user.setId(i.getInt(1));
	    	user.setUserNo(i.getString(2));
	    	user.setUserName(i.getString(3));
	    	user.setPwd(i.getString(4));
	    	user.setDepartNo(i.getString(5));
	    	user.setSex(i.getString(6));
	    	user.setAge(i.getInt(7));
	    	user.setRoloer(i.getString(8));
	    	user.setRemark(i.getString(9));	
	    	list.add(user);
		}
	//	 List list=null;
		DBUtils.close(i, state, conn);
		 return list;
	}
	@Override
	public String findById(int id) throws Exception {
		// 因为dept中的deptNo和user中的departNo是相关联的。
		String sql="Select deptName from dept where deptNo=(select departNo from user where id=?);";
		Connection conn= DBUtils.getConnection();//连接数据库
		//创建向数据库发送预编译sql的prepareStatement对象。
		PreparedStatement prepareStatement = conn.prepareStatement(sql);
		prepareStatement.setInt(1, id);
		ResultSet c =prepareStatement.executeQuery();//executeQuery(String sql):运行select语句,返回ResultSet结果集,
		if(c.next()){
        return c.getString(1);
        }
		return null;
	}
	/**
	 * 调动员工
	 */
	public int vert(String name,int id) throws Exception {
		// TODO Auto-generated method stub
		String sql="update user set departNo=(select deptNo from dept where deptName=?) where id=?";
		Connection conn= DBUtils.getConnection();
		PreparedStatement prepareStatement = conn.prepareStatement(sql);
        prepareStatement.setString(1,name);
        prepareStatement.setInt(2,id);
        int i = prepareStatement.executeUpdate();//因为executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数,所以用int。		
        if(i>0){
        	return i;
        }else{return 0;}  
	}


}


package com.zxy;

import java.util.List;
import java.util.Scanner;

import javax.xml.ws.WebServiceException;

public class DeptService {
	DeptDAO deptDAO=new DeptDAOImpl();
public void inf() throws Exception {
	List list= deptDAO.infdept();
	 System.out.println("查询数据如下:");
	 System.out.println("id\t\tDeptNo\t\tDeptname\tDeptLeader");
/* 	 for (int i = 0; i < list.size(); i++) {
		User user=list.get(i);
		if(user!=null){
			System.out.println(user.getId()+"\t\t"+user.getUserNo()+"\t\t"+user.getUserName()+"\t\t"+user.getPwd()+"\t\t"+user.getDepterNo()+"\t"+user.getSex()+"\t\t"+user.getAge()+"\t\t"+user.getRoloer()+"\t\t"+user.getRemark());		
		}
	}*/
	 for (Dept dept : list) {
		 System.out.println(dept.getId()+"\t\t"+dept.getDeptNo()+"\t"+dept.getDeptName()+"\t\t"+dept.getDeptLeader());		
	}
}
public void infUser (Scanner scanner)throws Exception
       {
	System.out.println("请输入要查询员工信息的部门名称:");
    String name=scanner.next();
	List list= deptDAO.infdeptUser(name);//调用infdeptUser方法,查询部门的员工信息。
	 System.out.println("查询数据如下:");
	 System.out.println("id\t\tuserNo\t\tusername\tpwd\t\tdept\t\tsex\t\tage\t\troloer\t\tremark");
 	 for (int i = 0; i < list.size(); i++) {
		User user=list.get(i);
		if(user!=null){
			System.out.println(user.getId()+"\t\t"+user.getUserNo()+"\t\t"+user.getUserName()+"\t\t"+user.getPwd()+"\t\t"+user.getDepartNo()+"\t"+user.getSex()+"\t\t"+user.getAge()+"\t\t"+user.getRoloer()+"\t\t"+user.getRemark());		
		}
		if(user==null) {
			System.out.println("输入错误");
			
		}
	}

}
public void addUser(Scanner scanner) throws Exception {
	User user=new User();
	System.out.println("请输入要添加新员工的部门名称");
	user.setDepartNo(scanner.next());
	System.out.println("您现在正在为["+user.getDepartNo()+"]添加新员工");
	System.out.println("请输入要添加新员工的用户码");
      user.setUserNo(scanner.next());
	System.out.println("请输入要添加新员工的名字");
	user.setUserName(scanner.next());
	System.out.println("请输入要添加新员工的密码");
	user.setPwd(scanner.next());
	System.out.println("请输入要添加新员工的性别");
	user.setSex(scanner.next());
	System.out.println("请输入要添加新员工的年龄");
	user.setAge(scanner.nextInt());
	System.out.println("请输入要添加新员工的角色");
	user.setRoloer(scanner.next());
	System.out.println("请输入要添加新员工的备注");
	user.setRemark(scanner.next());
	int i=deptDAO.add(user);
	if(i>0){System.out.println("添加成功");}
	else {
		System.out.println("添加失败");
	}
}
public void updataUser(Scanner scanner) throws Exception {
     User user=new User();
	System.out.println("请输入要您要修改用户的部门名称");
	user.setDepartNo(scanner.next());
    DeptDAO deptDAO=new DeptDAOImpl();
	List list=deptDAO.infdeptUser(user.getDepartNo());
	 System.out.println("查询数据如下:");
	 System.out.println("id\t\tuserNo\t\tusername\tpwd\t\tdept\t\tsex\t\tage\t\troloer\t\tremark");
	 for (User user1 : list) {
		 System.out.println(user1.getId()+"\t\t"+user1.getUserNo()+"\t\t"+user1.getUserName()+"\t\t"+user1.getPwd()+"\t\t"+user1.getDepartNo()+"\t"+user1.getSex()+"\t\t"+user1.getAge()+"\t\t"+user1.getRoloer()+"\t\t"+user1.getRemark());				
	}
	System.out.println("以上是{"+user.getDepartNo()+"} 部门的所有员工信息,请输入要修改的id号");
   int id=scanner.nextInt();
	System.out.println("您现在正在修改id为"+id+"的用户信息!\n下面请输入需要修改的内容");
	System.out.println("请输入要您要修改的用户码");
      user.setUserNo(scanner.next());
	System.out.println("请输入要您要修改的名字");
	user.setUserName(scanner.next());
	System.out.println("请输入要您要修改的密码");
	user.setPwd(scanner.next());
	System.out.println("请输入要您要修改的性别");
	user.setSex(scanner.next());
	System.out.println("请输入要您要修改的年龄");
	user.setAge(scanner.nextInt());
	System.out.println("请输入要您要修改的角色");
	user.setRoloer(scanner.next());
	System.out.println("请输入要您要修改的备注");
	user.setRemark(scanner.next());
	int i=deptDAO.update(id, user);
	if(i>0){System.out.println("修改成功");}
	else {
		System.out.println("修改失败");
	}
}
public void deleteUser(Scanner scanner) throws Exception {
	System.out.println("请输入要删除用户的部门名称");
	String name=scanner.next();
	DeptDAO deptDAO=new DeptDAOImpl();
	List list=deptDAO.infdeptUser(name);
	 System.out.println("查询数据如下:");
	 System.out.println("id\t\tuserNo\t\tusername\tpwd\t\tdept\t\tsex\t\tage\t\troloer\t\tremark");
	 for (User user1 : list) {
		 System.out.println(user1.getId()+"\t\t"+user1.getUserNo()+"\t\t"+user1.getUserName()+"\t\t"+user1.getPwd()+"\t\t"+user1.getDepartNo()+"\t"+user1.getSex()+"\t\t"+user1.getAge()+"\t\t"+user1.getRoloer()+"\t\t"+user1.getRemark());				
	}
	System.out.println("以上是{"+name+"} 部门的所有员工信息,请输入要删除用户的id号");
   int id=scanner.nextInt();
   int i=deptDAO.delete(id);
	if(i>0){System.out.println("删除成功");}
	else {
		System.out.println("删除失败");
	}
}
public void vertUser(Scanner scanner)throws Exception {
	List list= deptDAO.findAll();
	 System.out.println("查询数据如下:");
	 System.out.println("id\t\tuserNo\t\tusername\tpwd\t\tdept\t\tsex\t\tage\t\troloer\t\tremark");
	 for (User user : list) {
		 System.out.println(user.getId()+"\t\t"+user.getUserNo()+"\t\t"+user.getUserName()+"\t\t"+user.getPwd()+"\t\t"+user.getDepartNo()+"\t"+user.getSex()+"\t\t"+user.getAge()+"\t\t"+user.getRoloer()+"\t\t"+user.getRemark());		
	}
	 System.out.println("请输入要调动员工的ID");
	 int id=scanner.nextInt();
	 System.out.println("你要调动ID为"+id+"的员工 现所在  ["+deptDAO.findById(id)+"]  部门,\n您现在要调动这名员工到哪个部门?");
	 String name=scanner.next();
	 int i=deptDAO.vert(name, id);
		if(i>0){System.out.println("调动成功");}
		else {
			System.out.println("调动失败");
		}
}
}
package com.zxy;

import java.util.Scanner;

public class Menu {
	private  static User user;
	static UserService us=new UserService();
	private static Dept dept;
	static DeptService ds=new DeptService();
public static void  main(String[] args) throws Exception {
	  loginView();//在main方法中只有这一个方法,只执行这一个方法。
}
	//登录视图
	private static void loginView() throws Exception {
		System.out.println("\t\t\t--------------欢迎来到库存管理系统------------------");
	    System.out.println("\t\t\t--------------1登陆-------------------------------");
	    System.out.println("\t\t\t--------------2退出-------------------------------");
	    System.out.println("请输入操作步骤;");
	    Scanner scanner= new Scanner(System.in);
	    int i=scanner.nextInt();//输入数值。
	    if (i==1) {//登陆
			System.out.println("登录");

             user=us.checkUser(scanner);//调用UserService中的方法,用来检测
             //如果用户名,密码为空,则回到初始界面
			if(user==null){ 
			System.out.println("用户名或密码错误,请重新输入");
			loginView();
			}else {
			indexView(scanner);			
			}
		}else if (i==2) {//退出
			System.out.println("本次系统退出,欢迎下次光临!");
		}else {//错误
			System.out.println("输入错误,请重新输入!");
			loginView();
		}
	}
	private static void indexView(Scanner scanner) throws Exception {
		System.out.println("\t\t\t["+user.getUserName()+"]登录本系统");
		System.out.println("\t\t\t-------------请选择要操作的目录--------------");	
		System.out.println("\t\t\t-------------1.基础信息管理-----------------");
		System.out.println("\t\t\t---------------1.1用户管理-----------------");
		System.out.println("\t\t\t---------------1.2部门管理-----------------");	
		System.out.println("\t\t\t-------------2返回上一级-----------------");
		System.out.println("请选择您要操作的功能:");
		String operate=scanner.next();//在控制台进行输入数字。
		switch (operate) {
		case "1.1":
			//用户管理
			showUserView(scanner);
			break;
        case "1.2"://部门管理
        	showDeptView(scanner);
        	break;
        case "2":
        	loginView();
        	break;
		default://任何条件都不匹配的情况下才执行
			System.out.println("输入错误,请重新输入");
			indexView(scanner);
			break;
		}
	}
	//用户管理界面
	private static void showUserView(Scanner scanner) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("\t\t\t-------------欢迎到用户管理界面----------------");
		System.out.println("\t\t\t---------------1.查询用户信息-----------------");
		System.out.println("\t\t\t---------------2.添加用户信息-----------------");
		System.out.println("\t\t\t---------------3.修改用户信息-----------------");
		System.out.println("\t\t\t---------------4.删除用户信息-----------------");	
		System.out.println("\t\t\t---------------5.返回上一级-------------------");
		System.out.println("请选择您要操作的功能:");
		UserDAO userDAO=new UserDAOImpl();	
		String operate=scanner.next();
		switch (operate) {
		case "1":
			//查询
			//user.show();
		//	System.out.println(user.getDepterNo());
		   //  userDAO.findById(user.getId()).show();
		   // userDAO.findAll();
		 us.showUserList();//调用userservice中的方法
			showUserView(scanner);//表示执行完这个功能后再回到showUserView这个界面。
			break;
        case "2":
        	//userDAO.insert();
        	us.addUser(scanner);
        	showUserView(scanner);
        	break;
        case "3":
        	us.insertUser(scanner);
        	showUserView(scanner);
        	break;
        case "4":
        	us.deleteUser(scanner);
        	showUserView(scanner);
        	break;
      
        case "5":
        	indexView(scanner);
        	break;
		default:
			System.out.println("输入错误,请重新输入");
			showUserView(scanner);
			break;
		}
	}
		private static void showDeptView(Scanner scanner) throws Exception {
			// TODO Auto-generated method stub
			System.out.println("\t\t\t-------------欢迎到部门管理界面-------------------");
			System.out.println("\t\t\t---------------1.查询部门信息--------------------");
			System.out.println("\t\t\t---------------2.查询部门员工信息-----------------");
			System.out.println("\t\t\t---------------3.增加部门员工信息-----------------");
			System.out.println("\t\t\t---------------4.修改部门员工信息-----------------");
			System.out.println("\t\t\t---------------5.删除部门员工信息-----------------");
			System.out.println("\t\t\t---------------6.调动员工到其他部门----------------");
			System.out.println("\t\t\t---------------7.返回上一级----------------------");
			System.out.println("请选择您要操作的功能:");
			UserDAO userDAO=new UserDAOImpl();	
			String operate=scanner.next();
			switch (operate) {
			case "1":
				//查询
				//user.show();
			//	System.out.println(user.getDepterNo());
			   //  userDAO.findById(user.getId()).show();
			    ds.inf();
				showDeptView(scanner);
				break;
	        case "2":
	        	//userDAO.insert();
	        	ds.infUser(scanner);
	        	showDeptView(scanner);
	        	break;
	        case "3":
	        	ds.addUser(scanner);
	        	showDeptView(scanner);
	        	break;
	        case "4":
	        	ds.updataUser(scanner);
	        	showDeptView(scanner);
	        	break;
	        case "5":
	        	ds.deleteUser(scanner);
	        	showDeptView(scanner);
	        	break;
	        case "6":
	        	ds.vertUser(scanner);
	        	showDeptView(scanner);
	        	break;
	        case "7":
	        	indexView(scanner);
	        	break;
			default:
				System.out.println("输入错误,请重新输入");
				showDeptView(scanner);
				break;
			}
	} 

}


package com.zxy;

public class User {
   private  int id;
   private  String userNo;
   private String userName;
   private String pwd;
   private String departNo;

private String sex;
   private int age;
   private String roloer;
   private String remark;
   public String getDepartNo() {
	return departNo;
}
public void setDepartNo(String departNo) {
	this.departNo = departNo;
}

public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getUserNo() {
	return userNo;
}
public void setUserNo(String userNo) {
	this.userNo = userNo;
}
public String getUserName() {
	return userName;
}
public void setUserName(String userName) {
	this.userName = userName;
}
public String getPwd() {
	return pwd;
}
public void setPwd(String pwd) {
	this.pwd = pwd;
}

public String getSex() {
	return sex;
}
public void setSex(String sex) {
	this.sex = sex;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
public String getRoloer() {
	return roloer;
}
public void setRoloer(String roloer) {
	this.roloer = roloer;
}
public String getRemark() {
	return remark;
}
public void setRemark(String remark) {
	this.remark = remark;
}
public void show() {
	System.out.println("用户名:"+getUserName()+"  部门号:"+getDepartNo()+"    性别:"+getSex()+"    年龄:"+getAge()+"      角色:"+getRoloer()+"     备注:"+getRemark());
}
}

package com.zxy;

import java.util.List;
import java.util.Scanner;

import javax.management.Query;

import org.omg.CORBA.UShortSeqHelper;

public interface UserDAO {
    //登录
	public User login(String name,String pwd)throws Exception; 
	public User findById(int id)throws Exception;
	//全部查询
    public List findAll()throws Exception;
    //添加用户 自己
	/*public void insert()throws Exception;*/
	//添加用户 老师
	public  int add(User user)throws Exception;
	//修改信息 自己
	public int update(int id,User user)throws Exception;
	//删除信息 自己
	public int delete(int id) throws Exception;

		
	
}

package com.zxy;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.mysql.jdbc.Statement;

public class UserDAOImpl implements UserDAO{
	/**
	 * 登录
	 */
  public User login(String name,String pwd)throws Exception {
	    Connection conn= DBUtils.getConnection();//连接数据库
		//操作数据库
	  String sql="SELECT * From user WHERE username=? and pwd=?";
	  PreparedStatement ps = conn.prepareStatement(sql);//预编译
    ps.setString(1,name);
    ps.setString(2,pwd);
    ResultSet i=ps.executeQuery();
    User user=null;
    if(i.next()){//如果下一行存在。
    	
    	
    	/*
    	 * 结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,
    	 * 他同时还具有操纵数据的功能,可能完成对数据的更新等。
    	 * 
    	 *  ResultSet提供检索不同类型字段的方法,常用的有:
         getString(int index)、getString(String columnName):获得在数据库里是varchar、char等类型的数据对象。
        getFloat(int index)、getFloat(String columnName):获得在数据库里是Float类型的数据对象。
        getDate(int index)、getDate(String columnName):获得在数据库里是Date类型的数据。
         getBoolean(int index)、getBoolean(String columnName):获得在数据库里是Boolean类型的数据。
           getObject(int index)、getObject(String columnName):获取在数据库里任意类型的数据。
              结果集读取数据的方法主要是getXXX(),他的参数可以是整型表示第几列(是从1开始的),还可以是列名
            ResultSet还提供了对结果集进行滚动的方法:
         next():移动到下一行
        Previous():移动到前一行
        absolute(int row):移动到指定行
       beforeFirst():移动resultSet的最前面。
       afterLast() :移动到resultSet的最后面。
    	 * */
    
    	user=new User();
    	user.setId(i.getInt(1));//i.getInt(1)是指得到数据库中int类型的数据对象并赋给id,在这里是获取第一列的值,也可以写成i.getInt(id).
    	user.setUserNo(i.getString(2));//i.getString(2)是指得到数据库中varchar类型的数据对象并赋给userNo,
    	user.setUserName(i.getString(3));
    	user.setPwd(i.getString(4));
    	user.setDepartNo(i.getString(5));
    	user.setSex(i.getString(6));
    	user.setAge(i.getInt(7));
    	user.setRoloer(i.getString(8));
    	user.setRemark(i.getString(9));	
    }

    //在DBUtils中的close方法:public static void close(ResultSet rs,PreparedStatement ps,Connection conn),
    DBUtils.close(null, ps, conn);
    return user;
         }
  
  //通过id进行查询
  public User findById(int id)throws Exception{
		 String sql="Select * from user where id="+id;
		 QueryRunner runner=new QueryRunner();
	     User user=runner.query(DBUtils.getConnection(), sql, new BeanHandler(User.class));
	  return user;
  }
 /* //添加用户
  public void insert()throws Exception {
	    Connection conn= DBUtils.getConnection();
		System.out.println("请输入要新用户的用户码");
		Scanner nameNoinput=new Scanner(System.in);
		String nameNo1=nameNoinput.next();
		System.out.println("请输入要新用户的名字");
		Scanner nameinput=new Scanner(System.in);
		String name1=nameinput.next();
		System.out.println("请输入要新用户的密码");
		Scanner pwdinput=new Scanner(System.in);
		String pwd1=pwdinput.next();
		System.out.println("请输入要新用户的部门编号");
		Scanner departNoinput=new Scanner(System.in);
		String departNo1=departNoinput.next();
		System.out.println("请输入要新用户的性别");
		Scanner sexinput=new Scanner(System.in);
		String sex1=sexinput.next();
		System.out.println("请输入要新用户的年龄");
		Scanner ageinput=new Scanner(System.in);
		int age1=ageinput.nextInt();
		System.out.println("请输入要新用户的角色");
		Scanner roloerNoinput=new Scanner(System.in);
		String roloer1=roloerNoinput.next();
		System.out.println("请输入要新用户的备注");
		Scanner remarkinput=new Scanner(System.in);
		String remark1=remarkinput.next();
		System.out.println("请确认您要插入的新用户信息");
		System.out.println("确认信息请输入 1\n重新输入请输入 2");
		Scanner scanner=new Scanner(System.in);
		int i=scanner.nextInt();
		if (i==1) {
			String sql="insert into user values(0,?,?,?,?,?,?,?,?)";
	        PreparedStatement prepareStatement = conn.prepareStatement(sql);
	        prepareStatement.setString(1,nameNo1);
	        prepareStatement.setString(2,name1);
	        prepareStatement.setString(3,pwd1);
	        prepareStatement.setString(4,departNo1);
	        prepareStatement.setString(5,sex1);
	        prepareStatement.setInt(6,age1);
	        prepareStatement.setString(7,roloer1);
	        prepareStatement.setString(8,remark1);
	        int n=prepareStatement.executeUpdate();
	        if(n>0){System.out.println("插入成功");}
	        else{System.out.println("插入失败");
	        insert();}
		}else if(i==2) {
			System.out.println("请重新输入");
			insert();
		}else {
			System.out.println("输入有误,请重新输入");
			insert();
		}
}*/
 /**
  * 全部查询
  * 因为是查询数据,有很多个,所以这里用list来存储,
  */
	 public List findAll()throws SQLException{
		 String sql="Select * from user";
/*		 QueryRunner runner=new QueryRunner();
		 List list = (List) runner.query(DBUtils.getConnection(), sql, new BeanListHandler(User.class));         
		 for (User user : list) {
			user.show();
		}*/
		 Connection conn= DBUtils.getConnection();
		 PreparedStatement state=conn.prepareStatement(sql);
		  /**
	         * executeQuery(String sql):运行select语句,返回ResultSet结果集。
	           executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。
	         */
		ResultSet i=state.executeQuery();//返回的是ResultSet结果集,所以这样写
		List list=new ArrayList();
		while(i.next()){
		//	System.out.println("用户名:"+i.getString(3)+"  部门号:"+i.getString(5)+"    性别:"+i.getString(6)+"    年龄:"+i.getInt(7)+"      角色:"+i.getString(8)+"     备注:"+i.getString(9));
			//注意,这行代码一定要写在循环体里面,其实add加进去的是对象的一个引用,对象实例化放在循环外面,
            //你每次都更新了这个引用的值,当然list里面的值都一样的。如果把User user = new User();放到循环里面,每次都生成一个新的对象,更改自身不会对其他元素有影响
			User  user=new User();
	    	user.setId(i.getInt(1));
	    	user.setUserNo(i.getString(2));
	    	user.setUserName(i.getString(3));
	    	user.setPwd(i.getString(4));
	    	user.setDepartNo(i.getString(5));
	    	user.setSex(i.getString(6));
	    	user.setAge(i.getInt(7));
	    	user.setRoloer(i.getString(8));
	    	user.setRemark(i.getString(9));	
	    	list.add(user);//将这些值添加到list中。
		}
	//	 List list=null;
		DBUtils.close(i, state, conn);//关闭连接,使用resultset后依次关闭对象及连接:ResultSet → Statement → Connection。
		 return list;
	    }
	 /*
	  * 添加
	  * @see com.zxy.UserDAO#add(com.zxy.User)
	  */
	@Override
	public int add(User user) throws Exception {
		// TODO Auto-generated method stub
		String sql="insert into user values(0,?,?,?,?,?,?,?,?)";
		Connection conn= DBUtils.getConnection();//连接数据库
		PreparedStatement prepareStatement = conn.prepareStatement(sql);//预编译
        prepareStatement.setString(1,user.getUserNo());
        prepareStatement.setString(2,user.getUserName());
        prepareStatement.setString(3,user.getPwd());
        prepareStatement.setString(4,user.getDepartNo());
        prepareStatement.setString(5,user.getSex());
        prepareStatement.setInt(6,user.getAge());
        prepareStatement.setString(7,user.getRoloer());
        prepareStatement.setString(8,user.getRemark());
        int i = prepareStatement.executeUpdate();		
        if(i>0){
        	return i;
        }else{return 0;}    
	}
	
	/**
	 * 修改
	 */
	public int update(int id,User user) throws Exception {
		
		String sql="Update user set userNo=?,userName=?,pwd=?,departNo=?,sex=?,age=?,roloer=?,remark=? where id=?";
		Connection conn= DBUtils.getConnection();
		PreparedStatement prepareStatement = conn.prepareStatement(sql);//预编译sql语句
        prepareStatement.setString(1,user.getUserNo());//赋值
        prepareStatement.setString(2,user.getUserName());
        prepareStatement.setString(3,user.getPwd());
        prepareStatement.setString(4,user.getDepartNo());
        prepareStatement.setString(5,user.getSex());
        prepareStatement.setInt(6,user.getAge());
        prepareStatement.setString(7,user.getRoloer());
        prepareStatement.setString(8,user.getRemark());
        prepareStatement.setInt(9,id);
        int i = prepareStatement.executeUpdate();		
        if(i>0){
        	return i;
        }else{return 0;}   

	}
	
	/**
	 * 删除
	 */
	public int delete(int id) throws Exception {
		// TODO Auto-generated method stub
		String sql="delete from user where id=?";
		Connection conn= DBUtils.getConnection();//连接数据库
		PreparedStatement prepareStatement = conn.prepareStatement(sql);
        prepareStatement.setInt(1,id);
        /**
         * executeQuery(String sql):运行select语句,返回ResultSet结果集。
           executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。
         */
        int i = prepareStatement.executeUpdate();//因为返回的是行数,所以用int		
        if(i>0){
        	return i;
        }else{return 0;}   
	}
	
}


package com.zxy;

import java.util.List;
import java.util.Scanner;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
/**
 * 数据的输入
 * @author 26326
 *
 */
public class UserService {
	UserDAO uDao=new UserDAOImpl();
	//检测输入的数据是否存在于数据库中。
	public User checkUser(Scanner scanner) throws Exception {
		// TODO Auto-generated method stub
		User user;
		System.out.println("请输入用户名");
		Scanner name1=new Scanner(System.in);
		String name=name1.next();//输入用户名
		System.out.println("请输入密码");
		Scanner pwd1=new Scanner(System.in);
		String pwd=pwd1.next();//输入密码
         
		user=uDao.login(name, pwd);
		return user;
	}
	
	
	/*
	 * *查询所有用户
	 */
     public void showUserList() throws Exception{
    	List list= uDao.findAll();
    	 System.out.println("查询数据如下:");
    	 System.out.println("id\t\tuserNo\t\tusername\tpwd\t\tdept\tsex\t\tage\t\troloer\t\tremark");
   	 for (int i = 0; i < list.size(); i++) {
			User user=list.get(i);//list接口中的方法,根据索引取得保存的数据 
			if(user!=null){
				System.out.println(user.getId()+"\t\t"+user.getUserNo()+"\t\t"+user.getUserName()+"\t\t"+user.getPwd()+"\t\t"+user.getDepartNo()+"\t"+user.getSex()+"\t\t"+user.getAge()+"\t\t"+user.getRoloer()+"\t\t"+user.getRemark());		
			}
		}
    	 /*将list的中的数据分别给User类的对象user,*/
    	/* for (User user : list) {
    		 System.out.println(user.getId()+"\t\t"+user.getUserNo()+"\t\t"+user.getUserName()+"\t\t"+user.getPwd()+"\t\t"+user.getDepartNo()+"\t"+user.getSex()+"\t\t"+user.getAge()+"\t\t"+user.getRoloer()+"\t\t"+user.getRemark());		
		}*/
     }
     //添加用户
     public void addUser(Scanner scanner) throws Exception {
		User user=new User();
		System.out.println("请输入要新用户的用户码");
           user.setUserNo(scanner.next());
		System.out.println("请输入要新用户的名字");
		user.setUserName(scanner.next());
		System.out.println("请输入要新用户的密码");
		user.setPwd(scanner.next());
		System.out.println("请输入要新用户的部门编号");
		user.setDepartNo(scanner.next());
		System.out.println("请输入要新用户的性别");
		user.setSex(scanner.next());
		System.out.println("请输入要新用户的年龄");
		user.setAge(scanner.nextInt());
		System.out.println("请输入要新用户的角色");
		user.setRoloer(scanner.next());
		System.out.println("请输入要新用户的备注");
		user.setRemark(scanner.next());
		int i=uDao.add(user);//将user得到的值放入数据库中。
		if(i>0){System.out.println("添加成功");}
		else {
			System.out.println("添加失败");
		}
	}
     /**
      * 修改
      * @param scanner
      * @throws Exception
      */
     public void insertUser(Scanner scanner) throws Exception {
 		System.out.println("请输入要修改的id号");
        int id=scanner.nextInt();//输入id
		System.out.println("您现在正在修改id为"+id+"的用户信息!\n下面请输入需要修改的内容");

    	 User user=new User();
		System.out.println("请输入要您要修改的用户码");
           user.setUserNo(scanner.next());
		System.out.println("请输入要您要修改的名字");
		user.setUserName(scanner.next());
		System.out.println("请输入要您要修改的密码");
		user.setPwd(scanner.next());
		System.out.println("请输入要您要修改的部门编号");
		user.setDepartNo(scanner.next());
		System.out.println("请输入要您要修改的性别");
		user.setSex(scanner.next());
		System.out.println("请输入要您要修改的年龄");
		user.setAge(scanner.nextInt());
		System.out.println("请输入要您要修改的角色");
		user.setRoloer(scanner.next());
		System.out.println("请输入要您要修改的备注");
		user.setRemark(scanner.next());
		int i=uDao.update(id, user);
		if(i>0){System.out.println("修改成功");}
		else {
			System.out.println("修改失败");
		}
	}
     
     /**
      * 删除
      * @param scanner
      * @throws Exception
      */
     public void deleteUser(Scanner scanner) throws Exception {
  		System.out.println("请输入要删除的id号");
        int id=scanner.nextInt();
        int i=uDao.delete(id);
		if(i>0){System.out.println("删除成功");}
		else {
			System.out.println("删除失败");
		}
	}
}

下面是jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ugrowstock
jdbc.user=root
jdbc.pwd=root








你可能感兴趣的:(java)