Java數據庫小項目02--管家婆項目


目錄

項目要求

開發環境搭建

工具類JDBCUtils

創建管家婆數據表

項目分層

MainApp層

MainView層

ZhangWuController層

ZhangWuService層

ZhangWuDao層

ZhangWu bean層

 

注:一個小技巧,寫注釋要空一格,要不然不容易導包進去

 

 

 

 

項目要求

開發環境搭建

mysql-connector-java-5.1.37----MySQL的JDBC驅動包,用於JDBC連接數據庫。

commons-dbutils-1.6---封裝並簡化了JDBC的數據庫操作語言

commons-dbcp-1.4------提供數據庫連接池組件。

commons-pool-1.5.6-----DBCP連接池依賴該包。

工具類JDBCUtils

使用在Java數據庫練習01中自己創建的JDBCUtils,一般來說對於第三方的工具類只要會使用即可。

創建管家婆數據表

gjp.sql文件:

 1 /*
 2   創建管家婆的數據庫
 3   名字 gjp
 4 */
 5 CREATE DATABASE gjp;
 6 
 7 USE gjp;
 8 
 9 /*
10   創建數據表,表名賬務
11   字段,列
12   主鍵
13   分類名稱  可變字符
14   金額  double
15   賬戶  可變字符 (支付,收入方法)
16   創建日期 date
17   賬務描述 可變字符
18 */
19 
20 CREATE TABLE gjp_zhangwu(
21    -- 主鍵
22    zwid INT PRIMARY KEY AUTO_INCREMENT,
23    -- 分類名稱   
24    flname VARCHAR(200),
25    -- 金額
26    money DOUBLE,
27    -- 賬戶
28    zhanghu VARCHAR(100),
29    -- 創建日期
30    createtime DATE,
31    -- 賬務描述
32    description  VARCHAR(1000)
33 );
34 SELECT * FROM gjp_zhangwu
35 
36 -- 寫入測試的數據
37 INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (1,'吃飯支出',247,'交通銀行','2016-03-02','家庭聚餐');
38 INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (2,'工資收入',12345,'現金','2016-03-15','開工資了');
39 INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (3,'服裝支出',1998,'現金','2016-04-02','買衣服');
40 INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (4,'吃飯支出',325,'現金','2016-06-18','朋友聚餐');
41 INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (5,'股票收入',8000,'工商銀行','2016-10-28','股票大漲');
42 INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (6,'股票收入',5000,'工商銀行','2016-10-28','股票又大漲');
43 INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (7,'工資收入',5000,'交通銀行','2016-10-28','又開工資了');
44 INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (8,'禮金支出',5000,'現金','2016-10-28','朋友結婚');
45 INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (9,'其他支出',1560,'現金','2016-10-29','丟錢了');
46 INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (10,'交通支出',2300,'交通銀行','2016-10-29','油價還在漲啊');
47 INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (11,'吃飯支出',1000,'工商銀行','2016-10-29','又吃飯');
48 INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (12,'工資收入',1000,'現金','2016-10-30','開資');
49 INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (13,'交通支出',2000,'現金','2016-10-30','機票好貴');
50 INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (14,'工資收入',5000,'現金','2016-10-30','又開資');

項目分層

不允許跨層調用

MainApp層

 1 package gjp.app;
 2 
 3 import gjp.view.MainView;
 4 
 5 /*
 6  * 主程序類用來啟動結束程序
 7  */
 8 public class MainApp {
 9     public static void main(String[] args) {
10         new MainView().run();//啟動run方法
11     }    
12 }

