[jdbc]JDBC原生写法获取表字段信息以及

[jdbc]JDBC原生写法获取表字段信息以及表数据

package com.xzm.utils;

import lombok.SneakyThrows;
import org.springframework.lang.NonNull;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import static java.sql.DriverManager.getConnection;

public class DbUtilsNew {

    public static final String COLUMN_NAME = "COLUMN_NAME";
    public static final String TYPE_NAME = "TYPE_NAME";
    public static final String COLUMN_SIZE = "COLUMN_SIZE";
    public static final String REMARKS = "REMARKS";

    public static final String TABLE = "TABLE";

    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/lyg_test?useSSL=false&serverTimezone=UTC";
        String user = "root";
        String password = "root";
        String tableName = "region";
        String queryDataSql = "SELECT * FROM " + tableName + " LIMIT 1,3";

        Map<Integer, List<String>> tableColumnAndData = getTableColumnAndData(url, user, password, queryDataSql, tableName);
        System.out.println("tableColumnAndData = " + tableColumnAndData);

    }

    /**
     * 获取表字段信息以及表数据
     */
    public static Map<Integer, List<String>> getTableColumnAndData(String dbUrl,
                                                                   String dbUserName,
                                                                   String dbPassword,
                                                                   String queryDataSql,
                                                                   String tableName) {
        
        // Class.forName("com.mysql.jdbc.Driver");
        // Class.forName("com.mysql.cj.jdbc.Driver");
        
        try (Connection conn = getConnection(dbUrl, dbUserName, dbPassword);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery(queryDataSql)) {
            List<ColumnEntry> tableColumnInfoList = getTableColumnInfoList(conn, tableName);
            return getTableDataLinkedHashMap(rs, tableColumnInfoList);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 获取表数据
     */
    @SneakyThrows
    private static LinkedHashMap<Integer, List<String>> getTableDataLinkedHashMap(@NonNull ResultSet rs,
                                                                                  @NonNull List<ColumnEntry> tableColumnInfoList)  {
        List<String> tableColumnNameList = tableColumnInfoList.stream().map(ColumnEntry::getColumnName).collect(Collectors.toList());

        // <索引, 值>
        LinkedHashMap<Integer, List<String>> dataMap = new LinkedHashMap<>();
        int index = 0;
        // 5. 遍历结果集并输出
        while (rs.next()) {
            index++;
            List<String> tempList = new ArrayList<>();
            for (String columnName : tableColumnNameList) {
                String columnValue = rs.getString(columnName);
                if (columnValue == null) {
                    columnValue = "";
                }
                tempList.add(columnValue);
            }
            dataMap.put(index, tempList);
        }
        return dataMap;
    }

    /**
     * 获取某张表的字段信息
     */
    public static List<ColumnEntry> getTableColumnInfoList(Connection conn, String tableName) {
        List<ColumnEntry> columnList = new ArrayList<>();
        try {
            // 查询表的元数据信息
            DatabaseMetaData dbMetaData = conn.getMetaData();
            ResultSet resultSet = dbMetaData.getColumns(null, null, tableName, null);

            // 遍历结果集,将字段名添加到集合中
            while (resultSet.next()) {

                String columnName = resultSet.getString(COLUMN_NAME);
                String typeName = resultSet.getString(TYPE_NAME);
                String columnSize = resultSet.getString(COLUMN_SIZE);
                String remarks = resultSet.getString(REMARKS);
                ResultSet pkRs = dbMetaData.getPrimaryKeys(null, null, tableName);
                boolean isPrimaryKey = false;
                while (pkRs.next()) {
                    if (columnName.equals(pkRs.getString(COLUMN_NAME))) {
                        isPrimaryKey = true;
                        break;
                    }
                }
                columnList.add(new ColumnEntry(columnName, typeName, columnSize, remarks, isPrimaryKey));
            }
            columnList.forEach(System.out::println);
            return columnList;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值