JDBC的封装
分离原则:
界面——逻辑的分离
数据——功能的分离
对数据访问来说,对多个表的操作分离
无论是数据类,还是数据操作类,都不负责输出
大体上分为三类: 1数据类(get set) 2数据操作类(加载驱动,增删改查的方法) 3界面类(main函数)
1.数据类 :成员变量, get set
package com.maya.shuju;
public class KuCun { private String WzName; private int Num; private String Unit; private int Price; public String getWzName() { return WzName; } public void setWzName(String wzName) { WzName = wzName; } public int getNum() { return Num; } public void setNum(int num) { Num = num; } public String getUnit() { return Unit; } public void setUnit(String unit) { Unit = unit; } public int getPrice() { return Price; } public void setPrice(int price) { Price = price; } }
2.数据操作类: (驱动类、操作数据类)
【1】驱动类 四个成员变量,一个成员方法
package com.maya.fangwen; import java.sql.Connection; import java.sql.DriverManager; public class DBConnection { public static String Driver="com.mysql.jdbc.Driver"; public static String jdbc="jdbc:mysql://127.0.0.1:3306/myab?characterEncoding=GBK"; public static String uid="root"; public static String pwd=""; public static Connection conn() throws Exception{ Class.forName(Driver); Connection conn = DriverManager.getConnection(jdbc,uid,pwd); return conn; } }
【2】数据操作类:一个构造函数,四种数据操作方法(增删改查)
package com.maya.fangwen; import java.sql.*; import java.util.*; import com.maya.shuju.*; public class KuCunDao { private Connection conn; private PreparedStatement stat; private ResultSet re; //构造函数 public KuCunDao() throws Exception{ conn=DBConnection.conn(); } //增加项目 public void insert(String name ,int shuliang,String danwei,int danjia){ try{ String sql="insert into kc values (?,?,?,?)"; stat=conn.prepareStatement(sql); stat.setString(1, name); stat.setInt(2, shuliang); stat.setString(3, danwei); stat.setInt(4, danjia); stat.executeUpdate(); } catch(Exception e){ System.out.println("添加出错"); } finally{ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } //增加更改物资的数量 public void insert(String name ,int shuliang){ try{ String sql="update kc set Num=Num+? where WzName=? "; stat=conn.prepareStatement(sql); stat.setInt(1, shuliang); stat.setString(2, name); stat.executeUpdate(); } catch(Exception e){ System.out.println("更改数量出错"); } finally{ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } //查询物资剩余数量 public ArrayList<KuCun> select(){ ArrayList<KuCun> list=new ArrayList<KuCun>(); try{ String sql="select * from kc"; stat=conn.prepareStatement(sql); re=stat.executeQuery(); while(re.next()){ KuCun s=new KuCun(); s.setWzName(re.getString(1)); s.setNum(re.getInt(2)); s.setUnit(re.getString(3)); s.setPrice(re.getInt(4)); list.add(s); } } catch(Exception e){ System.out.println("查询出错了!!!"); } finally{ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return list; } //查询2 public ArrayList<KuCun> select(String mz) throws Exception{ ArrayList<KuCun> list=new ArrayList<KuCun>(); String sql="select * from kc where WzName=?"; stat=conn.prepareStatement(sql); stat.setString(1, mz); re=stat.executeQuery(); while(re.next()){ KuCun kc=new KuCun(); kc.setPrice(re.getInt(4)); kc.setNum(re.getInt(2)); kc.setUnit(re.getString(3)); list.add(kc); } conn.close(); return list; } }
3.界面类,调用方法
package com.maya.jiemian; import java.sql.*; import java.text.*; import java.util.*; import com.maya.fangwen.*; import com.maya.shuju.*; public class JieMian { public static void main(String[] args) throws Exception { Calendar shijian=Calendar.getInstance(); SimpleDateFormat gs=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String sjzf=gs.format(shijian.getTime()); Scanner sc=new Scanner(System.in); System.out.println("赈灾物资发放登记系统"); System.out.println("1.物资库存维护"); System.out.println("2物资库存列表"); System.out.println("3物资发放"); System.out.println("4物资发放统计"); System.out.println("5退出系统"); String s=sc.nextLine(); if(s.equals("1")){ System.out.println("添加项目还是添加库存?"); String tj=sc.nextLine(); if(tj.equals("添加项目")){ System.out.println("请输入名称"); String name=sc.nextLine(); System.out.println("请输入添加数量"); int shu=Integer.parseInt(sc.nextLine()); System.out.println("输入单位"); String dw=sc.nextLine(); System.out.println("添加商品单价"); int dj=Integer.parseInt(sc.nextLine()); new KuCunDao().insert(name, shu,dw , dj); System.out.println("添加成功!!!"); } else if(tj.equals("添加库存")){ System.out.println("请输入添加物资的名称"); String name=sc.nextLine(); System.out.println("请输入添加物资的数量"); int shuliang=Integer.parseInt(sc.nextLine()); new KuCunDao().insert(name, shuliang); System.out.println("添加成功!!!"); } main(args); } else if(s.equals("2")){ ArrayList<KuCun> cx=new KuCunDao().select(); System.out.println("********************************"); System.out.println("物资名称"+"\t"+"库存数量"+"\t"+"单价(元)"); for(int i=0; i<cx.size();i++){ System.out.println(cx.get(i).getWzName()+"\t"+cx.get(i).getNum()+"\t"+cx.get(i).getPrice()); } System.out.println("********************************"); main(args); } else if(s.equals("3")){ System.out.println("物资发放"); System.out.print("请输入发放物资"); String mz=sc.nextLine(); ArrayList<KuCun> ls= new KuCunDao().select(mz); System.out.println("当前单价"+ls.get(0).getPrice()); System.out.println("当前库存"+ls.get(0).getNum()); System.out.print("请输入发放数量"); int sl=Integer.parseInt(sc.nextLine()); System.out.print("请输入领取人的姓名"); String xingming=sc.nextLine(); new FaFangDao().insert(mz, sl, ls.get(0).getUnit(), ls.get(0).getPrice(), sjzf, xingming); new KuCunDao().insert(mz, (-sl)); main(args); } else if(s.equals("4")){ ArrayList<FaFang> f=new FaFangDao().select(); System.out.println("************************************"); System.out.println("物资名称"+"\t"+"发放数量"+"\t"+"单价(元)"+"\t"+"接收人"); for(int i=0;i<f.size();i++){ System.out.println(f.get(i).getWzName()+"\t"+f.get(i).getFaNum()+"\t"+f.get(i).getFaPrice()+"\t"+f.get(i).getReceiver()); } System.out.println("************************************"); main(args); } else if(s.equals("5")){ System.out.println("已退出"); } else{ System.out.println("请输入正确的数字"); main(args); } } }
我们不是制造者,我们是代码搬运工