个人记录贴。。。
代码过烂不宜参考。。
效果展示
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