01项目训练目标

* A: 项目训练目标
* a: 项目目标
* 综合运用前面所学习的知识点
* 熟练View层、Service层、Dao层之间的方法相互调用操作、
* 熟练dbutils操作数据库表完成增删改查
* 了解公司项目开发的流程,充分的掌握项目需求分析、设计与功能的代码实现。提高独立分析需求与功能实现的能力。

02项目中的功能模块

* A: 项目中的功能模块
* a: 五大模块
* 查询账务
* 多条件组合查询账务
* 添加账务
* 编辑账务
* 删除账务

03技术的选择和相关jar包

* A: 技术的选择和相关jar包
* a: apache的commons组件:
* commons-dbutils-1.4.jar:封装并简化了JDBC;
* commons-dbcp-1.4.jar:apache commons提供的数据库连接池组件,命名为DBCP;
* b: commons.pool-1.3.jar:DBCP连接池依赖该jar包;
* mysql-connector-java-5.1.28-bin.jar:MySQL的JDBC驱动包,用JDBC连接MySQL数据库必须使用该JAR包。

04项目中的工具类

* A: 项目中的工具类
* a: 工具类的介绍
* 每个项目中都会有很多个工具类,不要求每个工具类对能独立写出来,但是要会使用工具类
* JDBCUtils:用来创建数据库连接池对象

05数据表的设计

* A: 数据表的设计
* a: 数据表的设计(详见:day34_source/表关系.JPG)
* 表与表之间是有关系的
* 主表和从表的关系
* 主表中的主键作为从表中的外键

06创建数据库数据表写入测试数据

* A: 创建数据库数据表写入测试数据
* a: 创建数据库数据表
/*
创建管家婆的数据库
名字 gjp
*/
CREATE DATABASE gjp;

USE gjp;

/*
创建数据表,表名账务
字段,列
主键
分类名称 可变字符
金额 double
账户 可变字符 (支付,收入方法)
创建日期 date
账务描述 可变字符
*/

CREATE TABLE gjp_zhangwu(
-- 主键
zwid INT PRIMARY KEY AUTO_INCREMENT,
-- 分类名称
flname VARCHAR(200),
-- 金额
money DOUBLE,
-- 账户
zhanghu VARCHAR(100),
-- 创建日期
createtime DATE,
-- 账务描述
description VARCHAR(1000)
);
SELECT * FROM gjp_zhangwu;
* b: 写入数据
-- 写入测试的数据
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','又开资');

07项目中的分层设计

* A: 项目中的分层设计
* a: 各层功能介绍
* view层作用: 视图层,即项目中的界面
* controller层作用: 控制层, 获取界面上的数据,为界面设置数据; 将要实现的功能交给业务层处理
* service层作用: 业务层, 功能的实现, 与controller控制层和数据访问层DAO交互, 将对数据库的操作交给DAO数据访问层来处理
* dao层作用: 数据访问层, 用来操作数据库表的数据
* db数据库: 这里指MySQL
* domain 实体包: 存放JavaBean
* tools工具包:存放项目中使用到的工具类
* test 测试包: 存放项目功能测试的代码

08创建项目分层导入jar包

* A: 创建项目_分层_导入jar包
* a: 创建工程包
* cn.itcast.gjp.app: 存放main方法类;
* cn.itcast.gjp.domain: 存放JavaBean;
* cn.itcast.gjp.view: 存放界面,及表现层类;
* cn.itcast.gjp.service: 存放业务层类;
* cn.itcast.gjp.dao: 存放数据访问层类;
* cn.itcast.gjp.tools:存放工具类
* b: 导入jar包
* 在项目根路径下建立文件夹lib
* 导入以下jar包
* mysql-connector-java-5.1.37-bin.jar:数据库驱动
* commons-dbutils-1.6.jar:提供QueryRunner类方便进行增删改查操作
* commons-dbcp-1.4.jar:
* commons-pool-1.5.6.jar:提供高效的数据库连接池技术
* 拷贝以上jar包,选定拷贝的jar包/右键/Build Path/Add to Build Path

09创建domain包中的类

* A: 创建domain包中的类
* a: 案例代码
public class ZhangWu {
private int zwid; private String flname; private double money; private String zhanghu; private String createtime; private String description;
//注意生成空参构造、有参构造、set和get方法、toString方法等
}

