2019年12月9日下午自习成果

一、成果

(1)构造好了表结构,可能不够完善,需要之后继续敲码的时候发现问题,解决问题。

一共创了两个表,一个是login表:

 id是自增的主键,name来记录登录人的职务相应的number与登录人相对应,number里面存的数字是相应人的权限编码。

account是账号,password是密码,登陆的时候根据账号和密码对应个人。然后通过session来获取登陆人的信息,一次来分配权限。

另外为了判断页面是否接收到了登录人的信息,我在主页面上设置了欢迎,不同人登陆会有不同的信息。

(2)构造好表结构后连接数据库,定义servlet,Dao层,以及JavaBean进行数据的封装。

package Dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import Bean.login;
import DBUtil.DBUtil;


public class LoginDao {
    ////添加到   %表名%   表中
        public boolean insert(login login){
            //插入的sql语句
            String sql="insert into official_login(name,number,account,password) values('"+login.getName()+"','"+login.getNumber()+"','"+login.getAccount()+"','"+login.getPassword()+"')";
            //insert语句:
            //insert into table_name (column1,column2,column3,...) values (value1,value2,value3,...);
            //注意:insert这里 values(100,'String','"+bianliang+"'),数字可以直接上,字符串的话用 '',变量的话要用 '"++"'
            
            Connection conn=DBUtil.getConn();//添加数据库,加载驱动
            Statement state=null;//创建statement对象并置空
            try {
                
                //实例化statement对象  方便操作
                state=conn.createStatement();
                state.executeUpdate(sql);
                //执行数据库更新操作用于执行insert、update或delete语句以及SQLDDL(数据定义语言)语句,
                //例如creattable和droptable,(创建表和删除表)
                
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),
            //经常被用在需要释放资源的情况下。
            finally {
                DBUtil.close(state, conn);//clase 释放资源
            }
            
            return false;
        }
        
        ////根据ID删除
        
