• JAVA获取MYSQL数据库表、字段、字段类型、字段注释


    package com.lnjecit.generator.util;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.List;
    
    public class DatabaseUtil {
        private final static Logger LOGGER = LoggerFactory.getLogger(DatabaseUtil.class);
    
        private static final String DRIVER = "com.mysql.jdbc.Driver";
        private static final String URL = "jdbc:mysql://localhost:3306/javaweb?useUnicode=true&characterEncoding=utf8";
        private static final String USERNAME = "root";
        private static final String PASSWORD = "mysql";
    
        private static final String SQL = "SELECT * FROM ";// 数据库操作
    
        static {
            try {
                Class.forName(DRIVER);
            } catch (ClassNotFoundException e) {
                LOGGER.error("can not load jdbc driver", e);
            }
        }
    
        /**
         * 获取数据库连接
         *
         * @return
         */
        public static Connection getConnection() {
            Connection conn = null;
            try {
                conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            } catch (SQLException e) {
                LOGGER.error("get connection failure", e);
            }
            return conn;
        }
    
        /**
         * 关闭数据库连接
         * @param conn
         */
        public static void closeConnection(Connection conn) {
            if(conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    LOGGER.error("close connection failure", e);
                }
            }
        }
    
        /**
         * 获取数据库下的所有表名
         */
        public static List<String> getTableNames() {
            List<String> tableNames = new ArrayList<>();
            Connection conn = getConnection();
            ResultSet rs = null;
            try {
                //获取数据库的元数据
                DatabaseMetaData db = conn.getMetaData();
                //从元数据中获取到所有的表名
                rs = db.getTables(null, null, null, new String[] { "TABLE" });
                while(rs.next()) {
                    tableNames.add(rs.getString(3));
                }
            } catch (SQLException e) {
                LOGGER.error("getTableNames failure", e);
            } finally {
                try {
                    rs.close();
                    closeConnection(conn);
                } catch (SQLException e) {
                    LOGGER.error("close ResultSet failure", e);
                }
            }
            return tableNames;
        }
    
        /**
         * 获取表中所有字段名称
         * @param tableName 表名
         * @return
         */
        public static List<String> getColumnNames(String tableName) {
            List<String> columnNames = new ArrayList<>();
            //与数据库的连接
            Connection conn = getConnection();
            PreparedStatement pStemt = null;
            String tableSql = SQL + tableName;
            try {
                pStemt = conn.prepareStatement(tableSql);
                //结果集元数据
                ResultSetMetaData rsmd = pStemt.getMetaData();
                //表列数
                int size = rsmd.getColumnCount();
                for (int i = 0; i < size; i++) {
                    columnNames.add(rsmd.getColumnName(i + 1));
                }
            } catch (SQLException e) {
                LOGGER.error("getColumnNames failure", e);
            } finally {
                if (pStemt != null) {
                    try {
                        pStemt.close();
                        closeConnection(conn);
                    } catch (SQLException e) {
                        LOGGER.error("getColumnNames close pstem and connection failure", e);
                    }
                }
            }
            return columnNames;
        }
    
        /**
         * 获取表中所有字段类型
         * @param tableName
         * @return
         */
        public static List<String> getColumnTypes(String tableName) {
            List<String> columnTypes = new ArrayList<>();
            //与数据库的连接
            Connection conn = getConnection();
            PreparedStatement pStemt = null;
            String tableSql = SQL + tableName;
            try {
                pStemt = conn.prepareStatement(tableSql);
                //结果集元数据
                ResultSetMetaData rsmd = pStemt.getMetaData();
                //表列数
                int size = rsmd.getColumnCount();
                for (int i = 0; i < size; i++) {
                    columnTypes.add(rsmd.getColumnTypeName(i + 1));
                }
            } catch (SQLException e) {
                LOGGER.error("getColumnTypes failure", e);
            } finally {
                if (pStemt != null) {
                    try {
                        pStemt.close();
                        closeConnection(conn);
                    } catch (SQLException e) {
                        LOGGER.error("getColumnTypes close pstem and connection failure", e);
                    }
                }
            }
            return columnTypes;
        }
    
        /**
         * 获取表中字段的所有注释
         * @param tableName
         * @return
         */
        public static List<String> getColumnComments(String tableName) {
            List<String> columnTypes = new ArrayList<>();
            //与数据库的连接
            Connection conn = getConnection();
            PreparedStatement pStemt = null;
            String tableSql = SQL + tableName;
            List<String> columnComments = new ArrayList<>();//列名注释集合
            ResultSet rs = null;
            try {
                pStemt = conn.prepareStatement(tableSql);
                rs = pStemt.executeQuery("show full columns from " + tableName);
                while (rs.next()) {
                    columnComments.add(rs.getString("Comment"));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                if (rs != null) {
                    try {
                        rs.close();
                        closeConnection(conn);
                    } catch (SQLException e) {
                        LOGGER.error("getColumnComments close ResultSet and connection failure", e);
                    }
                }
            }
            return columnComments;
        }
        public static void main(String[] args) {
            List<String> tableNames = getTableNames();
            System.out.println("tableNames:" + tableNames);
            for (String tableName : tableNames) {
                System.out.println("ColumnNames:" + getColumnNames(tableName));
                System.out.println("ColumnTypes:" + getColumnTypes(tableName));
                System.out.println("ColumnComments:" + getColumnComments(tableName));
            }
        }
    }
  • 相关阅读:
    phxpaxos状态机的管理
    redis基础
    phxpaxos的checkpoint从哪个server同步
    结合phxpaxos简单看下paxos
    levelDB实现相关概念及基础
    在变参模版出现之前,functional如何实现bind功能
    IntelliJ IDEA自动部署项目至远程服务器与传统部署项目至远程服务器的区别
    Python实现王者荣耀小助手(二)
    Python实现王者荣耀小助手(一)
    高性能网络通信框架 HP-Socket
  • 原文地址:https://www.cnblogs.com/sunBinary/p/10412622.html
Copyright © 2020-2023  润新知