10创建JDBCUtils工具类

* A:创建JDBCUtils工具类
* a: 案例代码
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("123");
datasource.setMaxActive(10);
datasource.setMaxIdle(5);
datasource.setMinIdle(2);
datasource.setInitialSize(10);
}
public static DataSource getDataSource(){
return datasource;
}
}

11创建其他包中的类

* A: 创建其他包中的类
* a: cn.itcast.gjp.dao包中创建ZhangWuDao类
/*
* 实现对数据表 gjp_zhangwu 数据增删改查操作
* dbuils工具类完成,类成员创建QueryRunner对象,指定数据源
*/
public class ZhangWuDao {
private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
}
* b: cn.itcast.gjp.service包中创建ZhangWuService类
/*
* 业务层类
* 接收上一层,控制层controller的数据
* 经过计算,传递给dao层,操作数据库
* 调用dao层中的类,类成员位置,创建Dao类的对象
*/
public class ZhangWuService {
private ZhangWuDao dao = new ZhangWuDao(); }
* c: cn.itcast.gjp.controller包中建立ZhangWuController类
/*
* 控制器层
* 接收视图层的数据,数据传递给service层
* 成员位置,创建service对象
*/
public class ZhangWuController {
private ZhangWuService service = new ZhangWuService();
}
* d: cn.itcast.gjp.view包中建立MainView类
/*
* 试图层,用户看到和操作的界面
* 数据传递给controller层实现
* 成员位置,创建controller对象
*/
public class MainView {
private ZhangWuController controller = new ZhangWuController(); }
* e: cn.itcast.gjp.app包中建立MainApp类
/*
* 主程序类,作用,开启软件程序
*/
public class MainApp {
public static void main(String[] args) {
new MainView().run();
}
}

12实现用户的界面菜单

* A: 实现用户的界面菜单
* a: 案例核心代码
* cn.itcast.gjp.view包中建立MainView类中添加run方法
/*
* 实现界面效果
* 接收用户的输入
* 根据数据,调用不同的功能方法
*/
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:
// 选择添加账务,调用添加账务的方法
break;
case 2:
// 选择的编辑账务,调用编辑账务方法
break;
case 3:
// 选择的删除账务,调用删除账务方法
break;
case 4:
// 选择的是查询账务,调用查询方法
//selectZhangWu();
break;
case 5:
System.exit(0);
break;
}
}
}

13实现查询的界面菜单

* A: 实现查询的界面菜单
* a: 案例核心代码
* cn.itcast.gjp.view包中建立MainView类中添加selectZhangWu方法、selectAll方法、select方法
/*
* 定义方法 selectZhangWu()
* 显示查询的方式 1 所有查询 2 条件查询
* 接收用户的选择
*/
public void selectZhangWu(){
System.out.println("1. 查询所有 2. 条件查询");
Scanner sc = new Scanner(System.in);
int selectChooser = sc.nextInt();
//判断根据用户的选择,调用不同的功能
switch(selectChooser){
case 1:
//选择的查询所有,调用查询所有的方法
selectAll();
break;
case 2:
//选的条件查询,调用带有查询条件的方法
select();
break;
}
}
/*
* 定义方法,实现查询所有的账务数据
*/
public void selectAll(){ } /*
* 定义方法,实现条件查询账务数据
* 提供用户的输入日期,开始日期结束日期
* 就2个日期,传递到controller层
* 调用controller的方法,传递2个日期参数
* 获取到controller查询的结果集,打印出来
*/
public void select(){ }

14实现查询所有账务的控制,业务层的实现

