注册 登录
编程论坛 JAVA论坛

数据库表结构可视化

林月儿 发布于 2019-01-27 17:39, 3108 次点击
程序代码:
package com.huawei.test;

import java.awt.BorderLayout;
import java.awt.event.*;
import java.sql.*;
import java.util.*;

import javax.swing.*;

public class DBTest0127 extends JFrame {
    /**
     *
     
*/
    private static final long serialVersionUID = 1L;
    private static final String URL = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8";
    private static final String USER = "root";
    private static final String PASSWORD = "123";
    private static Connection getConn() {
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
    private static void close(Connection conn) {
        if(conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    private static void close(PreparedStatement preparedStatement, ResultSet resultSet) {
        try {
            resultSet.close();
            preparedStatement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    private static List<String> getTables() {
        Connection conn = getConn();
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        List<String> list = new ArrayList<>();
        try {
            preparedStatement = conn.prepareStatement("show tables");
            resultSet = preparedStatement.executeQuery();
            while(resultSet.next()){
                list.add(resultSet.getString("Tables_in_test"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        close(preparedStatement, resultSet);
        close(conn);
        return list;
    }
    private static List<Map<String, String>> getTableInfo(String tableName) {
        String sql = "SELECT COLUMN_NAME, COLUMN_TYPE,"
                +"IS_NULLABLE,COLUMN_DEFAULT,COLUMN_COMMENT "
                + "FROM INFORMATION_SCHEMA.COLUMNS "
                + "where table_name = '@1'";
        List<Map<String, String>> result = new ArrayList<>();
        Connection conn = getConn();
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        List<String> names = Arrays.asList("COLUMN_NAME", "COLUMN_TYPE", "IS_NULLABLE",
                "COLUMN_DEFAULT", "COLUMN_COMMENT");
        try {
            preparedStatement = conn.prepareStatement(sql.replace("@1", tableName));
            resultSet = preparedStatement.executeQuery();
            while(resultSet.next()){
                Map<String, String> map = new HashMap<>();
                for(String name : names) map.put(name, resultSet.getString(name));
                result.add(map);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        close(preparedStatement, resultSet);
        close(conn);
        return result;
    }
    public DBTest0127() {
        setSize(400, 400);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("DBTest");
        List<String> list = getTables();
        JList<?> jls = new JList<>(list.toArray());
        add(new JScrollPane(jls), BorderLayout.WEST);
        validate();
        jls.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                String selVal = jls.getSelectedValue().toString();
                List<Map<String, String>> tableData = getTableInfo(selVal);
                JTable table = getJtable(tableData);
                JScrollPane jsp = new JScrollPane(table);
                add(jsp, BorderLayout.CENTER);
                DBTest0127.this.revalidate();
            }
        });
    }
    private static JTable getJtable(List<Map<String, String>> list) {
        String[] columnNames = {"列名", "数据类型", "是否为空", "默认值", "备注"};
        List<String> names = Arrays.asList("COLUMN_NAME", "COLUMN_TYPE",
                "IS_NULLABLE", "COLUMN_DEFAULT", "COLUMN_COMMENT");
        String[][] rowData = new String[list.size()][];
        int rowIndex = 0;
        for(Map<String, String> map : list) {
            rowData[rowIndex] = new String[names.size()];
            for(int i = 0; i < names.size(); i++) {
                rowData[rowIndex][i] = map.get(names.get(i));
            }
            rowIndex++;
        }
        JTable table = new JTable(rowData, columnNames);
        return table;

    }
    public static void main(String[] args) {
        new DBTest0127();
    }
}

只有本站会员才能查看附件,请 登录
4 回复
#2
疯狂的小a2019-01-27 17:50
可视化完了之后,怎么在可视化窗口内修改表的字段属性呢
#3
林月儿2019-01-27 18:01
我比较菜,不会了,要不您给补充一下?
#4
wp2319572019-01-29 14:38
回复 3楼 林月儿
这个是CUI 还是GUI
#5
林月儿2019-01-29 14:42
回复 4楼 wp231957
gui
1