From 084db95f7782b82379a0b42d36154236b175e165 Mon Sep 17 00:00:00 2001 From: zdmhahaha <987854018@qq.com> Date: Sat, 20 Nov 2021 01:32:45 +0800 Subject: [PATCH 1/4] =?UTF-8?q?SELECT=E5=91=BD=E4=BB=A4=E4=B8=8EJDBC?= =?UTF-8?q?=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/github/hcsp/sql/Sql.java | 67 +++++++++++++++++++--- 1 file changed, 59 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/github/hcsp/sql/Sql.java b/src/main/java/com/github/hcsp/sql/Sql.java index 418a0df..b95df9b 100644 --- a/src/main/java/com/github/hcsp/sql/Sql.java +++ b/src/main/java/com/github/hcsp/sql/Sql.java @@ -2,9 +2,8 @@ package com.github.hcsp.sql; import java.io.File; import java.math.BigDecimal; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; +import java.sql.*; +import java.util.ArrayList; import java.util.List; public class Sql { @@ -82,7 +81,13 @@ public String toString() { // | 2 | // +-----+ public static int countUsersWhoHaveBoughtGoods(Connection databaseConnection, Integer goodsId) throws SQLException { - return 0; + PreparedStatement statement = databaseConnection.prepareStatement("select count(distinct user_id) from `order` where goods_id = ?"); + statement.setInt(1,goodsId); + ResultSet resultSet = statement.executeQuery(); + while (resultSet.next()) { + return resultSet.getInt(1); + } + return -1; } /** @@ -100,7 +105,21 @@ public static int countUsersWhoHaveBoughtGoods(Connection databaseConnection, In // | 1 | zhangsan | tel1 | beijing | // +----+----------+------+----------+ public static List getUsersByPageOrderedByIdDesc(Connection databaseConnection, int pageNum, int pageSize) throws SQLException { - return null; + PreparedStatement statement = databaseConnection.prepareStatement("select id, name, tel ,address from `user` ORDER BY ID DESC limit ?,?"); + statement.setInt(1,pageSize * (pageNum - 1));//2 2,2 + statement.setInt(2,pageSize);//2 + ResultSet resultSet = statement.executeQuery(); + + List list = new ArrayList<>(); + while (resultSet.next()) { + User user = new User(); + user.id = resultSet.getInt(1); + user.name = resultSet.getString(2); + user.tel = resultSet.getString(3); + user.address = resultSet.getString(4); + list.add(user); + } + return list; } // 商品及其营收 @@ -132,7 +151,17 @@ public String toString() { // | 3 | goods3 | 20 | // +----+--------+------+ public static List getGoodsAndGmv(Connection databaseConnection) throws SQLException { - return null; + PreparedStatement statement = databaseConnection.prepareStatement("select goods_id ,name,sum(goods_num * goods_price) as GMV from `order` join goods on `order`.goods_id = goods.id group by goods_id order by GMV desc"); + ResultSet resultSet = statement.executeQuery(); + List list = new ArrayList<>(); + while (resultSet.next()) { + GoodsAndGmv goodsAndGmv = new GoodsAndGmv(); + goodsAndGmv.goodsId= resultSet.getInt(1); + goodsAndGmv.goodsName = resultSet.getString(2); + goodsAndGmv.gmv = resultSet.getBigDecimal(3); + list.add(goodsAndGmv); + } + return list; } @@ -170,7 +199,18 @@ public String toString() { // | 6 | zhangsan | goods3 | 20 | // +----------+-----------+------------+-------------+ public static List getInnerJoinOrders(Connection databaseConnection) throws SQLException { - return null; + PreparedStatement statement = databaseConnection.prepareStatement("select `order`.id, user.name, goods.name,goods_price*goods_num as total from `order` join user on `order`.user_id = user.id join goods on `order`.goods_id = goods.id"); + ResultSet resultSet = statement.executeQuery(); + List list = new ArrayList<>(); + while (resultSet.next()) { + Order order = new Order(); + order.id = resultSet.getInt(1); + order.userName= resultSet.getString(2); + order.goodsName = resultSet.getString(3); + order.totalPrice = resultSet.getBigDecimal(4); + list.add(order); + } + return list; } /** @@ -198,7 +238,18 @@ public static List getInnerJoinOrders(Connection databaseConnection) thro // | 8 | NULL | NULL | 60 | // +----------+-----------+------------+-------------+ public static List getLeftJoinOrders(Connection databaseConnection) throws SQLException { - return null; + PreparedStatement statement = databaseConnection.prepareStatement("select `order`.id, user.name, goods.name,goods_price*goods_num as total from `order` left join user on `order`.user_id = user.id left join goods on `order`.goods_id = goods.id"); + ResultSet resultSet = statement.executeQuery(); + List list = new ArrayList<>(); + while (resultSet.next()) { + Order order = new Order(); + order.id = resultSet.getInt(1); + order.userName= resultSet.getString(2); + order.goodsName = resultSet.getString(3); + order.totalPrice = resultSet.getBigDecimal(4); + list.add(order); + } + return list; } // 注意,运行这个方法之前,请先运行mvn initialize把测试数据灌入数据库 From f2de8145a604881763f901fcf660961588a3110d Mon Sep 17 00:00:00 2001 From: zdmhahaha <987854018@qq.com> Date: Sat, 20 Nov 2021 01:37:49 +0800 Subject: [PATCH 2/4] geshihua --- src/main/java/com/github/hcsp/sql/Sql.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/hcsp/sql/Sql.java b/src/main/java/com/github/hcsp/sql/Sql.java index b95df9b..c4c4f58 100644 --- a/src/main/java/com/github/hcsp/sql/Sql.java +++ b/src/main/java/com/github/hcsp/sql/Sql.java @@ -1,5 +1,6 @@ package com.github.hcsp.sql; + import java.io.File; import java.math.BigDecimal; import java.sql.*; @@ -82,7 +83,7 @@ public String toString() { // +-----+ public static int countUsersWhoHaveBoughtGoods(Connection databaseConnection, Integer goodsId) throws SQLException { PreparedStatement statement = databaseConnection.prepareStatement("select count(distinct user_id) from `order` where goods_id = ?"); - statement.setInt(1,goodsId); + statement.setInt(1, goodsId); ResultSet resultSet = statement.executeQuery(); while (resultSet.next()) { return resultSet.getInt(1); @@ -94,7 +95,7 @@ public static int countUsersWhoHaveBoughtGoods(Connection databaseConnection, In * 题目2: * 分页查询所有用户,按照ID倒序排列 * - * @param pageNum 第几页,从1开始 + * @param pageNum 第几页,从1开始 * @param pageSize 每页有多少个元素 * @return 指定页中的用户 */ @@ -106,8 +107,8 @@ public static int countUsersWhoHaveBoughtGoods(Connection databaseConnection, In // +----+----------+------+----------+ public static List getUsersByPageOrderedByIdDesc(Connection databaseConnection, int pageNum, int pageSize) throws SQLException { PreparedStatement statement = databaseConnection.prepareStatement("select id, name, tel ,address from `user` ORDER BY ID DESC limit ?,?"); - statement.setInt(1,pageSize * (pageNum - 1));//2 2,2 - statement.setInt(2,pageSize);//2 + statement.setInt(1, pageSize * (pageNum - 1));//2 2,2 + statement.setInt(2, pageSize);//2 ResultSet resultSet = statement.executeQuery(); List list = new ArrayList<>(); @@ -156,7 +157,7 @@ public static List getGoodsAndGmv(Connection databaseConnection) th List list = new ArrayList<>(); while (resultSet.next()) { GoodsAndGmv goodsAndGmv = new GoodsAndGmv(); - goodsAndGmv.goodsId= resultSet.getInt(1); + goodsAndGmv.goodsId = resultSet.getInt(1); goodsAndGmv.goodsName = resultSet.getString(2); goodsAndGmv.gmv = resultSet.getBigDecimal(3); list.add(goodsAndGmv); @@ -205,7 +206,7 @@ public static List getInnerJoinOrders(Connection databaseConnection) thro while (resultSet.next()) { Order order = new Order(); order.id = resultSet.getInt(1); - order.userName= resultSet.getString(2); + order.userName = resultSet.getString(2); order.goodsName = resultSet.getString(3); order.totalPrice = resultSet.getBigDecimal(4); list.add(order); @@ -244,7 +245,7 @@ public static List getLeftJoinOrders(Connection databaseConnection) throw while (resultSet.next()) { Order order = new Order(); order.id = resultSet.getInt(1); - order.userName= resultSet.getString(2); + order.userName = resultSet.getString(2); order.goodsName = resultSet.getString(3); order.totalPrice = resultSet.getBigDecimal(4); list.add(order); From e974b22157c21e05dace9ecba15082e7c75632ae Mon Sep 17 00:00:00 2001 From: zdmhahaha <987854018@qq.com> Date: Sat, 20 Nov 2021 01:54:15 +0800 Subject: [PATCH 3/4] dingzheng --- src/main/java/com/github/hcsp/sql/Sql.java | 110 +++++++++++---------- 1 file changed, 59 insertions(+), 51 deletions(-) diff --git a/src/main/java/com/github/hcsp/sql/Sql.java b/src/main/java/com/github/hcsp/sql/Sql.java index c4c4f58..02fcb94 100644 --- a/src/main/java/com/github/hcsp/sql/Sql.java +++ b/src/main/java/com/github/hcsp/sql/Sql.java @@ -82,13 +82,15 @@ public String toString() { // | 2 | // +-----+ public static int countUsersWhoHaveBoughtGoods(Connection databaseConnection, Integer goodsId) throws SQLException { - PreparedStatement statement = databaseConnection.prepareStatement("select count(distinct user_id) from `order` where goods_id = ?"); - statement.setInt(1, goodsId); - ResultSet resultSet = statement.executeQuery(); - while (resultSet.next()) { - return resultSet.getInt(1); + try (PreparedStatement statement = databaseConnection.prepareStatement("select count(distinct user_id) from `order` where goods_id = ?")) { + + statement.setInt(1, goodsId); + ResultSet resultSet = statement.executeQuery(); + while (resultSet.next()) { + return resultSet.getInt(1); + } + return -1; } - return -1; } /** @@ -106,21 +108,22 @@ public static int countUsersWhoHaveBoughtGoods(Connection databaseConnection, In // | 1 | zhangsan | tel1 | beijing | // +----+----------+------+----------+ public static List getUsersByPageOrderedByIdDesc(Connection databaseConnection, int pageNum, int pageSize) throws SQLException { - PreparedStatement statement = databaseConnection.prepareStatement("select id, name, tel ,address from `user` ORDER BY ID DESC limit ?,?"); - statement.setInt(1, pageSize * (pageNum - 1));//2 2,2 - statement.setInt(2, pageSize);//2 - ResultSet resultSet = statement.executeQuery(); + try (PreparedStatement statement = databaseConnection.prepareStatement("select id, name, tel ,address from `user` ORDER BY ID DESC limit ?,?")) { + statement.setInt(1, pageSize * (pageNum - 1)); + statement.setInt(2, pageSize); + ResultSet resultSet = statement.executeQuery(); - List list = new ArrayList<>(); - while (resultSet.next()) { - User user = new User(); - user.id = resultSet.getInt(1); - user.name = resultSet.getString(2); - user.tel = resultSet.getString(3); - user.address = resultSet.getString(4); - list.add(user); + List list = new ArrayList<>(); + while (resultSet.next()) { + User user = new User(); + user.id = resultSet.getInt(1); + user.name = resultSet.getString(2); + user.tel = resultSet.getString(3); + user.address = resultSet.getString(4); + list.add(user); + } + return list; } - return list; } // 商品及其营收 @@ -152,17 +155,19 @@ public String toString() { // | 3 | goods3 | 20 | // +----+--------+------+ public static List getGoodsAndGmv(Connection databaseConnection) throws SQLException { - PreparedStatement statement = databaseConnection.prepareStatement("select goods_id ,name,sum(goods_num * goods_price) as GMV from `order` join goods on `order`.goods_id = goods.id group by goods_id order by GMV desc"); - ResultSet resultSet = statement.executeQuery(); - List list = new ArrayList<>(); - while (resultSet.next()) { - GoodsAndGmv goodsAndGmv = new GoodsAndGmv(); - goodsAndGmv.goodsId = resultSet.getInt(1); - goodsAndGmv.goodsName = resultSet.getString(2); - goodsAndGmv.gmv = resultSet.getBigDecimal(3); - list.add(goodsAndGmv); + try (PreparedStatement statement = databaseConnection.prepareStatement("select goods_id ,name,sum(goods_num * goods_price) as GMV from `order` join goods on `order`.goods_id = goods.id group by goods_id order by GMV desc")) { + + ResultSet resultSet = statement.executeQuery(); + List list = new ArrayList<>(); + while (resultSet.next()) { + GoodsAndGmv goodsAndGmv = new GoodsAndGmv(); + goodsAndGmv.goodsId = resultSet.getInt(1); + goodsAndGmv.goodsName = resultSet.getString(2); + goodsAndGmv.gmv = resultSet.getBigDecimal(3); + list.add(goodsAndGmv); + } + return list; } - return list; } @@ -200,18 +205,20 @@ public String toString() { // | 6 | zhangsan | goods3 | 20 | // +----------+-----------+------------+-------------+ public static List getInnerJoinOrders(Connection databaseConnection) throws SQLException { - PreparedStatement statement = databaseConnection.prepareStatement("select `order`.id, user.name, goods.name,goods_price*goods_num as total from `order` join user on `order`.user_id = user.id join goods on `order`.goods_id = goods.id"); - ResultSet resultSet = statement.executeQuery(); - List list = new ArrayList<>(); - while (resultSet.next()) { - Order order = new Order(); - order.id = resultSet.getInt(1); - order.userName = resultSet.getString(2); - order.goodsName = resultSet.getString(3); - order.totalPrice = resultSet.getBigDecimal(4); - list.add(order); + try (PreparedStatement statement = databaseConnection.prepareStatement("select `order`.id, user.name, goods.name,goods_price*goods_num as total from `order` join user on `order`.user_id = user.id join goods on `order`.goods_id = goods.id")) { + + ResultSet resultSet = statement.executeQuery(); + List list = new ArrayList<>(); + while (resultSet.next()) { + Order order = new Order(); + order.id = resultSet.getInt(1); + order.userName = resultSet.getString(2); + order.goodsName = resultSet.getString(3); + order.totalPrice = resultSet.getBigDecimal(4); + list.add(order); + } + return list; } - return list; } /** @@ -239,18 +246,19 @@ public static List getInnerJoinOrders(Connection databaseConnection) thro // | 8 | NULL | NULL | 60 | // +----------+-----------+------------+-------------+ public static List getLeftJoinOrders(Connection databaseConnection) throws SQLException { - PreparedStatement statement = databaseConnection.prepareStatement("select `order`.id, user.name, goods.name,goods_price*goods_num as total from `order` left join user on `order`.user_id = user.id left join goods on `order`.goods_id = goods.id"); - ResultSet resultSet = statement.executeQuery(); - List list = new ArrayList<>(); - while (resultSet.next()) { - Order order = new Order(); - order.id = resultSet.getInt(1); - order.userName = resultSet.getString(2); - order.goodsName = resultSet.getString(3); - order.totalPrice = resultSet.getBigDecimal(4); - list.add(order); + try (PreparedStatement statement = databaseConnection.prepareStatement("select `order`.id, user.name, goods.name,goods_price*goods_num as total from `order` left join user on `order`.user_id = user.id left join goods on `order`.goods_id = goods.id")) { + ResultSet resultSet = statement.executeQuery(); + List list = new ArrayList<>(); + while (resultSet.next()) { + Order order = new Order(); + order.id = resultSet.getInt(1); + order.userName = resultSet.getString(2); + order.goodsName = resultSet.getString(3); + order.totalPrice = resultSet.getBigDecimal(4); + list.add(order); + } + return list; } - return list; } // 注意,运行这个方法之前,请先运行mvn initialize把测试数据灌入数据库 From 8d16528d6c49c125b5f9c9c9d7f886bf3964bc1b Mon Sep 17 00:00:00 2001 From: zdmhahaha <987854018@qq.com> Date: Sat, 20 Nov 2021 11:18:30 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/github/hcsp/sql/Sql.java | 36 +++------------------- 1 file changed, 4 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/github/hcsp/sql/Sql.java b/src/main/java/com/github/hcsp/sql/Sql.java index 02fcb94..c5c4c88 100644 --- a/src/main/java/com/github/hcsp/sql/Sql.java +++ b/src/main/java/com/github/hcsp/sql/Sql.java @@ -68,14 +68,7 @@ public String toString() { } } - /** - * 题目1: - * 查询有多少所有用户曾经买过指定的商品 - * - * @param goodsId 指定的商品ID - * @return 有多少用户买过这个商品 - */ -// 例如,输入goodsId = 1,返回2,因为有2个用户曾经买过商品1。 + // +-----+ // |count| // +-----+ @@ -93,15 +86,7 @@ public static int countUsersWhoHaveBoughtGoods(Connection databaseConnection, In } } - /** - * 题目2: - * 分页查询所有用户,按照ID倒序排列 - * - * @param pageNum 第几页,从1开始 - * @param pageSize 每页有多少个元素 - * @return 指定页中的用户 - */ -// 例如,pageNum = 2, pageSize = 3(每页3个元素,取第二页),则应该返回: + // +----+----------+------+----------+ // | ID | NAME | TEL | ADDRESS | // +----+----------+------+----------+ @@ -138,11 +123,7 @@ public String toString() { } } - /** - * 题目3: - * 查询所有的商品及其销售额,按照销售额从大到小排序 - */ -// 预期的结果应该如图所示 + // +----+--------+------+ // | ID | NAME | GMV | // +----+--------+------+ @@ -184,11 +165,7 @@ public String toString() { } } - /** - * 题目4: - * 查询订单信息,只查询用户名、商品名齐全的订单,即INNER JOIN方式 - */ -// 预期的结果为: + // +----------+-----------+------------+-------------+ // | ORDER_ID | USER_NAME | GOODS_NAME | TOTAL_PRICE | // +----------+-----------+------------+-------------+ @@ -221,11 +198,6 @@ public static List getInnerJoinOrders(Connection databaseConnection) thro } } - /** - * 题目5: - * 查询所有订单信息,哪怕它的用户名、商品名缺失,即LEFT JOIN方式 - */ -// 预期的结果为: // +----------+-----------+------------+-------------+ // | ORDER_ID | USER_NAME | GOODS_NAME | TOTAL_PRICE | // +----------+-----------+------------+-------------+