* A: 实现查询所有账务的控制,业务层的实现
* a: 案例核心代码
* a: cn.itcast.gjp.dao包中创建ZhangWuDao类
/*
* 实现对数据表 gjp_zhangwu 数据增删改查操作
* dbuils工具类完成,类成员创建QueryRunner对象,指定数据源
*/
public class ZhangWuDao {
private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
/*
* 定义方法,查询数据库,获取所有的账务数据
* 方法,由业务层调用
* 结果集,将所有的账务数据,存储到Bean对象中,存储到集合中
*/
public List<ZhangWu> selectAll(){
return null;
}
}
* b: cn.itcast.gjp.service包中创建ZhangWuService类
/*
* 业务层类
* 接收上一层,控制层controller的数据
* 经过计算,传递给dao层,操作数据库
* 调用dao层中的类,类成员位置,创建Dao类的对象
*/
public class ZhangWuService {
private ZhangWuDao dao = new ZhangWuDao();
/*
* 定义方法,实现查询所有的账务数据
* 此方法,由控制层调用, 去调用dao层的方法
* 返回存储ZhangWu对象的List集合
*/
public List<ZhangWu> selectAll(){
return dao.selectAll();
}
}
* c: cn.itcast.gjp.controller包中建立ZhangWuController类
/*
* 控制器层
* 接收视图层的数据,数据传递给service层
* 成员位置,创建service对象
*/
public class ZhangWuController {
private ZhangWuService service = new ZhangWuService();
/*
* 控制层类定义方法,实现查询所有的账务数据
* 方法由试图层调用,方法调用service层
*/
public List<ZhangWu> selectAll(){
return service.selectAll();
}
}

15实现查询所有账务的dao层的实现

* A: 实现查询所有账务的dao层的实现
* a: 案例核心代码
* a: cn.itcast.gjp.dao包中创建ZhangWuDao类selectAll方法
/*
* 实现对数据表 gjp_zhangwu 数据增删改查操作
* dbuils工具类完成,类成员创建QueryRunner对象,指定数据源
*/
public class ZhangWuDao {
private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
/*
* 定义方法,查询数据库,获取所有的账务数据
* 方法,由业务层调用
* 结果集,将所有的账务数据,存储到Bean对象中,存储到集合中
*/
public List<ZhangWu> selectAll(){
try{
//查询账务数据的SQL语句
String sql = "SELECT * FROM gjp_zhangwu";
//调用qr对象的方法,query方法,结果集BeanListHandler
List<ZhangWu> list = qr.query(sql, new BeanListHandler<>(ZhangWu.class));
return list;
}catch(SQLException ex){
System.out.println(ex);
throw new RuntimeException("查询所有账务失败");
}
}
}

16实现查询所有账务的view层的实现

* A: 实现查询所有账务的view层的实现
* a: 案例核心代码
* cn.itcast.gjp.view包中建立MainView类selectAll方法
/*
* 定义方法,实现查询所有的账务数据
*/
public void selectAll(){
//调用控制层中的方法,查询所有的账务数据
List<ZhangWu> list = controller.selectAll();
//输出表头
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"+zw.getDescription());
}
}

17实现条件查询账务的菜单实现