MainView層

  1 package gjp.view;
  2 
  3 import java.util.List;
  4 import java.util.Scanner;
  5 
  6 import gjp.controller.ZhangWuController;
  7 import gjp.domain.ZhangWu;
  8 
  9 /*
 10  * 視圖層,用戶操作的界面將數據傳遞給controller層實現
 11  *功能實現:完成功能界面菜單顯示  
 12  *            接收鍵盤輸入的功能選項
 13  *                  根據選項值,調用對應的功能方法
 14  */
 15 public class MainView {
 16     private ZhangWuController controller =new ZhangWuController();
 17     Scanner sc=new Scanner(System.in);
 18     public void run(){
 19         //Scanner sc=new Scanner(System.in);
 20         boolean flag = true;        
 21         while(true){
 22             System.out.println("---------------管家婆家庭記賬軟件---------------");
 23             System.out.println("1.添加賬務 2.編輯賬務 3.刪除賬務 4.查詢賬務 5.退出系統");
 24             System.out.println("請輸入要操作的功能序號[1-5]:");
 25             int choose=sc.nextInt();
 26             switch(choose){
 27                 case 1:
 28                     addZhangWu();
 29                     break;
 30                 case 2:
 31                     editZhangWu();
 32                     break;
 33                 case 3:
 34                     deleteZhangWu();
 35                     break;
 36                 case 4:
 37                     selectZhangWu();
 38                     break;
 39                 case 5:
 40                     System.out.println("再見!");
 41                     flag = false;
 42                     break;
 43                 default:
 44                     System.out.println("輸入錯誤!");
 45             }
 46         }
 47     }
 48     
 49     //添加賬務方法
 50     public void addZhangWu(){
 51         //Scanner sc=new Scanner(System.in);
 52         System.out.println("選擇的是添加賬務功能,請輸入以下內容:");
 53         System.out.println("輸入分類名稱:");
 54         String flname=sc.next();//不要使用sc.nextLine()因為輸入數據時會有空格就被下一個接收到了
 55         System.out.println("輸入金額:");
 56         double money=sc.nextDouble();
 57         System.out.println("輸入賬戶:");
 58         String zhanghu =sc.next();
 59         System.out.println("請輸入日期格式為:YYYY-MM-DD");
 60         String createtime=sc.next();
 61         System.out.println("輸入具體描述:");
 62         String description=sc.next();
 63         //將用戶輸入的數據封裝成一個對象,id是沒有輸入的,也不能修改可以寫成0,其實在構造函數時也可以把id這一項刪去
 64         ZhangWu zw=new ZhangWu(0, flname, money, zhanghu, createtime, description); 
 65         //調用comtroller層的添加方法
 66         controller.addZhangWu(zw);
 67         System.out.println("添加成功!");
 68     }
 69     
 70     
 71     /*
 72      * 查詢方法實現--1 所有查詢  2 條件查詢
 73      */
 74     public void selectZhangWu() {
 75         System.out.println("1.查詢所有 2.按條件查詢");
 76         Scanner in = new Scanner(System.in);
 77         int choose = in.nextInt();
 78         switch (choose) {
 79         case 1:
 80             selectAll();
 81             break;
 82         case 2:
 83             select();
 84             break;
 85         default:
 86             System.out.println("輸入錯誤!");
 87         }
 88     }
 89     //全部查詢
 90     public void selectAll() {
 91         //調用控制層的方法查詢所有的賬務數據
 92         List<ZhangWu> list =controller.selectAll();
 93         print(list);
 94     }
 95     /*
 96      * 實現條件查詢,用戶輸入開始日期和結束日期
 97      * 將兩個參數傳遞到controller層,並獲取結果集打印出來
 98      */
 99     public void select(){
100         Scanner sc=new Scanner(System.in);
101         System.out.println("選擇的為條件查詢,請輸入日期格式為:YYYY-MM-DD");
102         System.out.println("請輸入開始日期:");
103         String startDate=sc.nextLine();
104         System.out.println("請輸入結束日期:");
105         String endDate=sc.nextLine();
106         List<ZhangWu> list =controller.select(startDate,endDate);
107         //不寫在ptrint里面是因為避免浪費
108         if(list.size()!=0)
109             print(list);
110         else
111             System.out.println("沒有查詢到數據");
112     }
113     
114     //使用快捷鍵alt+shift+m抽取方法
115     private void print(List<ZhangWu> list) {
116         //輸出表頭
117         System.out.println("ID\t\t類別\t\t賬戶\t\t金額\t\t時間\t\t說明");
118         for(ZhangWu zw:list){
119             System.out.println(zw.getZwid()+"\t\t"+zw.getFlname()+"\t\t"+zw.getZhanghu() + "\t\t"
120                         + zw.getMoney() + "\t\t" + zw.getCreatetime() + "\t" + zw.getDescription());
121         }
122     }
123     
124     private void editZhangWu(){
125         
126         //先把所有的信息顯示出來
127         selectAll();
128         System.out.println("選擇是編輯功能,請輸入數據");
129         System.out.println("輸入ID");
130         int zwid=sc.nextInt();
131         System.out.println("輸入分類名稱:");
132         String flname=sc.next();
133         System.out.println("輸入金額:");
134         double money=sc.nextDouble();
135         System.out.println("輸入賬戶:");
136         String zhanghu =sc.next();
137         System.out.println("請輸入日期格式為:YYYY-MM-DD");
138         String createtime=sc.next();
139         System.out.println("輸入具體描述:");
140         String description=sc.next();
141         //將用戶輸入的數據封裝成一個對象,輸入的有id必須要封裝
142         ZhangWu zw=new ZhangWu(zwid, flname, money, zhanghu, createtime, description); 
143         //調用comtroller層的添加方法
144         controller.editZhangWu(zw);
145         System.out.println("添加成功!");
146     }
147     
148     //刪除賬務
149     public void deleteZhangWu(){
150         selectAll();
151         System.out.println("選擇的刪除功能,請輸入需要刪除的ID:");
152         int zwid=sc.nextInt();
153         //調用comtroller層的刪除方法
154         controller.deletehangWu(zwid);
155         System.out.println("刪除成功!");
156     }
157 }

