分包+項目彙總

上一篇將JDBC完成以後,若是要作一個完整的項目,須要在這個基礎上進行分包。sql

分包的意義在於將各我的的功能分開,程序運行更便利。數據庫

  • l view層做用: 視圖層,即項目中的界面
  • l controller層做用: 控制層, 獲取界面上的數據,爲界面設置數據; 將要實現的功能交給業務層處理
  • l service層做用: 業務層, 功能的實現, controller控制層和數據訪問層DAO交互, 將對數據庫的操做交給DAO數據訪問層來處理
  • l dao層做用: 數據訪問層, 用來操做數據庫表的數據
  • l db數據庫: 這裏指MySQL
  • l domain 實體包: 存放JavaBean
  • l tools工具包:存放項目中使用到的工具類
  • l test 測試包: 存放項目功能測試的代碼

  

每層的項目分部dom

view菜單層工具

domian 實體類測試

controller 中轉層spa

service 獲取dao層數據設計

dao層,數據庫層3d

tools工具類層code

test測試類對象

主要實現功能

這是主要功能,代碼由於過於多久不復制粘貼,主要是總結一下知識難點和一問題,還有一些容易混淆的地方

知識難點:

一、若是連續更新數據,若是隻是單純的方法聯合並不須要,但結合現實咱們發現,若是在修改某個數據時,每每是聯合修改的。這就顛覆了最初的邏輯,後來解決這個的辦法是採用了全局變量定義,局部變量在方法中定義,從而做爲形參傳入後續的方法中。如費用更新時的身份證,輸入的費用:

變量賦值:以後得到了某我的的身份證和費用數,從而使後面的我的信息表中的我的總金額累加+費用標記結清

第二是中間表的做用,它就是兩表之間的關係,如一個員工對應兩個房間,你沒法在房間表或員工表進行一個多條從新信息錄入,這違反了我設計表時一我的對應一條信息的原則。

那它們之間如何練習起來,就用到中間表,將兩表的主鍵放入,將關係存儲在中間表,從而若是須要查詢兩表經過它聯合便可。

中間表:

房間表:

 

員工表:

語句如何查詢:

2、容易混淆的地方

dao層的幾種處理結果集。

我用到的處理結果集,如果查詢,須要便利遍歷數據庫中的全部內容來輸出。其中分爲,方法的修飾符區別,若是有返回值類型,須要對它進行賦值遍歷。

    //年報表 方法重載
            public List< cost>  getBaobiao(int year ) throws SQLException{
                //得到鏈接對象
                Connection conn=JDBCUtils.getConn();
                //數據庫語句
                String sql="SELECT username,cost.`room_num`,cost.usercard,SUM(cost) "
                        + "FROM cost JOIN userinfo ON cost.`usercard`=userinfo.`usercard` "
                        + "WHERE TIME LIKE ? GROUP BY usercard";
                PreparedStatement pst=conn.prepareStatement(sql);
                //運行結果集
                pst.setString(1, "%"+year+"%");
                ResultSet rs=pst.executeQuery();
                //處理結果集
                List<cost> list=new ArrayList<cost>();
                while(rs.next()){
                    cost cost=new cost();
                    cost.setUsername(rs.getString("username"));//把數據庫的username的值給cost裏面的值
                    cost.setUsercard(rs.getString("usercard"));
                    cost.setRoom_num(rs.getInt("room_num"));
                    cost.setCost(rs.getDouble("sum(cost)"));    
                    list.add(cost);//最後是將封裝了四個字段的cost實體類添加到list集合中,泛型。
                }
                //System.out.println(list);
                //釋放資源
                JDBCUtils.close(rs, pst, conn);
                //返回一個list集合給前臺
                return list ;

增長修改,刪除經過int值來斷定是否成功,1成功,0失敗。

//新增cost表中數據
            public int addCost(UserInfo userinfo) throws SQLException{
                Connection conn=JDBCUtils.getConn();
                String sql="insert into cost(time,room_num,usercard,cost) values (?,?,?,?)";
                PreparedStatement pst=conn.prepareStatement(sql);
                //佔位符賦值
                pst.setString(1, userinfo.getStarttime());
                pst.setInt(2, userinfo.getRoom_num());
                pst.setString(3, userinfo.getUsercard());
                pst.setDouble(4, userinfo.getCost());
                //執行sql
                int row=pst.executeUpdate();
                //釋放資源
                JDBCUtils.close(pst, conn);
                return row;
            }

 

但有時有例外就是判斷查詢的內容有沒有。

如我想查詢全部未審批的有幾條信息,可是若是單純返回的我得到的是整個遍歷出來的東西,那就須要定義一個int來接收一下,while()中總共走了幾回知足數據庫代碼的次數,統計出來就是幾條未讀信息。

//統計未審批的數量
            public int  getBoss( ) throws SQLException{
                Connection conn=JDBCUtils.getConn();
                String sql="SELECT  count(*) FROM jilu WHERE shenpi='0'  and dengji='A'";
                PreparedStatement pst=conn.prepareStatement(sql);
                //pst.setInt(1, shenpi);
                ResultSet rs=pst.executeQuery();
                int count = 0;
                while (rs.next()) {
                    count = rs.getInt(1);
                }
                JDBCUtils.close(rs, pst, conn);
                return count;
            }    
相關文章
相關標籤/搜索