java獲取Mysql 數據庫表字段


添加Mysql的maven依賴

     <!-- 選擇適合自己的版本 -->     
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>

 

工具類

import java.io.File;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class DbConfig {

    /**
     * 獲取連接
     * @return
     * @throws SQLException
     * @throws ClassNotFoundException
     */
    public static Connection getConnection() throws SQLException, ClassNotFoundException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306", "root", "mysql@123");
        return conn;
    }


    /**
     * 獲取所有的數據庫
     * @param connection
     * @return
     * @throws Exception
     */
    public static List<String> getDataBases(Connection connection) throws Exception {

        DatabaseMetaData metaData = connection.getMetaData();
        ResultSet catalogs = metaData.getCatalogs();
        ArrayList<String> dbs = new ArrayList<>();
        while (catalogs.next()) {
            String db = catalogs.getString(".TABLE_CAT");
            dbs.add(db);
        }

        return dbs;
    }

    /**
     * 獲取當前數據庫的所有表
     * @param connection 數據庫連接對象
     * @param dataBase 數據庫名稱
     * @return
     * @throws SQLException
     */
    public static List<String> getTables(Connection connection, String dataBase) throws SQLException {
        DatabaseMetaData metaData = connection.getMetaData();
//        最后一個參數TABLE 表示用戶表 見 DatabaseMetaData.getTableTypes()方法
        ResultSet resultSet = metaData.getTables(dataBase, null, null, new String[]{"TABLE"});
        ArrayList<String> tables = new ArrayList<>();
        while (resultSet.next()) {
            String table = resultSet.getString("TABLE_NAME");
            tables.add(table);
        }
        return tables;
    }

    /**
     * 獲取數據庫表的所有字段
     * @param connection 數據庫連接對象
     * @param dataBase 數據庫名
     * @param tableName 表名
     * @return
     * @throws SQLException
     * @throws IOException
     */
    public static List<String> getTableField(Connection connection, String dataBase, String tableName) throws SQLException, IOException {
        DatabaseMetaData metaData = connection.getMetaData();
        ResultSet resultSet = metaData.getColumns(dataBase, null, tableName, null);
        ArrayList<String> columns = new ArrayList<>();
        while (resultSet.next()) {
//            數據庫名
            String db_name = resultSet.getString(".TABLE_CAT");
//            表名
            String table_name = resultSet.getString(".TABLE_NAME");
//            獲取字段名
            String field = resultSet.getString(".COLUMN_NAME");
//            獲取字段類型
            String fieldType = resultSet.getString(".TYPE_NAME");
            String fieldLength = resultSet.getString(".COLUMN_SIZE");
            String fieldDESC = resultSet.getString(".REMARKS");
            String info = String.format("[%s->%s->%s->%s->%s->%s]", db_name, table_name, field, fieldType, fieldLength, fieldDESC);
            System.out.println(info);
            columns.add(field);
        }
        return columns;
    }
}

測試類

 

import java.sql.Connection;
import java.util.List;

public class App {

    public static void main(String[] args) throws Exception {
        Connection connection = DbConfig.getConnection();
        System.out.println(connection);
        List<String> dataBases = DbConfig.getDataBases(connection);
        System.out.println("數據庫個數:" + dataBases.size());
        for (String dataBase : dataBases) {
            List<String> tables = DbConfig.getTables(connection, dataBase);
            String log = "數據庫[%s]中共有[%s]張表";
            System.out.println(String.format(log, dataBase, tables.size()));
            for (String table : tables) {
                List<String> tableField = DbConfig.getTableField(connection, dataBase, table);
                String log2 = "數據庫[%s]->[%s]表中共有[%s]個字段";
                System.out.println(String.format(log2, dataBase, table, tableField.size()));
            }
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM