Java获取数据库所有表的所有字段、类型、注释、值

Java获取数据库所有表的所有字段、类型、注释、值

@Test
    public void testUpdate(){
        //数据库连接信息
        String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true";
        String username = "root";
        String password = "root";
        //获取数据库连接
        try (Connection connection = DriverManager.getConnection(jdbcUrl, username, password)) {
            //获取数据库元数据
            DatabaseMetaData metaData = connection.getMetaData();
            //获取表名信息
            ResultSet tables = metaData.getTables(null, null, null, new String[]{"TABLE"});
            while (tables.next()) {
                String tableName = tables.getString("TABLE_NAME");
                System.out.println("Table: " + tableName);
                //需要跳过的表名
                if (shouldSkipTable(tableName)) {
                    continue;
                }
                //获取元数据
                try(Statement statement = connection.createStatement();
                    ResultSet resultSet = statement.executeQuery("SELECT * FROM " + tableName)) {
                    ResultSetMetaData rsMetaData = resultSet.getMetaData();
                    //获取表列数
                    int columnCount = rsMetaData.getColumnCount();
                    //获取字段注释map
                    Map<String, String> columnComments = getColumnComments(metaData, tableName);
                    //循环行
                    while (resultSet.next()) {
                        //循环列
                        for (int i = 1; i <= columnCount; i++) {
                            //获取字段名
                            String columnName = rsMetaData.getColumnName(i);
                            //获取字段类型
                            String columnTypeName = rsMetaData.getColumnTypeName(i);
                            //获取值
                            String columnValue = resultSet.getString(i);
                            //获取注释
                            String columnComment = columnComments.get(columnName);
                            System.out.println("表名:->>"+tableName+"  字段名:->>"+columnName + "  字段类型:->>"+columnTypeName + "  字段值:" + columnValue + "  字段注释:" + columnComment);
                        }
                    }
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

   /**不需要读取的表*/
    private boolean shouldSkipTable(String tableName) {
        return tableName.matches("QRTZ_.*") || tableName.contains("log") || tableName.contains("blade");
    }

    /**获取字段注解*/
    private Map<String, String> getColumnComments(DatabaseMetaData metaData, String tableName) throws SQLException {
        Map<String, String> columnComments = new HashMap<>();
        try (ResultSet columns = metaData.getColumns(null, null, tableName, null)) {
            while (columns.next()) {
                String columnName = columns.getString("COLUMN_NAME");
                String columnComment = columns.getString("REMARKS");
                columnComments.put(columnName, columnComment);
            }
        }
        return columnComments;
    }




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用Java的JDBC API来获取MySQL字段类型。下面是一个简单的示例代码,演示如何使用JDBC API获取MySQL数据库字段字段类型字段注释: ```java import java.sql.*; public class MySQLTableInfo { public static void main(String[] args) throws Exception { // 驱动程序名 String driver = "com.mysql.cj.jdbc.Driver"; // 数据库连接URL String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"; // 数据库用户名 String user = "root"; // 数据库密码 String password = "password"; // 加载驱动程序 Class.forName(driver); // 建立数据库连接 Connection conn = DriverManager.getConnection(url, user, password); // 获取数据库元数据 DatabaseMetaData dbmd = conn.getMetaData(); // 获取指定的元数据 ResultSet rs = dbmd.getColumns(null, null, "table_name", null); // 遍历结果集 while (rs.next()) { // 获取字段名 String columnName = rs.getString("COLUMN_NAME"); // 获取字段类型 String columnType = rs.getString("TYPE_NAME"); // 获取字段注释 String columnComment = rs.getString("REMARKS"); // 输出结果 System.out.println("Column Name: " + columnName); System.out.println("Column Type: " + columnType); System.out.println("Column Comment: " + columnComment); } // 关闭结果集、数据库连接等资源 rs.close(); conn.close(); } } ``` 请注意,示例代码中的“table_name”应替换为实际的名。此外,还需根据实际情况修改数据库连接URL、用户名和密码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值