我的 SQL - 获取特定搜索的值,然后添加并最后放入同一张表的另一列

分享于2022年07月17日 apache-poi java mysql 问答
【问题标题】:我的 SQL - 获取特定搜索的值,然后添加并最后放入同一张表的另一列(My SQL - getting values for specific search and then adding and finally putting in another column of same table)
【发布时间】:2022-01-24 11:44:02
【问题描述】:

我想添加执行某个查询后得到的某个搜索的值,最后将它们分别放在同一张表的不同列中。

从 Payment_Data 中选择 TotalAmount,其中 CreatedAt 类似“%04-07%”,插入到 VendorPIAmount;

就像我在执行顶部查询后得到了值,但我不知道如何添加它们,最后将它们放在另一列中。

  • 您可以通过以文本形式提供示例数据和预期结果来澄清这个问题。请阅读 stackoverflow.com/help/how-to-ask
  • 如上所述,您的问题非常笼统。您是否需要对第一个查询中包含的数据进行处理?还是您想立即将它们插入另一个表/列?我不明白,为什么您的问题被标记为“Java”或“Apache-POI”?
  • @RainerZufall 我想在获得查询结果后立即将它们插入另一列。它被标记为 java 和 apache poi,因为我正在使用 java 将数据从 MySQL 导入到 excel 中。
  • @P.Salmon ok ..... select column_name from table_name where column_name like "%value%" 以及我得到的任何值我想先添加它们,然后想单独放入另一个指定的柱子。还有一件事我想用java代码做所有事情,因为我正在将数据从MySQL导入到excel文件中。谢谢!!
  • 抱歉,这是我第一次发布问题,这就是为什么我不擅长这个问题。

【解决方案1】:

借助一些已有的库,这个功能很容易实现,但是如果你的数据量比较大,fastexcel是apache poi的一个很好的替代品。参考: https://github.com/dhatim/fastexcel/ 。另外hutool是一个集合很棒的工具,可以轻松操作数据库。它还有很多其他常用的功能,日期格式转换,字符串处理等。 参考: https://github.com/dromara/hutool

package com.example.demo;

import cn.hutool.core.io.FileUtil;
import cn.hutool.db.DbUtil;
import cn.hutool.db.ds.simple.SimpleDataSource;
import org.dhatim.fastexcel.Color;
import org.dhatim.fastexcel.Workbook;
import org.dhatim.fastexcel.Worksheet;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.OutputStream;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;

public class DataExportTest {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    /**
     * export data to excel
     */
    @Test
    public void Test2() {
        LocalDateTime start = LocalDateTime.now();
        try (OutputStream os = FileUtil.getOutputStream("D:\\tmp\\TEST_DATA_2_EXCEL.xlsx")) {
            SimpleDataSource ds = new SimpleDataSource("jdbc:mariadb://localhost:3306/litemall", "root", "rooter", "org.mariadb.jdbc.Driver");
            List list = DbUtil.use(ds).query("SELECT TotalAmount  from Payment_Data where CreatedAt like ?", String.class, "%04-07%");
            Workbook wb = new Workbook(os, "MyApplication", "1.0");
            Worksheet ws = wb.newWorksheet("Sheet 1");
            ws.value(0, 0, "VendorPIAmount");
            ws.style(0, 0).fillColor(Color.GRAY2).set();
            for (int i = 0; i < list.size(); i++) {
                ws.value(i + 1, 0, list.get(i));
            }
            wb.finish();
        } catch (Exception e) {
            logger.error("Error", e);
        }
        LocalDateTime end = LocalDateTime.now();
        logger.info("Cost time {}", Duration.between(start, end).toMillis() + "ms");
    }
}

依赖关系:


    org.mariadb.jdbc
    mariadb-java-client
    2.7.4


    org.dhatim
    fastexcel-reader
    0.12.12


    cn.hutool
    hutool-all
    5.7.16

代码中使用的表是根据您的描述在本地mariadb数据库中创建的。 DDL如下。

-- ----------------------------
-- Table structure for payment_data
-- ----------------------------
DROP TABLE IF EXISTS `payment_data`;
CREATE TABLE `payment_data`  (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `CreatedAt` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `TotalAmount` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of payment_data
-- ----------------------------
INSERT INTO `payment_data` VALUES (1, 'DCBA01-17ABCD', 'AAA');
INSERT INTO `payment_data` VALUES (2, 'DEDCB02-32BCDE', 'BBB');
INSERT INTO `payment_data` VALUES (3, 'ASDF04-07FDSA', 'CCC');
INSERT INTO `payment_data` VALUES (4, 'ZXCV04-07VCXZ', 'DDD');