* A: 实现条件查询账务的菜单实现
* a: 案例核心代码
* cn.itcast.gjp.view包中建立MainView类select方法
/*
* 定义方法,实现条件查询账务数据
* 提供用户的输入日期,开始日期结束日期
* 就2个日期,传递到controller层
* 调用controller的方法,传递2个日期参数
* 获取到controller查询的结果集,打印出来
*/
public void select(){
System.out.println("选择条件查询,输入日期格式XXXX-XX-XX");
Scanner sc = new Scanner(System.in);
System.out.print("请输入开始日期:");
String startDate = sc.nextLine();
System.out.print("请输入结果日期:");
String endDate = sc.nextLine();
//调用controller层的方法,传递日期,获取查询结果集 }

18实现条件查询账务的控制层,业务层实现

* A: 实现条件查询账务的控制层,业务层实现
* a: 案例核心代码
* a: cn.itcast.gjp.dao包中创建ZhangWuDao类
/*
* 实现对数据表 gjp_zhangwu 数据增删改查操作
* dbuils工具类完成,类成员创建QueryRunner对象,指定数据源
*/
public class ZhangWuDao {
private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
/*
* 定义方法,查询数据库,带有条件去查询账务表
* 由业务层调用,查询结果集存储到Bean对象,存储到List集合
* 调用者传递2个日期字符串
*/
public List<ZhangWu> select(String startDate,String endDate){
return null;
}
}
* b: cn.itcast.gjp.service包中创建ZhangWuService类
/*
* 业务层类
* 接收上一层,控制层controller的数据
* 经过计算,传递给dao层,操作数据库
* 调用dao层中的类,类成员位置,创建Dao类的对象
*/
public class ZhangWuService {
private ZhangWuDao dao = new ZhangWuDao();
/*
* 定义方法,实现条件查询账务
* 方法由控制层调用,传递2个日期字符串
* 调用dao层的方法,传递2个日期字符串
* 获取到查询结果集
*/
public List<ZhangWu> select(String startDate,String endDate){
return dao.select(startDate, endDate);
}
}
* c: cn.itcast.gjp.controller包中建立ZhangWuController类
/*
* 控制器层
* 接收视图层的数据,数据传递给service层
* 成员位置,创建service对象
*/
public class ZhangWuController {
private ZhangWuService service = new ZhangWuService();
/*
* 定义方法,实现条件查询账务
* 方法由试图层调用,传递两个日期的字符串
* 调用service层的方法,传递两个日期字符串,获取结果集
* 结果集返回给试图
*/
public List<ZhangWu> select(String startDate,String endDate){
return service.select(startDate, endDate);
}
}

19实现条件查询账务的dao层实现

* A: 实现条件查询账务的dao层实现
* a: 案例核心代码
* a: cn.itcast.gjp.dao包中创建ZhangWuDao类select方法
/*
* 实现对数据表 gjp_zhangwu 数据增删改查操作
* dbuils工具类完成,类成员创建QueryRunner对象,指定数据源
*/
public class ZhangWuDao {
private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
/*
* 定义方法,查询数据库,带有条件去查询账务表
* 由业务层调用,查询结果集存储到Bean对象,存储到List集合
* 调用者传递2个日期字符串
*/
public List<ZhangWu> select(String startDate,String endDate){
try{
//拼写条件查询的SQL语句
String sql = "SELECT * FROM gjp_zhangwu WHERE createtime BETWEEN ? AND ?";
//定义对象数组,存储?占位符
Object[] params = {startDate,endDate};
//调用qr对象的方法query查询数据表,获取结果集
return qr.query(sql, new BeanListHandler<>(ZhangWu.class),params);
}catch(SQLException ex){
System.out.println(ex);
throw new RuntimeException("条件查询失败");
}
}
}

20实现条件查询账务的view层实现

* A: 实现条件查询账务的view层实现
* a: 案例核心代码
* cn.itcast.gjp.view包中建立MainView类selectAll方法优化、抽取print方法、select方法
/*
* 定义方法,实现查询所有的账务数据
*/
public void selectAll(){
//调用控制层中的方法,查询所有的账务数据
List<ZhangWu> list = controller.selectAll();
if(list.size()!=0)
print(list);
else
System.out.println("没有查询到数据");
} /*
* 定义方法,实现条件查询账务数据
* 提供用户的输入日期,开始日期结束日期
* 就2个日期,传递到controller层
* 调用controller的方法,传递2个日期参数
* 获取到controller查询的结果集,打印出来
*/
public void select(){
System.out.println("选择条件查询,输入日期格式XXXX-XX-XX");
Scanner sc = new Scanner(System.in);
System.out.print("请输入开始日期:");
String startDate = sc.nextLine();
System.out.print("请输入结果日期:");
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"+zw.getDescription());
}
}

21添加账务功能分析

* A: 添加账务功能分析
* a: 编写MainView类中addZhangWu方法
* 键盘输入新添加的账务信息
* 调用ZhangWuService类中addZhangWu方法,用来指定账务的添加
* 添加完毕后,使用输出语句,提示“添加账务成功!”
* b: 编写ZhangWuService类中addZhangWu方法
* 调用ZhangWuDao类中addZhangWu方法,用来指定账务的添加
* c: 编写ZhangWuDao类中addZhangWu方法
* 通过QueryRunner对象,调用update方法更新数据库表gjp_zhangwu,完成指定账务添加到数据库表中

22添加账务功能菜单和输入功能实现