        public boolean delete(String name){
            //插入sql 语句
            String sql="delete from official_login where name='"+name+"'  ";
            
            //删除语句:
            //delete from table_name where some_colume=some_value
            
            Connection conn =DBUtil.getConn();
            Statement state=null;
            try {
                state=conn.createStatement();
                state.executeUpdate(sql);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            finally
            {
                DBUtil.close(state, conn);
            }
            return false;
        }
        
        
        ////根据ID更改
        
        public boolean update(login login) {
            //插入sql 语句
            String sql="update official_login set name='"+login.getName()+"',number='"+login.getNumber()+"',account='"+login.getAccount()+"' where name='"+login.getName()+"' ";
            //update语句:
            //update table_name set column1=value1,column2=value2  where some_column=some_value;
            
            Connection conn=DBUtil.getConn();
            Statement state=null;
            
            try {
                state=conn.createStatement();
                state.executeUpdate(sql);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            finally
            {
                DBUtil.close(state, conn);
            }
            
            return false;
        }
        
        
        
        ////按照ID查
        public String select(String account,String password) {
            //插入sql 语句
            String sql="select * from official_login where account='"+account+"' and password='"+password+"'";
            boolean flag=false;
            Connection conn=DBUtil.getConn();
            Statement state=null;
            ResultSet rs=null;
            
            try {
                state=conn.createStatement();
                rs=state.executeQuery(sql);
                login login=null;
                if(rs.next()) {
                    
                    System.out.println(rs.getString("name"));
                    return rs.getString("name");
                }
                
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                DBUtil.close(rs, state, conn);
            }
            
            return "";
        }
        //遍历
        public List<login> list(){
            //插入sql语句
            String sql="select * from official_login order by id asc";
            
            //select语句
            //select * from tabel_name   这是查询所有,若要查询某一列
            //select column1_name,column2_name,column3_name from table_name
            
            
            List<login>list=new ArrayList<>();
            //给集合list创造(new)一个存储空间用于存放数据
            
            
            Connection conn=DBUtil.getConn();
            Statement state=null;
            ResultSet rs=null;
            
            try{
                state=conn.createStatement();
                rs=state.executeQuery(sql);
                login login=null;
                while(rs.next()) {//注意:这里用双引号,ID是表user里的ID列
                    String name=rs.getString("name");
                    int id=rs.getInt("id");
                    String number=rs.getString("number");
                    String account=rs.getString("account");
                    String password=rs.getString("password");
                    login=new login(name,number,account,password);
                    list.add(login);
                    //表示,把bean里的数据存入到list当中
                }
            }
            catch (SQLException e)
            {
                e.printStackTrace();
            }
            finally
            {
                DBUtil.close(state, conn);
            }
            return list;
        }
        
        
        //验证ID唯一
        
        public boolean only(String name) {
            //定义标记
            boolean flag=false;
            //插入sql语句
            String sql="select * from official_login where ID = '"+name+"'";
            Connection conn=DBUtil.getConn();
            Statement state=null;
            ResultSet rs=null;
            
            try {
                state=conn.createStatement();
                rs=state.executeQuery(sql);
                //要用statement类的executeQuery()方法来下达select指令以查询数据库,
                //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供我们使用。
                while (rs.next()) {
                    flag = true;
                }
                
                
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                DBUtil.close(rs, state, conn);
            }
            
            return flag;
        }
        
        
}
LoginDao
package Dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import Bean.Passage;
import DBUtil.DBUtil;

public class PassageDao {
    //Dao层实现对数据库的操作
    
    
        ////添加到   %表名%   表中
        public boolean insert(Passage passage){
            //插入的sql语句
            String sql="insert into passage(passagename,status) values('"+passage.getPassagename()+"','"+passage.getStatus()+"')";
            //insert语句:
            //insert into table_name (column1,column2,column3,...) values (value1,value2,value3,...);
            //注意:insert这里 values(100,'String','"+bianliang+"'),数字可以直接上,字符串的话用 '',变量的话要用 '"++"'
            
            Connection conn=DBUtil.getConn();//添加数据库,加载驱动
            Statement state=null;//创建statement对象并置空
            try {
                
                //实例化statement对象  方便操作
                state=conn.createStatement();
                state.executeUpdate(sql);
                //执行数据库更新操作用于执行insert、update或delete语句以及SQLDDL(数据定义语言)语句,
                //例如creattable和droptable,(创建表和删除表)
                
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),
            //经常被用在需要释放资源的情况下。
            finally {
                DBUtil.close(state, conn);//clase 释放资源
            }
            
            return false;
        }
        
        ////根据ID删除
        
        public boolean delete(String name,String ID){
            //插入sql 语句
            String sql="delete from user where ID='"+ID+"' and name='"+name+"'  ";
            
            //删除语句:
            //delete from table_name where some_colume=some_value
            
            Connection conn =DBUtil.getConn();
            Statement state=null;
            try {
                state=conn.createStatement();
                state.executeUpdate(sql);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            finally
            {
                DBUtil.close(state, conn);
            }
            return false;
        }
        
        
        ////根据ID更改
        
        public boolean update(Passage passage) {
            //插入sql 语句
            String sql="update user set passagename='"+passage.getPassagename()+"',status='"+passage.getStatus()+"' where passagename ='"+passage.getPassagename()+"' ";
            //update语句:
            //update table_name set column1=value1,column2=value2  where some_column=some_value;
            
            Connection conn=DBUtil.getConn();
            Statement state=null;
            
            try {
                state=conn.createStatement();
                state.executeUpdate(sql);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            finally
            {
                DBUtil.close(state, conn);
            }
            
            return false;
        }
        
        
        
        ////按照ID查
        public Passage select(String passagename) {
            //插入sql 语句
            String sql="select * from passage where passagename='"+passagename+"'";
            
            Connection conn=DBUtil.getConn();
            Statement state=null;
            ResultSet rs=null;
            
            try {
                state=conn.createStatement();
                rs=state.executeQuery(sql);
                Passage passage=null;
                while(rs.next()) {
                    int status=rs.getInt("status");
                    passage=new Passage(passagename,status);
                    return passage;
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                DBUtil.close(rs, state, conn);
            }
            
            return null;
        }
        
        
        public List<Passage> selectByStatus(int status){
            //插入sql语句
            String sql="select * from passage where status = '"+status+"'";
            
            //select语句
            //select * from tabel_name   这是查询所有,若要查询某一列
            //select column1_name,column2_name,column3_name from table_name
            
            
            List<Passage>list=new ArrayList<>();
            //给集合list创造(new)一个存储空间用于存放数据
            
            
            Connection conn=DBUtil.getConn();
            Statement state=null;
            ResultSet rs=null;
            
            try{
                state=conn.createStatement();
                rs=state.executeQuery(sql);
                Passage passage=null;
                while(rs.next()) {//注意:这里用双引号,ID是表user里的ID列
                    String passagename=rs.getString("passagename");
                    passage=new Passage(passagename,status);
                    list.add(passage);
                    //表示,把bean里的数据存入到list当中
                }
            }
            catch (SQLException e)
            {
                e.printStackTrace();
            }
            finally
            {
                DBUtil.close(state, conn);
            }
            return list;
        }
        
        //遍历
        public List<Passage> list(){
            //插入sql语句
            String sql="select * from passage order by id asc";
            
            //select语句
            //select * from tabel_name   这是查询所有,若要查询某一列
            //select column1_name,column2_name,column3_name from table_name
            
            
            List<Passage>list=new ArrayList<>();
            //给集合list创造(new)一个存储空间用于存放数据
            
            
            Connection conn=DBUtil.getConn();
            Statement state=null;
            ResultSet rs=null;
            
            try{
                state=conn.createStatement();
                rs=state.executeQuery(sql);
                Passage passage=null;
                while(rs.next()) {//注意:这里用双引号,ID是表user里的ID列
                    String passagename=rs.getString("passagename");
                    int status=rs.getInt("status");
                    passage=new Passage(passagename,status);
                    list.add(passage);
                    //表示,把bean里的数据存入到list当中
                }
            }
            catch (SQLException e)
            {
                e.printStackTrace();
            }
            finally
            {
                DBUtil.close(state, conn);
            }
            return list;
        }
        
        
        //验证ID唯一
        
        public boolean only(String passagename) {
            //定义标记
            boolean flag=false;
            //插入sql语句
            String sql="select * from passage where passagename = '"+passagename+"'";
            Connection conn=DBUtil.getConn();
            Statement state=null;
            ResultSet rs=null;
            
            try {
                state=conn.createStatement();
                rs=state.executeQuery(sql);
                //要用statement类的executeQuery()方法来下达select指令以查询数据库,
                //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供我们使用。
                while (rs.next()) {
                    flag = true;
                }
                
                
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                DBUtil.close(rs, state, conn);
            }
            
            return flag;
        }
        
}
PassageDao
package Servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import Bean.login;
import Dao.LoginDao;


/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        
        String account=request.getParameter("account");
        String password=request.getParameter("password");
        LoginDao dao=new LoginDao();
        
        if(!dao.select(account, password).equals("")) {
        request.getSession().setAttribute("login", dao.select(account, password));
        request.setAttribute("message", "登陆成功");
        request.getRequestDispatcher("Head.html").forward(request, response);
        }else {
            request.setAttribute("message", "账号或密码错误");
            request.getRequestDispatcher("index.jsp").forward(request, response);
        }
        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
LoginServlet

(3)总结了公文的10个不同的状态(还没有验证,可能不够全面)

0:未交

1:刚到办公室

2:副厂长审核

3:副厂长审核完毕到办公室    3:同意  -3:不同意

4:厂长审核

5:厂长审核完毕到办公室      5:同意  -5:不同意

6:发至相关部门

7:签收公文

二、感想

  这个题目其实我一直没什么思路,原先一直想的是跟着黑马教程走,然后自然而然的就会了,但是今天下午自习完才发现,倘若不坐下来敲这个代码,思考这个问题,那么这个问题始终在那,不思考的话永远不会解决。我没有那样的聪明才智,不会说看课的时候突然有灵感,一拍脑门就会了。不过经过一下午的揣摩,我逐渐对这个题目有了思路。公文的状态很重要,页面动态读取公文的状态,相应的页面显示相应状态的公文。

原文地址:https://www.cnblogs.com/suanai/p/12012339.html