基于swing的MySQL可视化界面


个人记录贴。。。

代码过烂不宜参考。。

 

效果展示

1、选择需要打开的数据库,查看数据库下的表。

2、双击打开一个表

3、没有CRUD。。。。

代码

test-main:

import shell.DBList;

import javax.swing.*;
import java.awt.*;
import static javax.swing.JFrame.EXIT_ON_CLOSE;

public class Test {
    public static void main(String[] args){
        EventQueue.invokeLater(() -> {
            JFrame w = new DBList();
            w.setDefaultCloseOperation(EXIT_ON_CLOSE);
            w.setVisible(true);
        });
    }
}

DBList:

package shell;

import data.DataBase;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.*;
import java.util.ArrayList;

/**
 * Created by xkfx on 2017/1/31.
 */

public class DBList extends JFrame implements ActionListener, MouseListener {

    private JComboBox comboDatabases = new JComboBox();
    private JList listTables = new JList();

    String DBName = null;

    public DBList(){
        // 窗体大小
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int screenWidth = screenSize.width;
        int screenHeight = screenSize.height;

        setSize(screenWidth/6 , screenHeight/2);
        setResizable(false);

        // 窗体位置
        setLocationByPlatform(true);

        // 窗体布局
        setLayout(new BorderLayout());

        JScrollPane sp = new JScrollPane(listTables);

        add(comboDatabases , BorderLayout.NORTH);
        add(sp , BorderLayout.CENTER);

        // 添加数据库列表
        Connection cn = null;
        Statement st = null;
        ResultSet rs = null;
        try{
            cn = DataBase.getConnection();
            st = cn.createStatement();
            rs = st.executeQuery("show Databases");

            while(rs.next()){
                comboDatabases.addItem(rs.getString(1));
        }
        }catch(Exception e){}
        finally {
            try{
                rs.close();
                st.close();
                cn.close();
            }catch (Exception e){}
        }

        // 注册事件监听
        comboDatabases.addActionListener(this);
        listTables.addMouseListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent event) {
        DBName = comboDatabases.getSelectedItem().toString();

        Connection recentConn = null;
        Statement st = null;
        ResultSet rs = null;
        String request = null;
        ArrayList<String> tables = new ArrayList<>();
        try{
            recentConn = DataBase.getConnection();
            st = recentConn.createStatement();
            request = "show tables from " + DBName;
            rs = st.executeQuery(request);

            while(rs.next()){
                tables.add(rs.getString(1));
            }
            String[] temp = new String[tables.size()];
            tables.toArray(temp);
            listTables.setListData(temp);

        }catch(Exception e){}
        finally {
            try{
                rs.close();
                st.close();
                recentConn.close();
            }catch (Exception e){}
        }
    }

    @Override
    public void mouseClicked(MouseEvent e) {

    }

    @Override
    public void mousePressed(MouseEvent event) {
        if(event.getClickCount() == 2){
            String tableName = listTables.getSelectedValue().toString();

            JFrame selectTable = new DBTable(DBName, tableName, this.getWidth()+this.getX(), this.getY());
            selectTable.setVisible(true);
        }
    }

    @Override
    public void mouseReleased(MouseEvent e) {

    }

    @Override
    public void mouseEntered(MouseEvent e) {

    }

    @Override
    public void mouseExited(MouseEvent e) {

    }

    @Override
    public String toString() {
        return "DBList{" +
                "comboDatabases=" + comboDatabases +
                ", listTables=" + listTables +
                ", DBName='" + DBName + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        DBList dbList = (DBList) o;

        if (comboDatabases != null ? !comboDatabases.equals(dbList.comboDatabases) : dbList.comboDatabases != null)
            return false;
        if (listTables != null ? !listTables.equals(dbList.listTables) : dbList.listTables != null) return false;
        return DBName != null ? DBName.equals(dbList.DBName) : dbList.DBName == null;
    }