* A: 添加账务功能菜单和输入功能实现
* a: 案例核心代码
* cn.itcast.gjp.view包中建立MainView类addZhangWu方法
/*
* 定义方法addZhangWu
* 添加账务的方法,用户在界面中选择菜单1的时候调用、
* 实现思想:
* 接收键盘输入,5项输入,调用controller层方法
*/
public void addZhangWu() {
System.out.println("选择的添加账务功能,请输入以下内容");
Scanner sc = new Scanner(System.in);
System.out.println("输入分类名称");
String flname = sc.next();
System.out.println("输入金额");
double money = sc.nextDouble();
System.out.println("输入账户");
String zhanghu = sc.next();
System.out.println("输入日期:格式XXXX-XX-xx");
String createtime = sc.next();
System.out.println("输入具体描述");
String description = sc.next();
//将接收到的数据,调用controller层的方法,传递参数,实现数据添加 }

23添加账务功能控制层,业务层实现

* A: 添加账务功能控制层,业务层实现
* a: 案例核心代码
* cn.itcast.gjp.controller包中的ZhangWuController类addZhangWu方法
/*
* 定义方法,实现账务添加功能
* 由视图层调用,传递参数(传递过来的参数不能是5个数据,传递的是一个ZhangWu类型的对象)
* 本方法调用service层的方法,传递ZhangWu对象,获取到添加后的结果集(添加成功影响的行数,int)
*
*/
public void addZhangWu(ZhangWu zw) {
service.addZhangWu(zw);
}
* cn.itcast.gjp.service包中的ZhangWuService类addZhangWu方法
/*
* 定义方法,实现添加账务
* 是由控制层调用,传递ZhangWu对象
*/
public void addZhangWu(ZhangWu zw) {
dao.addZhangWu(zw);
}
* cn.itcast.gjp.dao包中的ZhangWuDao类addZhangWu方法
/*
* 定义方法,实现添加账务功能
* 由业务层调用,传递ZhangWu对象
* 将ZhangWu对象中的数据,添加到数据库
*/
public void addZhangWu(ZhangWu zw) { }

24添加账务功能dao层实现

* A: 添加账务功能dao层实现
* a: 案例核心代码
* cn.itcast.gjp.dao包中的ZhangWuDao类的addZhangWu方法
public void addZhangWu(ZhangWu zw) {
try{
//拼接添加数据的sql
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()};
//调用qr对象中的方法update执行添加
qr.update(sql, params);
}catch(SQLException ex) {
System.out.println(ex);
throw new RuntimeException("账务添加失败");
}
}

25添加账务功能view层实现

* A: 添加账务功能view层实现
* a: 案例核心代码
* cn.itcast.gjp.view包中建立MainView类addZhangWu方法
public void addZhangWu() {
System.out.println("选择的添加账务功能,请输入以下内容");
Scanner sc = new Scanner(System.in);
System.out.println("输入分类名称");
String flname = sc.next();
System.out.println("输入金额");
double money = sc.nextDouble();
System.out.println("输入账户");
String zhanghu = sc.next();
System.out.println("输入日期:格式XXXX-XX-xx");
String createtime = sc.next();
System.out.println("输入具体描述");
String description = sc.next();
//将接收到的数据,调用controller层的方法,传递参数,实现数据添加
//将用户输入的所有参数,封装成ZhangWu对象
ZhangWu zw = new ZhangWu(0, flname, money, zhanghu, createtime, description);
controller.addZhangWu(zw);
System.out.println("恭喜添加账务成功");
}

26编辑账务功能分析

* A: 编辑账务功能分析
* a: 编写MainView类中editZhangWu方法
* 键盘输入要编辑的账务信息ID号
* 键盘输入要修改的账务信息内容
* 调用ZhangWuService类中editZhangWu方法,用来将指定的账务信息进行更新
* 更新完毕后,使用输出语句,提示 “编辑账务成功!”
* b: 编写ZhangWuService类中editZhangWu方法
* 调用ZhangWuDao类中editZhangWu方法,用来将指定的账务信息进行更新
* c: 编写ZhangWuDao类中editZhangWu方法
* 通过QueryRunner对象,调用update方法更新数据库表gjp_zhangwu,完成数据库表中指定账务更新操作

27编辑账务功能功能之前实现查询所有

* A: 编辑账务功能功能之前实现查询所有
* a: 案例核心代码
* cn.itcast.gjp.view包中建立MainView类editZhangWu方法
public void editZhangWu() {
//调用查询所有账务数据的功能,显示出来
//看到所有数据,从中选择一项,进行修改
selectAll();
System.out.println("选择的是编辑功能,请输入数据"); }

