sql纵向数据怎么转java对象列表横向数据

img


大家好,请问想我想把这列查询结果存给一个Java里的List对象里,需要怎么操作。
总之就是数据库纵向数据中不知道怎么转给横向数据,只能自定义实体类设置4个属性吗??

select total1 union all select total2 union all select total3 union all select total4

没有明白 你查询出来 放到List<Map<String, Object>> 里面不就好了吗

select total1,total2,total3,total4 from 你的表名称,查出来就是结果,为什么要换成纵向的,不冗余吗

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7428678
  • 你也可以参考下这篇文章:sql正确,在Java中查询却查询不到数据
  • 除此之外, 这篇博客: Java后端面试系列-数据库篇中的 2.5.1 如何定位并优化慢查询Sql 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 大致思路如下:

    1. 根据慢日志定位慢查询sql
    2. 使用 explain等工具分析sql
    3. 修改sql或者尽量让sql走索引

    (1)根据慢日志定位慢查询sql

    SHOW VARIABLES LIKE '%quer%';
    

    查询一些系统变量:
    在这里插入图片描述
    主要由三个变量值得注意:
    long_query_time :查过这个时间,就算是个慢查询
    slow_query_log :是否开启慢差日志
    slow_query_log_file:慢差日志保存位置

    修改命令如下:

    SET GLOBAL long_query_time = 1;
    
    SET GLOBAL slow_query_log = ON;
    
    SET GLOBAL slow_query_log_file = 'E:\\program-software\\mysql5.7.23\\slow.log';
    

    开始查询:

    SELECT NAME FROM t_teacher ORDER BY NAME DESC;
    

    可以打开slow.log
    在这里插入图片描述
    花了近10秒

    也可用通过命令查询本次连接慢差的次数:
    SHOW STATUS LIKE '%slow_queries%';
    在这里插入图片描述

    (2)根据explain工具分析这条sql

    EXPLAIN SELECT NAME FROM t_teacher ORDER BY NAME DESC;

    重点是看typeExtra两个字段

    • type
      在这里插入图片描述
    • extra
      在这里插入图片描述

    (3)修改sql或者尽量让sql走索引

    EXPLAIN SELECT id FROM t_teacher ORDER BY id DESC;
    

    加索引

    ALTER TABLE t_teacher ADD INDEX idx_name(NAME);
    
  • 您还可以看一下 马克老师的Java大数据培训学校全套教材--12)数据库课程中的 什么是SQL?小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    根据问题内容,你想将查询结果存储在一个Java的List对象中,并且将纵向排列的数据转换为横向的数据。以下是一种可能的解决方案:

    1. 首先,你需要连接到数据库并执行SQL查询。根据你的需求,这里假设你正在使用JDBC连接到MySQL数据库。你需要下载并配置MySQL的JDBC驱动程序。

    ```java import java.sql.*;

    public class Main { public static void main(String[] args) { // 配置数据库连接参数 String url = "jdbc:mysql://localhost:3306/db_name"; String username = "username"; String password = "password";

           // 连接到数据库
           try (Connection connection = DriverManager.getConnection(url, username, password)) {
               // 创建一个Statement对象
               Statement statement = connection.createStatement();
    
               // 执行SQL查询
               String sql = "SELECT col1, col2, col3, col4 FROM table_name";
               ResultSet resultSet = statement.executeQuery(sql);
    
               // 将查询结果转换为横向数据
               List<Object[]> resultList = new ArrayList<>();
               while (resultSet.next()) {
                   Object[] row = new Object[4];
                   row[0] = resultSet.getObject("col1");
                   row[1] = resultSet.getObject("col2");
                   row[2] = resultSet.getObject("col3");
                   row[3] = resultSet.getObject("col4");
                   resultList.add(row);
               }
    
               // 关闭结果集和Statement
               resultSet.close();
               statement.close();
    
               // 输出结果
               for (Object[] row : resultList) {
                   System.out.println(Arrays.toString(row));
               }
           } catch (SQLException e) {
               e.printStackTrace();
           }
       }
    

    } ```

    1. 在上述代码中,你需要将urlusernamepasswordsqltable_namecol1col2col3col4替换为你实际的数据库连接信息和查询语句。

    注意,这里将查询结果存储在一个名为resultList的List对象中,每个查询结果的横向数据存储在一个包含4个元素的Object数组中。

    如果查询结果的列数或列名不确定,你可以使用ResultSetMetaData类获取查询结果集的元数据,并动态创建对应长度的Object数组存储数据。

    java ResultSetMetaData metaData = resultSet.getMetaData(); int columnCount = metaData.getColumnCount(); while (resultSet.next()) { Object[] row = new Object[columnCount]; for (int i = 1; i <= columnCount; i++) { row[i - 1] = resultSet.getObject(i); } resultList.add(row); }

    以上代码演示了如何将查询结果转换为横向的数据并存储在Java的List对象中。根据实际需求,你可以根据自己的逻辑进行操作,如将数据封装为自定义的Java对象等。如果有任何问题,请随时向我提问。