1问题定义
这个程序设计可以对用户信息,部门信息进行增删改查,而且可以通过部门来对用户信息进行增删改查。
2开发工具
Mysql数据库,eclipse。
3设计过程
3.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用户管理界面及功能的实现
进入用户管理界面,会有对用户信息的增删改查以及返回上一级的功能实现。选择想要实现的功能并输入相应的数字,如下图:
在选择相应功能的时候,service层调用dao层的查询方法,在Menu类中对service层的方法进行调用,就是说分别在service层中new一个dao类的对象,在Menu类中new一个service类的对象。
3.5.1查询用户信息
(1)此时,在Menu类中会调用UserService中的showUserList()方法。
public void showUserList() throws Exception{ List<User> 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<User> list= uDao.findAll();表示调用UserDAO中的查询所有用户信息的方法,并且将所得数据交由List保存。通过List接口的get方法取出所保存的数据。
(2) 下面是UserDAOImpl中的查询所有用户信息的方法:
public List<User> findAll()throws SQLException{ String sql="Select * from user"; Connection conn= DBUtils.getConnection(); PreparedStatement state=conn.prepareStatement(sql); ResultSet i=state.executeQuery(); List<User> list=new ArrayList<User>(); 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<Dept> 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<Dept> infdept() throws Exception { String sql="select * from dept"; Connection conn= DBUtils.getConnection(); PreparedStatement prepareStatement =conn.prepareStatement(sql); ResultSet i =prepareStatement.executeQuery(); List<Dept> list=new ArrayList<Dept>(); 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<User> 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<User> list= deptDAO.infdeptUser(name);表示调用deptDAO中的查询某个部门名称的员工信息,并且将所得数据交由List保存。通过List接口的get方法取出所保存的数据。是在部门中查询用户信息,所以list对象只是存储User类的值。
(2)在DeptDAOImpl中的infdeptUser()方法如下:
public List<User> 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<User> list=new ArrayList<User>(); 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<User> 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<User> 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<User> 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项目目录
下面分别是各个类的具体代码:
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<Dept> infdept()throws Exception; //查询部门用户信息 public List<User> 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<User> 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<Dept> 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<Dept> list=new ArrayList<Dept>(); 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<User> 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<User> list=new ArrayList<User>(); 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<User> 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<User> findAll() throws Exception { String sql="select * from user"; /* QueryRunner runner=new QueryRunner(); List<User> list = (List<User>) runner.query(DBUtils.getConnection(), sql, new BeanListHandler<User>(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<User> list=new ArrayList<User>(); 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<User> 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<Dept> 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<User> 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<User> 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<User> 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<User> 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<User> 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>(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<User> findAll()throws SQLException{ String sql="Select * from user"; /* QueryRunner runner=new QueryRunner(); List<User> list = (List<User>) runner.query(DBUtils.getConnection(), sql, new BeanListHandler<User>(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<User> list=new ArrayList<User>(); 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<User> 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<User> 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