28编辑账务功能菜单实现

* A: 编辑账务功能菜单实现
* a: 案例核心代码
* cn.itcast.gjp.view包中建立MainView类editZhangWu方法
public void editZhangWu() {
//调用查询所有账务数据的功能,显示出来
//看到所有数据,从中选择一项,进行修改
selectAll();
System.out.println("选择的是编辑功能,请输入数据");
Scanner sc = new Scanner(System.in);
System.out.print("请输入ID");
int zwid = sc.nextInt();
System.out.println("输入分类名称");
String flname = sc.next();
System.out.println("输入金额");
double money = sc.nextDouble();
System.out.println("输入账户");
String zhanghu = sc.next();
System.out.println("输入日期:格式XXXX-XX-xx");
String createtime = sc.next();
System.out.println("输入具体描述");
String description = sc.next();
//将用户输入的数据,封装到ZhangWu对象中
//用户输入的ID,必须封装到到对象中
ZhangWu zw = new ZhangWu(zwid, flname, money, zhanghu, createtime, description);
//调用controller层中的方法,实现编辑账务
}

29编辑账务功能控制层,业务层实现

* A: 编辑账务功能控制层,业务层实现
* a: 案例核心代码
* cn.itcast.gjp.controller包中的ZhangWuController类editZhangWu方法
/*
* 定义方法,实现编辑账务功能
* 由视图层调用,传递参数,也是ZhangWu对象
* 调用service层的方法,也是ZhangWu对象
*/
public void editZhangWu(ZhangWu zw) {
service.editZhangWu(zw);
}
* cn.itcast.gjp.service包中的ZhangWuService类editZhangWu方法
/*
* 定义方法,实现编辑账务
* 由控制层调用,传递ZhangWu对象
* 调用dao层的方法,传递ZhangWu对象
*/
public void editZhangWu(ZhangWu zw) {
dao.editZhangWu(zw);
}
* cn.itcast.gjp.dao包中的ZhangWuDao类editZhangWu方法
public void editZhangWu(ZhangWu zw) {
// TODO Auto-generated method stub }

30编辑账务功能dao层实现

* A:编辑账务功能dao层实现
* a: 案例核心代码
* cn.itcast.gjp.dao包中的ZhangWuDao类editZhangWu方法
/*
* 定义方法,实现编辑功能
* 由业务层调用,传递ZhangWu对象
* 将对象中的数据,更新到数据表
*/
public void editZhangWu(ZhangWu zw) {
try {
//更新数据的SQL
String sql = "UPDATE zhangwu SET flname=?,money=?,zhanghu=?,createtime=?,description=? WHERE zwid=?";
//定义对象数组,封装所有数据
Object[] params = {zw.getFlname(),zw.getMoney(),zw.getZhanghu(),zw.getCreatetime(),zw.getDescription(),zw.getZwid()};
//调用qr对象方法update执行更新
qr.update(sql, params);
} catch (SQLException ex) {
System.out.println(ex);
throw new RuntimeException("编辑账务失败");
} }

31编辑账务功能view层实现

* A: 编辑账务功能view层实现
* a: 案例核心代码
* cn.itcast.gjp.view包中建立MainView类editZhangWu方法
/*
* 定义方法,实现对账务的编辑功能
* 实现思想:
* 接收用户的输入的信息
* 封装成ZhangWu对象
* 调用控制层的方法,传递ZhangWu对象,实现编辑
*
*/
public void editZhangWu() {
//调用查询所有账务数据的功能,显示出来
//看到所有数据,从中选择一项,进行修改
selectAll();
System.out.println("选择的是编辑功能,请输入数据");
Scanner sc = new Scanner(System.in);
System.out.print("请输入ID");
int zwid = sc.nextInt();
System.out.println("输入分类名称");
String flname = sc.next();
System.out.println("输入金额");
double money = sc.nextDouble();
System.out.println("输入账户");
String zhanghu = sc.next();
System.out.println("输入日期:格式XXXX-XX-xx");
String createtime = sc.next();
System.out.println("输入具体描述");
String description = sc.next();
//将用户输入的数据,封装到ZhangWu对象中
//用户输入的ID,必须封装到到对象中
ZhangWu zw = new ZhangWu(zwid, flname, money, zhanghu, createtime, description);
//调用controller层中的方法,实现编辑账务
controller.editZhangWu(zw);
System.out.println("账务编辑成功");
}

32删除账务功能分析

* A: 删除账务功能分析
* a: 编写MainView类中deleteZhangWu方法
* 键盘输入要删除的账务信息ID号
* 调用ZhangWuService类中deleteZhangWu方法,用来将指定的账务信息删除
* 删除完毕后,使用输出语句,提示 “删除账务成功!”
* b: 编写ZhangWuService类中deleteZhangWu方法
* 调用ZhangWuDao类中deleteZhangWu方法,用来将指定的账务信息删除
* c: 编写ZhangWuDao类中deleteZhangWu方法
* 通过QueryRunner对象,调用update方法更新数据库表gjp_zhangwu,完成数据库表中指定账务删除操作

33删除账务功能菜单实现

* A: 删除账务功能菜单实现
* a: 案例核心代码
* cn.itcast.gjp.view包中建立MainView类deleteZhangWu方法
/*
* 定义方法,实现账务删除
* 实现思想:
* 接收用户的输入,输入一个主键数据
* 调用控制层方法,传递一个主键
*/
public void deleteZhangWu() {
//调用查询所有账务数据的功能,显示出来
//看到所有数据,从中选择一项,进行修改
selectAll();
System.out.println("选择的是删除功能,请输入序号即可");
int zwid = new Scanner(System.in).nextInt();
//调用控制层方法,传递主键id即可
}

34删除账务功能控制层,业务层实现

* A: 删除账务功能控制层,业务层实现
* a: 案例核心代码
* cn.itcast.gjp.controller包中的ZhangWuController类deleteZhangWu方法
/*
* 定义方法,实现删除功能
* 视图层调用,传递int类型主键
* 调用service层方法,传递int主键
*/
public void deleteZhangWu(int zwid) {
service.deleteZhangWu(zwid);
}
* cn.itcast.gjp.service包中的ZhangWuService类deleteZhangWu方法
/*
* 定义方法,实现删除账务功能
* 由控制层调用,传递主键id
* 调用dao层方法,传递主键id
*/
public void deleteZhangWu(int zwid) {
dao.deleteZhangWu(zwid);
}
* cn.itcast.gjp.dao包中的ZhangWuDao类deleteZhangWu方法
public void deleteZhangWu(int zwid) { }

35删除账务功能dao实现

* A: 删除账务功能dao实现
* a: 案例核心代码
* cn.itcast.gjp.dao包中的ZhangWuDao类deleteZhangWu方法
/*
* 定义方法,实现删除业务
* 业务层调用,传递主键id
*/
public void deleteZhangWu(int zwid) {
try {
//拼写删除数据SQL
String sql = "DELETE FROM gjp_zhangwu WHERE zwid=?";
qr.update(sql, zwid);
} catch (SQLException ex) {
System.out.println(ex);
throw new RuntimeException("删除账务失败");
}
}

36删除账务功能view层实现

* A: 删除账务功能view层实现
* a: 案例核心代码
* cn.itcast.gjp.view包中建立MainView类editZhangWu方法
/*
* 定义方法,实现账务删除
* 实现思想:
* 接收用户的输入,输入一个主键数据
* 调用控制层方法,传递一个主键
*/
public void deleteZhangWu() {
//调用查询所有账务数据的功能,显示出来
//看到所有数据,从中选择一项,进行修改
selectAll();
System.out.println("选择的是删除功能,请输入序号即可");
int zwid = new Scanner(System.in).nextInt();
//调用控制层方法,传递主键id即可
controller.deleteZhangWu(zwid);
System.out.println("删除账务成功");

31_java之项目中的数据库操作的更多相关文章

  1. XamarinSQLite教程在Xamarin.Android项目中提取数据库文件

    XamarinSQLite教程在Xamarin.Android项目中提取数据库文件 由于不能直接打开该文件,开发者需要先将数据库文件从Android系统中提取出来.操作步骤如下. (5)选择MyDoc ...

  2. XamarinSQLite教程在Xamarin.Android项目中定位数据库文件

    XamarinSQLite教程在Xamarin.Android项目中定位数据库文件 实际开发中,经常需要验证数据库操作的正确性.这个时候,需要打开数据库文件,进行确认.下面是如何找到MyDocumen ...

  3. XamarinSQLite教程在Xamarin.Android项目中使用数据库

    XamarinSQLite教程在Xamarin.Android项目中使用数据库 在Xamarin.Android项目中使用预设数据库的具体操作步骤如下: (1)创建一个Xamarin.Android项 ...

  4. XamarinSQLite教程Xamarin.iOS项目中打开数据库文件

    XamarinSQLite教程Xamarin.iOS项目中打开数据库文件 以下是打开MyDocuments.db数据库的具体操作步骤: (1)将Mac电脑上的MyDocuments.db数据库移动到W ...

  5. XamarinSQLite教程在Xamarin.iOS项目中定位数据库文件

    XamarinSQLite教程在Xamarin.iOS项目中定位数据库文件 开发者可以在指定的路径中找到复制的数据库文件,具体的操作步骤如下: (1)单击Mac电脑中Finder菜单中的“前往”|“前 ...

  6. android中的数据库操作(转)

    android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   an ...

  7. android中的数据库操作(SQLite)

    android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   an ...

  8. CI中的数据库操作以及AR连贯操作

    要使用CI中的数据库操作,首先我们应该在CI的 application/config/databass.php 文件中配置数据库信息,通常就是配置主机名,用户名,密码,数据库名,表前缀(dbprefi ...

  9. Android中SQLite数据库操作(1)——使用SQL语句操作SQLite数据库

    下面是最原始的方法,用SQL语句操作数据库.后面的"Android中SQLite数据库操作(2)--SQLiteOpenHelper类"将介绍一种常用的android封装操作SQL ...

随机推荐

  1. 使用AspNetPager进行分页,查询条件丢失问题

    在Asp.Net中使用AspNetPager进行分页时,发现一个问题: 当通过查询条件进行查询后,对查询结果进行翻页操作时,查询条件会丢失. 当修改UrlPaging属性后(设置UrlPaging=“ ...

  2. bzoj1058: [ZJOI2007]报表统计 stl xjbg

    小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个可能为负数的整数数列,并且 ...

  3. UVA-1604 Cubic Eight-Puzzle (双向BFS+状态压缩+限制搜索层数)

    题目大意:立体的八数码问题,一次操作是滚动一次方块,问从初始状态到目标状态的最少滚动次数. 题目分析:这道题已知初始状态和目标状态,且又状态数目庞大,适宜用双向BFS.每个小方块有6种状态,整个大方格 ...

  4. The web application you are attempting to access on this web server is currently unavailable.......

    今天去服务器安装了个.net 4.0 framework(原本有1.0和2.0的),配置好站点后,选择版本为4.0,访问出错,错误代码如下 Server Application Unavailable ...

  5. run jdeveloper, unable to create an instance of the Java Virtual Machine Located at path:

    刚才打开 jdevW.exe 时提示如下错误: Unable to create an instance of the Java Virtual MachineLocated at path:x:\x ...

  6. reg文件中文乱码

    用reg文件方式修改注册表很方便,但是如果字段中有中文的话,执行reg文件后,注册表中的中文出现乱码. 解决办法:将文件保存文Unicode编码方式即可.(保存文UTF8编码也是不行的) 附一个添加\ ...

  7. cdq分治的小结

    cdq分治 是一种特殊的分治 他的思想: 1.分治l,mid 2.分治mid+1,r 3.计算l,mid对mid+1,r的影响 3就是最关键的地方 这也是cdq的关键点 想到了这一步基本就可以做了 接 ...

  8. xml生成javabean(zhuan)

    package com.dom4j; import java.io.File;import java.io.FileWriter;import java.io.IOException;import j ...

  9. PostgreSQL逻辑复制槽

    Schema | Name | Result data type | Argument data types | Type ------------+------------------------- ...

  10. I.MX6 Manufacturing Tool V2 (MFGTool2) Emmc mksdcard-android.sh hacking

    #!/bin/bash # 参考文章: # . Shell特殊变量:Shell $, $#, $*, $@, $?, $$和命令行参数 # http://c.biancheng.net/cpp/vie ...