From c58d33cd5c073690e2602a20b6a22ab9c6ff9d37 Mon Sep 17 00:00:00 2001 From: concise <15521608275@163.com> Date: Mon, 1 Jun 2020 12:51:49 +0800 Subject: [PATCH] change to another file --- src/main/java/com/github/hcsp/sql/Sql.java | 99 +++++++++++++++++++--- 1 file changed, 88 insertions(+), 11 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..1b6b9f9 100644 --- a/src/main/java/com/github/hcsp/sql/Sql.java +++ b/src/main/java/com/github/hcsp/sql/Sql.java @@ -1,10 +1,14 @@ package com.github.hcsp.sql; + import java.io.File; import java.math.BigDecimal; import java.sql.Connection; import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; import java.util.List; public class Sql { @@ -68,7 +72,7 @@ public String toString() { } } - /** + /* * 题目1: * 查询有多少所有用户曾经买过指定的商品 * @@ -82,14 +86,21 @@ 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; } - /** + /* * 题目2: * 分页查询所有用户,按照ID倒序排列 * - * @param pageNum 第几页,从1开始 + * @param pageNum 第几页,从1开始 * @param pageSize 每页有多少个元素 * @return 指定页中的用户 */ @@ -100,7 +111,23 @@ 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 * from user order by id desc limit ?,? "); + + statement.setInt(1, pageSize); + statement.setInt(2, (pageNum - 1) * pageSize); + + ResultSet resultSet = statement.executeQuery(); + + List list = new ArrayList<>(); + while (resultSet.next()) { + User user = new User(); + user.id = resultSet.getInt(1); + user.name = resultSet.getNString(2); + user.tel = resultSet.getNString(3); + user.address = resultSet.getString(4); + list.add(user); + } + return list; } // 商品及其营收 @@ -115,7 +142,7 @@ public String toString() { } } - /** + /* * 题目3: * 查询所有的商品及其销售额,按照销售额从大到小排序 */ @@ -132,7 +159,22 @@ public String toString() { // | 3 | goods3 | 20 | // +----+--------+------+ public static List getGoodsAndGmv(Connection databaseConnection) throws SQLException { - return null; + PreparedStatement statement = databaseConnection.prepareStatement("select `ORDER`.GOODS_ID,GOODS.NAME, sum(`ORDER`.GOODS_NUM*`ORDER`.GOODS_PRICE) as total from `ORDER`\n" + + "join GOODS on `ORDER`.GOODS_ID = GOODS.ID\n" + + "group by `ORDER`.GOODS_ID \n" + + "order by total desc "); + + + ResultSet resultSet = statement.executeQuery(); + List list = new ArrayList<>(); + while (resultSet.next()) { + GoodsAndGmv goodsAndGmv = new GoodsAndGmv(); + goodsAndGmv.goodsId = resultSet.getInt(1); + goodsAndGmv.goodsName = resultSet.getNString(2); + goodsAndGmv.gmv = resultSet.getBigDecimal(3); + list.add(goodsAndGmv); + } + return list; } @@ -149,7 +191,7 @@ public String toString() { } } - /** + /* * 题目4: * 查询订单信息,只查询用户名、商品名齐全的订单,即INNER JOIN方式 */ @@ -170,10 +212,27 @@ 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, sum(GOODS_PRICE*GOODS_NUM) as TOTAL_PRICE from `ORDER` \n" + + " join GOODS\n" + + " on `ORDER`.GOODS_ID = GOODS.ID\n" + + " join USER\n" + + " on `ORDER`.USER_ID = USER.ID\n" + + "group by `ORDER`.ID\n"); + + ResultSet resultSet = statement.executeQuery(); + List list = new ArrayList<>(); + while (resultSet.next()) { + Order order = new Order(); + order.id = resultSet.getInt(1); + order.userName = resultSet.getNString(2); + order.goodsName = resultSet.getNString(3); + order.totalPrice = resultSet.getBigDecimal(4); + list.add(order); + } + return list; } - /** + /* * 题目5: * 查询所有订单信息,哪怕它的用户名、商品名缺失,即LEFT JOIN方式 */ @@ -198,7 +257,25 @@ public static List getInnerJoinOrders(Connection databaseConnection) thro // | 8 | NULL | NULL | 60 | // +----------+-----------+------------+-------------+ public static List getLeftJoinOrders(Connection databaseConnection) throws SQLException { - return null; + try (PreparedStatement statement = databaseConnection.prepareStatement("select `ORDER`.id, user.NAME as user_name, GOODS.NAME as goods_name, `ORDER`.GOODS_NUM * GOODS_PRICE\n" + + "from \"ORDER\"\n" + + " left join GOODS\n" + + " on \"ORDER\".GOODS_ID= GOODS.id\n" + + " left join USER\n" + + " on \"ORDER\".USER_ID = USER.ID\n")) { + ResultSet resultSet = statement.executeQuery(); + + List orders = new ArrayList<>(); + while (resultSet.next()) { + Order order = new Order(); + order.id = resultSet.getInt(1); + order.userName = resultSet.getNString(2); + order.goodsName = resultSet.getNString(3); + order.totalPrice = resultSet.getBigDecimal(4); + orders.add(order); + } + return orders; + } } // 注意,运行这个方法之前,请先运行mvn initialize把测试数据灌入数据库