Java任务:购物车的增删改查
目录
任务描述:购物车的增删查改
如图7-2所示,消费者可以实现对购物车的查询 和商品信息的修改
图7-2 查看和修改商品
定义接口
商品数据接口CartDao
package dao; package dao; import entity.*; public interface CartDao { public int getNum(Integer uid);//获取购物车商品总数 public void addGoods(Integer uid,Integer gid,Integer num);//添加商品 public void delGoods(Integer cid);//删除商品 public void queryGoods(Integer uid);//查询购物车内已放商品 public int hasGoods(Integer uid,Integer gid);//查询购物车内是否已有某件商品 public void modifyGoods(Integer cid,Integer num);//修改购物车内该种商品的数量 }
实现思路
- 我们现在已经定义了一个CartDao接口。
- 接下来我们用MYSQL数据库来实现这个接口。
任务实现
创建测试数据
接下来我们在 MySQL 中创建 cloud 数据库,并创建 carts 数据表,表结构如下:
mysql> create database cloud; Query OK, 1 row affected (0.00 sec) mysql> use cloud; Database changed 数据表 carts: CREATE TABLE IF NOT EXISTS `carts` ( `id` INT unsigned AUTO_INCREMENT, `uid` INT(10) NOT NULL, `gid` INT(10) NOT NULL, `num` INT(11) NOT NULL, PRIMARY KEY (`id`) )ENGINE=InnoDB DEFAULT CHARSET=utf8; 插入几条购物车数据(插的时候,uid,gid 分别对应着 user表和 goods表里的 id号,必须得是真实存在的。 MariaDB [cloud]> INSERT INTO `carts`(`uid`,`gid`,`num`) VALUES('1',`3`,3); ERROR 1054 (42S22): Unknown column '3' in 'field list' MariaDB [cloud]> INSERT INTO `carts`(`uid`,`gid`,`num`) VALUES('1','3','3'); Query OK, 1 row affected (0.00 sec) MariaDB [cloud]> INSERT INTO `carts`(`uid`,`gid`,`num`) VALUES('1','4','2'); Query OK, 1 row affected (0.00 sec) MariaDB [cloud]> SELECT * FROM `carts` inner join `goods` on `carts`.`gid` = `goods`.`id`; +----+-----+-----+-----+----+-----------------+-------+-----+ | id | uid | gid | num | id | name | price | num | +----+-----+-----+-----+----+-----------------+-------+-----+ | 1 | 1 | 3 | 3 | 3 | 兰州牛肉面 | 12 | 20 | | 2 | 1 | 4 | 2 | 4 | 黄焖鸡米饭 | 12 | 30 | +----+-----+-----+-----+----+-----------------+-------+-----+ MariaDB [cloud]> SELECT `carts`.`id`,`goods`.`name`,`goods`.`price`,`carts`.num FROM `carts` inner join `goods` on `carts`.`gid` = `goods`.`id`; +----+-----------------+-------+-----+ | id | name | price | num | +----+-----------------+-------+-----+ | 1 | 兰州牛肉面 | 12 | 3 | | 2 | 黄焖鸡米饭 | 12 | 2 | +----+-----------------+-------+-----+ 2 rows in set (0.00 sec)
建立数据库连接
在main方法中建立这个类的对象测试一下:
public static void main(String[] args) { // TODO Auto-generated method stub CartDaoSQL s = new CartDaoSQL(); }
运行结果:
编写getNum方法
编写getNum方法,返回购物车商品数。
public int getNum(Integer uid) { int rowCount = 0; try { ResultSet rs = null; //建立一个空的结果集 //1.创建PreparedStatement 对象,让它与一条SQL模板绑定; String sql = "SELECT sum(`carts`.num) record FROM `carts` " + "inner join `goods` on `carts`.`gid` = `goods`.`id` where uid= ?"; PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql); pstmt.setInt(1,uid); //2.执行查询 rs = pstmt.executeQuery();//执行查询 if(rs.next()){ rowCount=rs.getInt("record"); } pstmt.close(); }catch (SQLException e) {//捕捉、处理异常 System.out.println(e.getMessage()); } return rowCount; }
结果:
MySQL连接成功! 购物车现有商品为:
编写addGoods方法
public void addGoods(Integer uid,Integer gid,Integer num){ Connection conn = this.conn; int i = 0; String sql = "insert into carts (uid,gid,num) values(?,?,?)"; PreparedStatement pstmt; try {//1.创建PreparedStatement 对象,让它与一条SQL模板绑定; pstmt = (PreparedStatement) conn.prepareStatement(sql); pstmt.setInt(1, uid); pstmt.setInt(2, gid); //pstmt.setInt(2, user.getAge()); pstmt.setDate pstmt.setInt(3, num); i = pstmt.executeUpdate();//2.执行查询 if(i!=0){ //3.查看查询状态 System.out.println("商品"+gid+"插入成功!"); }else { System.out.println("商品"+gid+"插入失败!"); } pstmt.close(); } catch (SQLException e) { System.out.println(e.getMessage()); } }
结果:
MySQL连接成功! 购物车现有商品为:3 向购物车中添加商品...
编写delGoods方法
public void delGoods(Integer cid) {//cid为购物车某条订单的id号 Connection conn = this.conn; int i = 0; String sql = "DELETE FROM carts WHERE id = ? "; try { PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, Integer.valueOf(cid)); i = pstmt.executeUpdate(); if(i!=0){ System.out.println("订单"+cid+"删除成功!"); }else { System.out.println("订单"+cid+"删除失败!"); } pstmt.close(); }catch (SQLException e) { System.out.println(e.getMessage()); } }
编写hasGoods方法
public int hasGoods(Integer uid,Integer gid) {//查询某一商品 int rowCount = 0; try { ResultSet rs = null; //建立一个空的结果集 //1.创建PreparedStatement 对象,让它与一条SQL模板绑定; String sql = "select num from carts where uid=? and gid=? "; PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql); pstmt.setInt(1, uid); pstmt.setInt(2, gid); //3.执行查询 rs = pstmt.executeQuery();//执行查询 if(rs.next()){ rowCount=rs.getInt("num"); } pstmt.close(); }catch (SQLException e) {//捕捉、处理异常 System.out.println(e.getMessage()); } return rowCount; }
编写queryGoods()方法
public void queryGoods(Integer uid){//查询所有商品 String total =""; try { //1.编写预编译语句 String sql = "SELECT `carts`.`id`,`goods`.`name`,`goods`.`price`,`carts`.num FROM `carts` " + "inner join `goods` on `carts`.`gid` = `goods`.`id`where uid= ?"; PreparedStatement pstmt = (PreparedStatement)conn.prepareStatement(sql); pstmt.setInt(1, uid); //2.执行查询 ResultSet rs = pstmt.executeQuery();//执行查询 int col = rs.getMetaData().getColumnCount();//获取字段数 //3. 打印数据表表头 for (int i = 1; i <= col; i++) { String col_name = rs.getMetaData().getColumnName(i); total +=(col_name+"\t"); if (i == 2 ) {//此行仅仅是为了显示更好看,可以删去 total +=("\t"); } } total +=("\r\n"); total +=("==================================\r\n"); //4. 打印数据表结果 while (rs.next()) { for (int i = 1; i <= col; i++) { total +=(rs.getString(i) + "\t"); if ((i == 2) && (rs.getString(i).length() < 8)) {//此行仅仅是为了显示更好看,可以删去 total +=("\t"); } } total +=("\r\n"); } } catch (SQLException e) { total =(e.getMessage()); } System.out.println(total); }
编写modifyGoods方法
public void modifyGoods(Integer cid,Integer num) { //修改商品 int i = 0; String sql = "UPDATE carts SET num=?" + " WHERE id=?"; PreparedStatement pstmt; try { pstmt = (PreparedStatement) conn.prepareStatement(sql); pstmt.setInt(1, num); pstmt.setInt(2,Integer.valueOf(cid)); i = pstmt.executeUpdate(); if(i!=0){ System.out.println("订单"+cid+"修改成功!"); }else { System.out.println("订单"+cid+"修改失败!"); } pstmt.close(); } catch (SQLException e) { System.out.println(e.getMessage()); } }
测试代码
main. TestCart:
package main; import java.util.Scanner; import dao.*; import entity.*; public class TestCart { public static void main(String[] args) { // TODO Auto-generated method stub CartDao s = new CartDaoSQL(); UserDao uds =new UserDaoSQL(); uds.queryUser(); System.out.println("请输入用户id号:"); Scanner sc = new Scanner(System.in); int uid = Integer.valueOf(sc.next());//输入用户id号 /* 向购物车种添加商品 */ GoodsDao g = new GoodsDaoSQL(); System.out.println("商城现有商品:"); System.out.println(g.findAll()); System.out.println("您想购买什么商品?(输入商品id号)"); int gid,num; gid = Integer.valueOf(sc.next());//输入商品id号 System.out.println("购买该商品的数量为:"); num = Integer.valueOf(sc.next());//输入商品购买数量 s.addGoods(uid, gid, num); System.out.println("您想购买什么商品?(输入商品id号)"); gid = Integer.valueOf(sc.next());//输入商品id号 System.out.println("购买该商品的数量为:"); num = Integer.valueOf(sc.next());//输入商品购买数量 s.addGoods(uid, gid, num); /* 查询购物车中商品 */ //获取购物车商品总数 System.out.println("该用户购物车共有:" + s.getNum(uid)+" 件商品"); //查询购物车所有商品 System.out.println("该用户购物车如下所示:"); s.queryGoods(uid); /* 修改购物车内商品的订购数目 */ System.out.println("您想修改什么商品?(输入订单id号)"); int cid = Integer.valueOf(sc.next());//输入商品id号 System.out.println("修改后,该商品的数量为:"); num = Integer.valueOf(sc.next()); s.modifyGoods(cid, num); //获取购物车商品总数 System.out.println("该用户购物车共有:" + s.getNum(uid)+" 件商品"); //查询购物车所有商品 System.out.println("该用户购物车如下所示:"); s.queryGoods(uid); /* 删除购物车中 商品 */ System.out.println("您想取消什么订单的购买?(输入订单id号)"); cid = Integer.valueOf(sc.next());//输入订单id号 s.delGoods(cid); //查看购物车内某商品是否存在 int now_num = s.hasGoods(uid,gid); if(now_num !=0 ) { System.out.println("编号为"+gid+"的商品现在不在购物车中"); } //获取购物车商品总数 System.out.println("该用户购物车共有:" + s.getNum(uid)+" 件商品"); //查询购物车所有商品 System.out.println("该用户购物车如下所示:"); s.queryGoods(uid); sc.close(); } }