ZhangWuController層

 1 package gjp.controller;
 2 
 3 import java.util.List;
 4 
 5 import gjp.domain.ZhangWu;
 6 import gjp.service.ZhangWuService;
 7 
 8 /*
 9  * 控制器層,接收視圖層數據傳遞給service層
10  */
11 public class ZhangWuController {
12     private static ZhangWuService service=new ZhangWuService();    
13     /*
14      * 定義查詢所有賬務數據的方法由視圖層調用
15      * 去調用service層的方法
16      */
17     public List<ZhangWu> selectAll(){
18         return service.selectAll();
19     }
20     //定義條件查詢
21     public List<ZhangWu> select(String startDate,String endDate){
22         return service.select(startDate,endDate);
23     }
24     
25     //添加賬務,由視圖層調用,傳遞過來的不是5個參數而是一個zhangwu對象
26     public void addZhangWu(ZhangWu zw) {
27         service.addZhangWu(zw);
28     }
29     
30     //修改賬務
31     public void editZhangWu(ZhangWu zw){
32         service.editZhangWu(zw);
33     }
34     //刪除賬務
35     public void deletehangWu(int zwid) {
36         // TODO Auto-generated method stub
37         service.deletehangWu(zwid);
38     }
39 }

ZhangWuService層

 1 package gjp.service;
 2 
 3 import java.util.List;
 4 
 5 import gjp.dao.ZhangWuDao;
 6 import gjp.domain.ZhangWu;
 7 
 8 /*
 9  * 業務層類,接收上一層controller的數據,經過計算傳遞給dao層 
10  */
11 public class ZhangWuService {
12     private static ZhangWuDao dao=new ZhangWuDao();
13     /*
14      * 定義方法查詢所有數據,此方法由控制層調用
15      * 去調用dao層的方法
16      * 返回存儲ZhangWu對象的List集合
17      */
18     public List<ZhangWu> selectAll(){
19         return dao.selectAll();
20     }
21     //定義條件查詢
22     public List<ZhangWu> select(String startDate,String endDate){
23         return dao.select(startDate,endDate);
24     }
25     
26     //添加賬務
27     public static void addZhangWu(ZhangWu zw) {
28         dao.addZhangWu(zw);
29     }
30     //編輯賬務
31     public void editZhangWu(ZhangWu zw) {
32         // TODO Auto-generated method stub
33         dao.editZhangWu(zw);
34     }
35     //刪除賬務
36     public void deletehangWu(int zwid) {
37         // TODO Auto-generated method stub
38         dao.deletehangWu(zwid);
39     }
40 }

ZhangWuDao層

 1 package gjp.dao;
 2 
 3 import java.sql.SQLException;
 4 import java.util.List;
 5 
 6 import org.apache.commons.dbutils.QueryRunner;
 7 import org.apache.commons.dbutils.handlers.BeanListHandler;
 8 
 9 import gjp.domain.ZhangWu;
10 import gjp.tools.JDBCUtils;
11 
12 /*
13  * 用來實現對數據表數據的增刪該查操作
14  * 使用工具類完成QueryRunnerd對象的創建,指定數據源
15  */
16 
17 public class ZhangWuDao {
18     private QueryRunner qr= new QueryRunner(JDBCUtils.getDataSource());
19     /*
20      * 定義方法查詢數據庫,獲取所有賬務的數據
21      * 由業務層調用
22      * 查詢到的是一個結果集將所有的賬務數據存儲到Bean對象的及集合中。
23      */
24     public List<ZhangWu> selectAll(){
25         try{
26             //查詢賬務數據的SQL語句
27             String sql="select * from gjp_zhangwu";
28             //調用qr對象的query方法,使用結果集BeanListHandler
29             List<ZhangWu> list =qr.query(sql,new BeanListHandler<>(ZhangWu.class));
30             return list;
31         }catch(SQLException ex){
32             System.out.println(ex);
33             throw new RuntimeException("查詢所有賬務失敗!");
34         }        
35     }
36     //條件查詢
37     public List<ZhangWu> select(String startDate,String endDate){
38         try{
39             //查詢賬務數據的SQL語句
40             String sql = "SELECT * FROM gjp_zhangwu WHERE createtime BETWEEN ? AND ?";
41             //定義數組對象存儲問號占位符
42             Object[] params ={startDate,endDate};
43             //調用qr對象的query方法,使用結果集BeanListHandler
44             List<ZhangWu> list =qr.query(sql,new BeanListHandler<>(ZhangWu.class),params);
45             return list;
46         }catch(SQLException ex){
47             System.out.println(ex);
48             throw new RuntimeException("條件查詢賬務失敗!");
49         }        
50     }
51     
52     //添加賬務方法
53     public void addZhangWu(ZhangWu zw) {
54         try{
55              //獲取sql語句
56             String sql = "INSERT INTO gjp_zhangwu (flname,money,zhanghu,createtime,description) VALUES(?,?,?,?,?)";
57             //保存占位符參數
58             Object[] params = {zw.getFlname(),zw.getMoney(),zw.getZhanghu(),zw.getCreatetime(),zw.getDescription()};
59             //更新數據
60             qr.update(sql, params);
61         }catch(SQLException ex) {
62             System.out.println(ex);
63             throw new RuntimeException("添加賬務失敗!");
64         }
65     }
66     //編輯賬務
67     public void editZhangWu(ZhangWu zw) {
68         // TODO Auto-generated method stub
69         try {
70             // 修改sql語句
71             String sql = "UPDATE gjp_zhangwu SET flname=?,money=?,zhanghu=?,createtime=?,description=? WHERE zwid=?";
72             // 存儲占位符
73             Object[] params = { zw.getFlname(), zw.getMoney(), zw.getZhanghu(), zw.getCreatetime(), zw.getDescription(),zw.getZwid() };
74             qr.update(sql, params);
75         } catch (SQLException ex) {
76             System.out.println(ex);
77             throw new RuntimeException("編輯賬務失敗");
78         }    
79     }
80     
81     public void deletehangWu(int zwid) {
82         // TODO Auto-generated method stub
83         try {
84             //刪除語句
85             String sql = "DELETE FROM gjp_zhangwu WHERE zwid=?";
86             qr.update(sql, zwid);
87         } catch (SQLException ex) {
88             System.out.println(ex);
89             throw new RuntimeException("數據刪除失敗!");
90         }
91     }
92 }

ZhangWu bean層

 1 package gjp.domain;
 2 
 3 /*
 4  * 用來封裝信息的JavaBean,復用代碼
 5  */
 6 public class ZhangWu {
 7     private int  zwid;      
 8     private String flname;     
 9     private double  money;       
10     private String zhanghu;    
11     private String createtime;//把日期用字符串類型存儲方便轉換     
12     private String description;
13     
14     //無參構造
15     public ZhangWu(){}    
16     public ZhangWu(int zwid, String flname, double money, String zhanghu, String createtime, String description) {
17         this.zwid = zwid;
18         this.flname = flname;
19         this.money = money;
20         this.zhanghu = zhanghu;
21         this.createtime = createtime;
22         this.description = description;
23     }
24     
25     //生成get set方法
26     public int getZwid() {
27         return zwid;
28     }
29     public void setZwid(int zwid) {
30         this.zwid = zwid;
31     }
32     public String getFlname() {
33         return flname;
34     }
35     public void setFlname(String flname) {
36         this.flname = flname;
37     }
38     public double getMoney() {
39         return money;
40     }
41     public void setMoney(double money) {
42         this.money = money;
43     }
44     public String getZhanghu() {
45         return zhanghu;
46     }
47     public void setZhanghu(String zhanghu) {
48         this.zhanghu = zhanghu;
49     }
50     public String getCreatetime() {
51         return createtime;
52     }
53     public void setCreatetime(String createtime) {
54         this.createtime = createtime;
55     }
56     public String getDescription() {
57         return description;
58     }
59     public void setDescription(String description) {
60         this.description = description;
61     }    
62     
63 }

 

 

 

 

0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM