From e64094d4b270b09cbbcb552d8309acb78e94aece Mon Sep 17 00:00:00 2001 From: JiaXinWang61 <584937529@qq.com> Date: Thu, 31 Oct 2019 23:16:27 +0800 Subject: [PATCH 1/5] =?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 | 88 ++++++++++++++++++++-- 1 file changed, 81 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 c2bcf96..d69a7a5 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.ResultSet; import java.sql.SQLException; +import java.sql.PreparedStatement; +import java.sql.DriverManager; +import java.util.ArrayList; import java.util.List; public class Sql { @@ -82,14 +86,25 @@ public String toString() { // | 2 | // +-----+ public static int countUsersWhoHaveBoughtGoods(Connection databaseConnection, Integer goodsId) throws SQLException { - return 0; + try (PreparedStatement statement = databaseConnection.prepareStatement("select count(distinct USER_ID)\n" + + " 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 +115,20 @@ 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; + try (PreparedStatement statement = databaseConnection.prepareStatement("select * from USER order by id desc limit ?,?")) { + statement.setInt(pageSize, pageNum); + ResultSet resultSet = statement.executeQuery(); + List users = 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); + users.add(user); + } + return users; + } } // 商品及其营收 @@ -132,7 +160,20 @@ public String toString() { // | 3 | goods3 | 20 | // +----+--------+------+ public static List getGoodsAndGmv(Connection databaseConnection) throws SQLException { - return null; + try (PreparedStatement statement = databaseConnection.prepareStatement("select \"ORDER\".GOODS_ID, GOODS.NAME, sum(\"ORDER\".GOODS_ID * \"ORDER\".GOODS_PRICE) as GMV\n" + + "from \"ORDER\"\n" + + " join GOODS on \"ORDER\".GOODS_ID = GOODS.ID group by \"ORDER\".GOODS_ID order by GMV desc")) { + ResultSet resultSet = statement.executeQuery(); + List goodsAndGmvs = new ArrayList<>(); + while (resultSet.next()) { + GoodsAndGmv goodsAndGmv = new GoodsAndGmv(); + goodsAndGmv.goodsId = resultSet.getInt(1); + goodsAndGmv.goodsName = resultSet.getString(2); + goodsAndGmv.gmv = resultSet.getBigDecimal(3); + goodsAndGmvs.add(goodsAndGmv); + } + return goodsAndGmvs; + } } @@ -170,7 +211,25 @@ public String toString() { // | 6 | zhangsan | goods3 | 20 | // +----------+-----------+------------+-------------+ public static List getInnerJoinOrders(Connection databaseConnection) throws SQLException { - return null; + try (PreparedStatement statement = databaseConnection.prepareStatement("select \"ORDER\".USER_ID as order_id,\n" + + " USER.NAME as user_name,\n" + + " GOODS.NAME as goods_name,\n" + + " (\"ORDER\".GOODS_NUM * \"ORDER\".GOODS_PRICE) as total_price\n" + + "from \"ORDER\"\n" + + " join GOODS on \"ORDER\".GOODS_ID = GOODS.ID\n" + + " join USER on \"ORDER\".USER_ID = USER.ID")) { + ResultSet resultSet = statement.executeQuery(); + List orders = 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); + orders.add(order); + } + return orders; + } } /** @@ -198,7 +257,22 @@ 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\".USER_ID as Order_id, USER.NAME as user_name, GOODS.NAME as goods_name, (\"ORDER\".GOODS_NUM * \"ORDER\".GOODS_PRICE) as total_price\n" + + "from \"ORDER\"\n" + + " left join GOODS on \"ORDER\".GOODS_ID = goods.id\n" + + " left join USER on \"ORDER\".USER_ID = USER.ID")) { + ResultSet resultSet = statement.executeQuery(); + List orders = 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); + orders.add(order); + } + return orders; + } } // 注意,运行这个方法之前,请先运行mvn initialize把测试数据灌入数据库 From 1ddb17dd200b2cb0e2d971f52a17f0b2b38b3d6a Mon Sep 17 00:00:00 2001 From: JiaXinWang61 <584937529@qq.com> Date: Thu, 31 Oct 2019 23:27:00 +0800 Subject: [PATCH 2/5] =?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 | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/hcsp/sql/Sql.java b/src/main/java/com/github/hcsp/sql/Sql.java index d69a7a5..2f19972 100644 --- a/src/main/java/com/github/hcsp/sql/Sql.java +++ b/src/main/java/com/github/hcsp/sql/Sql.java @@ -76,8 +76,10 @@ public String toString() { * 题目1: * 查询有多少所有用户曾经买过指定的商品 * - * @param goodsId 指定的商品ID + * @param databaseConnection 数据库连接 + * @param goodsId 指定的商品ID * @return 有多少用户买过这个商品 + * @throws SQLException SQL异常 */ // 例如,输入goodsId = 1,返回2,因为有2个用户曾经买过商品1。 // +-----+ @@ -104,9 +106,11 @@ public static int countUsersWhoHaveBoughtGoods(Connection databaseConnection, In * 题目2: * 分页查询所有用户,按照ID倒序排列 * - * @param pageNum 第几页,从1开始 - * @param pageSize 每页有多少个元素 + * @param databaseConnection 数据库连接 + * @param pageNum 第几页,从1开始 + * @param pageSize 每页有多少个元素 * @return 指定页中的用户 + * @throws SQLException SQL异常 */ // 例如,pageNum = 2, pageSize = 3(每页3个元素,取第二页),则应该返回: // +----+----------+------+----------+ @@ -146,6 +150,10 @@ public String toString() { /** * 题目3: * 查询所有的商品及其销售额,按照销售额从大到小排序 + * + * @param databaseConnection 数据库连接 + * @return 所有的商品及其销售额,按照销售额从大到小排序 + * @throws SQLException SQL异常 */ // 预期的结果应该如图所示 // +----+--------+------+ @@ -193,6 +201,10 @@ public String toString() { /** * 题目4: * 查询订单信息,只查询用户名、商品名齐全的订单,即INNER JOIN方式 + * + * @param databaseConnection 数据库连接 + * @return 查询订单信息,只查询用户名、商品名齐全的订单 + * @throws SQLException SQL异常 */ // 预期的结果为: // +----------+-----------+------------+-------------+ @@ -235,6 +247,10 @@ public static List getInnerJoinOrders(Connection databaseConnection) thro /** * 题目5: * 查询所有订单信息,哪怕它的用户名、商品名缺失,即LEFT JOIN方式 + * + * @param databaseConnection 数据库连接 + * @return 查询所有订单信息,哪怕它的用户名、商品名缺失 + * @throws SQLException SQL异常 */ // 预期的结果为: // +----------+-----------+------------+-------------+ From 2976d35f7806f912e3d90d99732b09aa1527856d Mon Sep 17 00:00:00 2001 From: JiaXinWang61 <584937529@qq.com> Date: Thu, 31 Oct 2019 23:57:27 +0800 Subject: [PATCH 3/5] =?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 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/hcsp/sql/Sql.java b/src/main/java/com/github/hcsp/sql/Sql.java index 2f19972..dd23b23 100644 --- a/src/main/java/com/github/hcsp/sql/Sql.java +++ b/src/main/java/com/github/hcsp/sql/Sql.java @@ -120,7 +120,8 @@ public static int countUsersWhoHaveBoughtGoods(Connection databaseConnection, In // +----+----------+------+----------+ public static List getUsersByPageOrderedByIdDesc(Connection databaseConnection, int pageNum, int pageSize) throws SQLException { try (PreparedStatement statement = databaseConnection.prepareStatement("select * from USER order by id desc limit ?,?")) { - statement.setInt(pageSize, pageNum); + statement.setInt(1, pageSize); + statement.setInt(2, (pageNum - 1) * pageSize); ResultSet resultSet = statement.executeQuery(); List users = new ArrayList<>(); while (resultSet.next()) { @@ -168,7 +169,8 @@ public String toString() { // | 3 | goods3 | 20 | // +----+--------+------+ public static List getGoodsAndGmv(Connection databaseConnection) throws SQLException { - try (PreparedStatement statement = databaseConnection.prepareStatement("select \"ORDER\".GOODS_ID, GOODS.NAME, sum(\"ORDER\".GOODS_ID * \"ORDER\".GOODS_PRICE) as GMV\n" + + try (PreparedStatement statement = databaseConnection.prepareStatement("select \"ORDER\".GOODS_ID as ID, GOODS.NAME, " + + "sum(GOODS_NUM * GOODS_PRICE) as GMV\n" + "from \"ORDER\"\n" + " join GOODS on \"ORDER\".GOODS_ID = GOODS.ID group by \"ORDER\".GOODS_ID order by GMV desc")) { ResultSet resultSet = statement.executeQuery(); From 8b7ff7617646653005adf261551a277ee4c71f07 Mon Sep 17 00:00:00 2001 From: JiaXinWang61 <584937529@qq.com> Date: Fri, 1 Nov 2019 15:19:51 +0800 Subject: [PATCH 4/5] =?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 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/hcsp/sql/Sql.java b/src/main/java/com/github/hcsp/sql/Sql.java index dd23b23..a09b5cd 100644 --- a/src/main/java/com/github/hcsp/sql/Sql.java +++ b/src/main/java/com/github/hcsp/sql/Sql.java @@ -262,7 +262,7 @@ public static List getInnerJoinOrders(Connection databaseConnection) thro // +----------+-----------+------------+-------------+ // | 2 | lisi | goods1 | 10 | // +----------+-----------+------------+-------------+ -// | 3 | wangwu | goods1 | 20 | +// | 3 | lisi | goods1 | 20 | // +----------+-----------+------------+-------------+ // | 4 | zhangsan | goods2 | 80 | // +----------+-----------+------------+-------------+ From 862e81b6d98b3313f96aee67c7bd2dd66b1ca504 Mon Sep 17 00:00:00 2001 From: JiaXinWang61 <584937529@qq.com> Date: Sun, 10 Nov 2019 21:00:50 +0800 Subject: [PATCH 5/5] =?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 | 29 +++++++++------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/github/hcsp/sql/Sql.java b/src/main/java/com/github/hcsp/sql/Sql.java index a09b5cd..76e4d55 100644 --- a/src/main/java/com/github/hcsp/sql/Sql.java +++ b/src/main/java/com/github/hcsp/sql/Sql.java @@ -225,25 +225,15 @@ public String toString() { // | 6 | zhangsan | goods3 | 20 | // +----------+-----------+------------+-------------+ public static List getInnerJoinOrders(Connection databaseConnection) throws SQLException { - try (PreparedStatement statement = databaseConnection.prepareStatement("select \"ORDER\".USER_ID as order_id,\n" + + String sql = "select \"ORDER\".USER_ID as order_id,\n" + " USER.NAME as user_name,\n" + " GOODS.NAME as goods_name,\n" + " (\"ORDER\".GOODS_NUM * \"ORDER\".GOODS_PRICE) as total_price\n" + "from \"ORDER\"\n" + " join GOODS on \"ORDER\".GOODS_ID = GOODS.ID\n" + - " join USER on \"ORDER\".USER_ID = USER.ID")) { - ResultSet resultSet = statement.executeQuery(); - List orders = 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); - orders.add(order); - } - return orders; - } + " join USER on \"ORDER\".USER_ID = USER.ID"; + return getJoinOrders(databaseConnection, sql); + } /** @@ -275,10 +265,16 @@ public static List getInnerJoinOrders(Connection databaseConnection) thro // | 8 | NULL | NULL | 60 | // +----------+-----------+------------+-------------+ public static List getLeftJoinOrders(Connection databaseConnection) throws SQLException { - try (PreparedStatement statement = databaseConnection.prepareStatement("select \"ORDER\".USER_ID as Order_id, USER.NAME as user_name, GOODS.NAME as goods_name, (\"ORDER\".GOODS_NUM * \"ORDER\".GOODS_PRICE) as total_price\n" + + String sql = "select \"ORDER\".USER_ID as Order_id, USER.NAME as user_name, GOODS.NAME as goods_name, (\"ORDER\".GOODS_NUM * \"ORDER\".GOODS_PRICE) as total_price\n" + "from \"ORDER\"\n" + " left join GOODS on \"ORDER\".GOODS_ID = goods.id\n" + - " left join USER on \"ORDER\".USER_ID = USER.ID")) { + " left join USER on \"ORDER\".USER_ID = USER.ID"; + return getJoinOrders(databaseConnection, sql); + } + // 注意,运行这个方法之前,请先运行mvn initialize把测试数据灌入数据库 + + public static List getJoinOrders(Connection databaseConnection, String sql) throws SQLException { + try (PreparedStatement statement = databaseConnection.prepareStatement(sql)) { ResultSet resultSet = statement.executeQuery(); List orders = new ArrayList<>(); while (resultSet.next()) { @@ -293,7 +289,6 @@ public static List getLeftJoinOrders(Connection databaseConnection) throw } } - // 注意,运行这个方法之前,请先运行mvn initialize把测试数据灌入数据库 public static void main(String[] args) throws SQLException { File projectDir = new File(System.getProperty("basedir", System.getProperty("user.dir"))); String jdbcUrl = "jdbc:h2:file:" + new File(projectDir, "target/test").getAbsolutePath();