    @Override
    public int hashCode() {
        int result = comboDatabases != null ? comboDatabases.hashCode() : 0;
        result = 31 * result + (listTables != null ? listTables.hashCode() : 0);
        result = 31 * result + (DBName != null ? DBName.hashCode() : 0);
        return result;
    }
}

DBTable:

package shell;

import data.DbTableModel;

import javax.swing.*;
import javax.swing.table.TableModel;
import java.awt.*;

/**
 * Created by xkfx on 2017/2/1.
 */
public class DBTable extends JFrame {

    public DBTable(String dbName, String tableName, int X, int Y){

        // JTable
        TableModel model = new DbTableModel(dbName , tableName);
        JTable table = new JTable(model);
        JScrollPane sp = new JScrollPane(table);

        add(sp);
        pack();

        // 设置表格大小
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int screenWidth = screenSize.width;
        int screenHeight = screenSize.height;

        setSize(screenWidth/2 , screenHeight/2);
        setResizable(false);

        // 设置位置
        setLocation(X , Y);
    }
}

DbTableModel:

package data;

import javax.swing.table.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * Created by xkfx on 2017/2/2.
 */
public class DbTableModel extends AbstractTableModel{

    //共享表格
    ResultSet resultTable = null;
    ResultSet resultColumns = null;

    // 获取对应表格
    public DbTableModel(String DBName, String tableName){

        Connection conn = null;
        Statement st1 = null;
        Statement st2 = null;

        try{
            conn = DataBase.getConnection(DBName);
            st1 = conn.createStatement();
            st2 = conn.createStatement();
            resultTable = st1.executeQuery("select * from "+ tableName);
            resultColumns = st2.executeQuery("SHOW COLUMNS FROM "+ tableName);
        }catch(SQLException e){
            e.printStackTrace();
        }
    }

    @Override
    public int getRowCount() {
        try {
            resultTable.last();
            return resultTable.getRow();
        } catch (SQLException e) {
            e.printStackTrace();
            return 0;
        }
    }

    @Override
    public int getColumnCount() {
        try {
            return resultTable.getMetaData().getColumnCount();
        } catch (SQLException e) {
            e.printStackTrace();
            return 0;
        }
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        try {
            resultTable.absolute(rowIndex + 1);
            return resultTable.getObject(columnIndex + 1);
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public String getColumnName(int c){
        try {
            resultColumns.next();
            System.out.println(resultColumns.getString(1));
            return resultColumns.getString(1);
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
       }
    }
}

DataBase:

package data;

import java.sql.*;
import java.util.ResourceBundle;


public class DataBase {
    public static String URL;
    public static String USERNAME;
    public static String PASSWORD;

    public static String DRIVER;
    private static ResourceBundle localInfo = ResourceBundle.getBundle("data.db-config");

    //使用静态块加载驱动程序
    static{

        URL = localInfo.getString("jdbc.url");
        USERNAME = localInfo.getString("jdbc.username");
        PASSWORD = localInfo.getString("jdbc.password");
        DRIVER = localInfo.getString("jdbc.driver");
        try{
            Class.forName(DRIVER);
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
    }

    // 获取 mysql.connection 的两种静态方法
    public static Connection getConnection(String dbName){

        Connection cn = null;
        try{
            cn = DriverManager.getConnection(URL+dbName, USERNAME, PASSWORD);
        }catch (SQLException e){
            e.printStackTrace();
        }

        return cn;
    }

    public static Connection getConnection(){
        return getConnection("");
    }


    // unit test
    public static void main(String[] args){
        Connection cn = null;
        Statement st = null;
        ResultSet rs = null;
        try{
            cn = DataBase.getConnection();
            st = cn.createStatement();
            rs = st.executeQuery("show Databases");

            while(rs.next()){
                System.out.println(rs.getString(1));
            }
        }catch(Exception e){}
        finally {
            try{
                rs.close();
                st.close();
                cn.close();
            }catch (Exception e){}
        }
    }
}

db-config.properties:

jdbc.url=jdbc:mysql://localhost:3306/
jdbc.username=root
jdbc.password=****
jdbc.driver=org.gjt.mm.mysql.Driver

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM