java使用dbutils工具类实现小程序 管家婆记账软件

时间:2023-03-09 00:55:15
java使用dbutils工具类实现小程序 管家婆记账软件

1.所需创建的包和 jar包

java使用dbutils工具类实现小程序 管家婆记账软件

2.创建表结构

java使用dbutils工具类实现小程序 管家婆记账软件

 #生成一些表数据

INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (1,'吃饭支出',247,'交通银行','2016-03-02','家庭聚餐');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (2,'工资收入',12345,'现金','2016-03-15','开工资了');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (3,'服装支出',1998,'现金','2016-04-02','买衣服');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (4,'吃饭支出',325,'现金','2016-06-18','朋友聚餐');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (5,'股票收入',8000,'工商银行','2016-10-28','股票大涨');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (6,'股票收入',5000,'工商银行','2016-10-28','股票又大涨');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (7,'工资收入',5000,'交通银行','2016-10-28','又开工资了');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (8,'礼金支出',5000,'现金','2016-10-28','朋友结婚');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (9,'其他支出',1560,'现金','2016-10-29','丢钱了');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (10,'交通支出',2300,'交通银行','2016-10-29','油价还在涨啊');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (11,'吃饭支出',1000,'工商银行','2016-10-29','又吃饭');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (12,'工资收入',1000,'现金','2016-10-30','开资');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (13,'交通支出',2000,'现金','2016-10-30','机票好贵');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (14,'工资收入',5000,'现金','2016-10-30','又开资');

3.代码

javabean类

package com.company.gjp.domain;

public class ZhangWu {
private int zwid; private String flname; private double money; private String zhanghu; private String createtime; private String description; public ZhangWu(){ } public ZhangWu(int zwid, String flname, double money, String zhangwu, String createtime, String description) {
super();
this.zwid = zwid;
this.flname = flname;
this.money = money;
this.zhanghu = zhangwu;
this.createtime = createtime;
this.description = description;
} public int getZwid() {
return zwid;
} public void setZwid(int zwid) {
this.zwid = zwid;
} public String getFlname() {
return flname;
} public void setFlname(String flname) {
this.flname = flname;
} public double getMoney() {
return money;
} public void setMoney(double money) {
this.money = money;
} public String getZhanghu() {
return zhanghu;
} public void setZhanghu(String zhanghu) {
this.zhanghu = zhanghu;
} public String getCreatetime() {
return createtime;
} public void setCreatetime(String createtime) {
this.createtime = createtime;
} public String getDescription() {
return description;
} public void setDescription(String description) {
this.description = description;
} @Override
public String toString() {
return "ZhangWu [zwid=" + zwid + ", flname=" + flname + ", money=" + money + ", zhanghu=" + zhanghu
+ ", createtime=" + createtime + ", description=" + description + "]";
} }

数据库连接的工具类,使用连接池的方式

package com.company.gjp.tools;
/*
* 获取数据库连接的工具类
* 实现连接池,dbcp连接池
*/ import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; public class JDBCUtils {
//创建BasicDatasource对象
private static BasicDataSource dataSource=new BasicDataSource(); //静态代码块,实现必要参数设置
static{
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/gjp");
dataSource.setUsername("root");
dataSource.setPassword("123456"); dataSource.setMaxActive(10);
dataSource.setMaxIdle(5);
dataSource.setMinIdle(2);
dataSource.setInitialSize(10);
} public static DataSource getDataSource(){ return dataSource;
}
}

开启程序的主方法类

package com.company.gjp.app;

import com.company.gjp.view.MainView;

/*
* 主程序,作用:开启软件程序
*/
public class MainApp {
public static void main(String[] args) {
new MainView().run();
}
}

主视图类,用于用户的输入输出,以及向controller层请求数据的类

package com.company.gjp.view;
/*
* 视图层,用户看到和操作的界面
* 数据传递给controller层实现
* 成员位置,创建controller对象
*/ import java.util.List;
import java.util.Scanner; import com.company.gjp.controller.ZhangWuController;
import com.company.gjp.domain.ZhangWu; public class MainView {
private ZhangWuController controller=new ZhangWuController(); /*
* 实现界面效果
* 接受用户的输入
* 根据数据,调用不同的功能方法
*/
public void run(){
//创建Scanner类对象,反复键盘输入
Scanner sc=new Scanner(System.in);
while(true){
System.out.println("---------------管家婆家庭记账软件---------------");
System.out.println("1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统");
System.out.println("请输入要操作的功能序号[1-5]:");
//接受用户的选择
int choose=sc.nextInt();
//对选择的菜单判断,调用不同的功能
switch(choose){
case 1:
//选择添加账务,调用添加账务的方法
addZhangWu();
break;
case 2:
editZhangWu();
//编辑账务,调用编辑账务的方法
break;
case 3:
deleteZhangWu();
//选择的删除账务,调用删除账务方法
break;
case 4:
selectZhangWu();
//选择查询账务,调用查询账务的方法
break;
case 5:
System.exit(0); }
}
}
/**
* 接受键盘输入的账务id
*
*/
public void deleteZhangWu(){
selectAll();
System.out.println("选择的是删除功能,请输入你要删除的账务ID");
Scanner sc=new Scanner(System.in);
int zwid=sc.nextInt();
controller.deleteZhangWu(zwid);
System.out.println("删除账务成功!");
} /**
* 接受键盘输入
* 数据的信息,封装成ZhangWu对象
* 调用控制层的方法,传递ZhangWu对象,实现编辑
*/
public void editZhangWu(){
//用查询所有账务数据的功能,显示出来
//看到所有数据,从中选择一项,进行修改
selectAll();
System.out.println("选择的是编辑功能,请输入数据");
Scanner sc=new Scanner(System.in);
//接受用户的数据
System.out.println("输入ID:");
int zwid=sc.nextInt();
System.out.print("请输入类别:");
String flname=sc.next();
System.out.print("请输入账户:");
String zhanghu=sc.next();
System.out.print("请输入金额:");
Double money=sc.nextDouble();
System.out.print("请输入时间:");
String createtime=sc.next();
System.out.print("请输入说明:");
String description=sc.next();
//将所有用户输入的数据,封装到ZhangWu对象中
//输入的ID,必须封装对象
ZhangWu zw=new ZhangWu(zwid,flname,money,zhanghu,createtime,description);
//调用controller层中的方法,编辑账务
controller.editZhangWu(zw);
System.out.println("账务编辑成功!"); } /**
* 接受键盘输入,5项输入,调用controller层方法
*/
public void addZhangWu(){
Scanner sc = new Scanner(System.in); System.out.print("请输入类别:");
String flname=sc.next();
System.out.print("请输入账户:");
String zhanghu=sc.next();
System.out.print("请输入金额:");
Double money=sc.nextDouble();
System.out.print("请输入时间:");
String createtime=sc.next();
System.out.print("请输入说明:");
String description=sc.next();
//将接收到的数据,调用controller层的方法,传递参数
//将用户输入的所有参数,封装成ZhangWu对象
ZhangWu zw=new ZhangWu(0,flname,money,zhanghu,createtime,description);
controller.addZhangWu(zw);
System.out.println("恭喜你添加账务成功");
} /*
* 定义方法selectZhangWu()
* 显示查询的方式1.所有查询 2.条件查询
* 接受用户的选择
*/
public void selectZhangWu(){
System.out.println("1.查询所有 2.条件查询");
Scanner sc=new Scanner(System.in);
int selectChoose=sc.nextInt();
//判断根据用户的选择,调用不同的功能
switch(selectChoose){
case 1:
selectAll();
break;
case 2:
select();
break;
}
} /**
* 定义方法,实现查询所有的账务数据
*/
public void selectAll(){
//调用控制中的方法,查询账务的数据
List<ZhangWu> list=controller.selectAll();
//输出表头
print(list);
} /**
* 定义方法,实现条件查询账务数据
* 提供用户的输入日期,开始日期结束日期
* 就2个日期,传递到controller层
* 调用controller的方法,传递2个日期参数
* 获取controller查询的结果集,打印出来
*/
public void select(){
System.out.println("选择条件查询,格式xxxx-xx-xx");
Scanner sc=new Scanner(System.in);
System.out.println("请输入开始日期:");
String startDate=sc.nextLine();
System.out.println("输入结束的日期:");
String endDate=sc.nextLine();
//调用controller层的方法,传递日期,获取查询结果集
List<ZhangWu> list=controller.select(startDate, endDate);
if(list.size()!=0){
print(list);
}else{
System.out.println("没有查询到数据");
}
} //输出账务数据方法,接受List集合,遍历集合,输出表格
private void print(List<ZhangWu> list) {
System.out.println("ID\t\t类别\t\t账户\t\t金额\t\t时间\t\t说明");
//遍历集合,结果输出控制台
for(ZhangWu zw:list){
System.out.println(zw.getZwid()+"\t\t"+zw.getFlname()+"\t\t"+zw.getZhanghu()
+"\t\t"+zw.getMoney()+"\t\t"+zw.getCreatetime()+"\t\t"+zw.getDescription());
}
}
}

控制层类,用于向service层请求数据

package com.company.gjp.controller;
/*
* 控制器层
* 接受视图层的数据,数据传递给service层
* 成员位置,创建service对象
*/ import java.util.List; import com.company.gjp.domain.ZhangWu;
import com.company.gjp.service.ZhangWuService;
public class ZhangWuController{
private ZhangWuService service=new ZhangWuService(); /**
* 定义方法,实现删除账务
*
*/
public int deleteZhangWu(int zwid){
return service.deleteZhangWu(zwid);
} /**
* 定义方法,实现编辑账务
*/
public int editZhangWu(ZhangWu zw){
return service.editZhangWu(zw);
} /**
* 定义方法,实现增加账务
*/
public int addZhangWu(ZhangWu zw){
return service.addZhangWu(zw);
} /**
* 定义方法,实现条件查询账务
* 方法由试图层调用,传递两个日期的字符串
* 调用Service层的方法,传递两个日期字符串,获取结果集
* 结果返回给试图
*/
public List<ZhangWu> select(String startDate,String endDate){
return service.select(startDate,endDate);
} /**
* 控制层类定义方法,实现查询所有的账务数据
* 方法由视图层调用,
* 结果集,将所有的账务数据,存储到Bean对象中,存储到集合中
*/
public List<ZhangWu> selectAll(){
return service.selectAll();
} }

业务层类 service向dao层请求数据

package com.company.gjp.service;
/*
* 业务层类
* 接受上一层,控制层controller的数据
* 经过计算,传递给dao层,操作数据库
* 调用dao层中的类,类成员位置,创建Dao类的对象
*/ import java.util.List; import com.company.gjp.dao.ZhangWuDao;
import com.company.gjp.domain.ZhangWu;
public class ZhangWuService {
private ZhangWuDao dao=new ZhangWuDao(); public int deleteZhangWu(int zwid){
return dao.deleteZhangWu(zwid);
} public int editZhangWu(ZhangWu zw){
return dao.editZhangWu(zw);
} public int addZhangWu(ZhangWu zw){
return dao.addZhangWu(zw);
} /**
* 定义方法,实现条件查询账务
* 方法由控制层调用,传递2个日期字符串
* 调用dao层的方法,传递2个日期字符串
* 获取到查询结果集
*/
public List<ZhangWu> select(String startDate,String endDate){ return dao.select(startDate,endDate); } /**
* 定义方法,实现查询所有的账务数据
* 此方法,由控制层调用,去调用dao层的方法
* 返回存储 ZhangWu对象的List集合
*/ public List<ZhangWu> selectAll(){
return dao.selectAll();
}
}

dao层类,处理数据类,直接向数据库请求数据

package com.company.gjp.dao;

import java.sql.SQLException;
import java.util.List; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler; import com.company.gjp.domain.ZhangWu;
import com.company.gjp.tools.JDBCUtils; /*
* 实现对数据表gjp_zhangwu 数据增删改查操作,
* dbutils工具类完成,类成员创建QueryRunner对象,指定数据源
*/
public class ZhangWuDao {
private QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource()); /**
* 定义方法,实现删除账务
* 传递主键ID即可
*/
public int deleteZhangWu(int zwid){
try{
String sql="delete from gjp_zhangwu where zwid=?";
return qr.update(sql,zwid);
}catch (SQLException e){
System.out.println(e);
throw new RuntimeException();
}
} /**
* 定义方法,实现编辑账务(即修改账务)
* 由业务层调用,传递ZhangWu对象
* 将对象中的数据,更新到数据表
*/
public int editZhangWu(ZhangWu zw){
try{
String sql="update gjp_zhangwu set flname=?,money=?,zhanghu=?,createtime=?,description=? where zwid=? ";
Object[] params={zw.getFlname(),zw.getMoney(),zw.getZhanghu(),zw.getCreatetime(),zw.getDescription()
,zw.getZwid()};
return qr.update(sql,params);
}catch (SQLException e){
System.out.println(e);
throw new RuntimeException("账务编辑失败");
} } /**
* 定义方法,实现添加账务功能
* 由业务层调用,传递ZhangWu对象
* 将ZhangWu对象中的数据,添加到数据表
*/
public int addZhangWu(ZhangWu zw){
//拼写数据的sql
try{
String sql="insert into gjp_zhangwu (flname,money,zhanghu,createtime,description) values"
+ "(?,?,?,?,?)";
//创建对象数组,存储5个占位符的实际参数
//实际参数来源是,传递过来的对象是ZhangWu
Object[] params={zw.getFlname(),zw.getMoney(),zw.getZhanghu(),zw.getCreatetime()
,zw.getDescription()};
return qr.update(sql,params); }catch (Exception e){
System.out.println(e);
throw new RuntimeException("账务添加失败");
}
} /**
* 定义方法,查询数据库,带有条件去查询账务表
* 由业务层调用,查询结果集存储到Bean对象,存储到List集合
* 调用者传递2个日期字符串
*/
public List<ZhangWu> select(String startDate,String endDate){
//拼写条件查询的sql语句
try{
String sql="select * from gjp_zhangwu where createtime between ? and ?";
//定义对象数组,存储?占位符
Object[] params={startDate,endDate};
List<ZhangWu> list=qr.query(sql, new BeanListHandler<>(ZhangWu.class),params);
return list;
}catch (SQLException e){
System.out.println(e);
throw new RuntimeException("条件查询失败");
}
} /**
* 定义方法,查询数据库,获取所有的账务数据
* 方法,由业务层调用
* 结果集,将所有的账务数据,存储到Bean对象中,存储到集合中
*/
public List<ZhangWu> selectAll(){
//查询账务数据的SQL语句
try{
String sql="select * from gjp_zhangwu";
//调用qr对象的方法,query方法,结果集BeanListHandler
List<ZhangWu> list=qr.query(sql, new BeanListHandler<>(ZhangWu.class));
return list;
}catch (SQLException e){
System.out.println(e);
throw new RuntimeException("查询所有账务失败");
}
}
}

4.效果演示

java使用dbutils工具类实现小程序 管家婆记账软件

java使用dbutils工具类实现小程序 管家婆记账软件

java使用dbutils工具类实现小程序 管家婆记账软件

java使用dbutils工具类实现小程序 管家婆记账软件

java使用dbutils工具类实现小程序 管家婆记账软件