基于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
基于swing的MySQL可视化界面的更多相关文章
- linux安装mysql可视化界面
之前是一直用shell交互界面,但是最近频繁地检查数据库中的数据感觉特别麻烦,便装了一个可视化工具. 安装: $ sudo apt-get install mysql-workbench [sudo] ...
- mysql 可视化界面操作指令
1.让自增长从新开始 ALTER TABLE users auto_increment =1;//让表中的自增长从新从0开始 2.条件查询 SELECT name from users WHERE ...
- 【转载】 使用Anemometer基于pt-query-digest将MySQL慢查询可视化
原文地址:使用Anemometer基于pt-query-digest将MySQL慢查询可视化 作者:84223932 本文主要介绍使用Anemometer基于pt-query-digest将MySQL ...
- 一种基于Java Swing/HTML/MySQL的汽车租赁系统
该项目是一个Java的课程作业(大二),主要运用Java.Swing.HTML.MySQL,实现基本的租车逻辑.界面可视化.信息导出.数据存储等功能.实现管理员.用户两种角色登录,并结合Java开发中 ...
- Ubuntu mysql安装,还有可视化界面
安装mysql sudo apt-get install mysql-server sudo apt-get install mysql-client sudo apt-get install lib ...
- 总结使人进步,可视化界面GUI应用开发总结:Android、iOS、Web、Swing、Windows开发等
可视化界面的软件,是21世纪最主流的应用类型了,黑屏控制台的不适合普通用户. 2004年左右的时候,作为普通网民,接触的自然是可视化,准确是Windows那一套. 那个时候,Microsoft ...
- 基于 HTML5 的 PID-进料系统可视化界面
前言 随着工业物联网和互联网技术的普及和发展,人工填料的方式已经逐渐被机械设备取代.工业厂商减小误操作.提升设备安全以及追求高效率等制造特点对设备的要求愈加高标准.严要求.同时机械生产以后还需遵从整个 ...
- awt可视化界面上传数据到mysql,jsp通过jdbc方式查询数据库,并将结果打印在网页上
今天尝试写一个小demo实现下之前看过的代码,目的了解不同文件的数据访问,掌握如何获取前台数据,如何将数据库的数据在前端页面展示. awt可视化界面可已实现提交数据到数据库,也可查询数据在控制台打印. ...
- Linux系统环境基于Docker搭建Mysql数据库服务实战
开放端口规划: mysql-develop:3407 mysql-test: 3408 mysql-release: 3409 ps: 1.不推荐使用默认端口-3306,建议自定义端口 2.如果采用阿 ...
随机推荐
- c++11——改进容器性能
使用emplace_back就地构造 emplace_back能就地通过参数构造对象,不需要拷贝或者移动内存,相比push_back能更好的避免内存的拷贝和移动,使得容器插入元素的性能得到进一步提升. ...
- 如何理解精通PHP ?
「精通 PHP」可以理解为以下三个: 精通「PHP 解析器 精通「PHP 语法.函数(这门语言) 精通「PHP 项目开发 1 精通「PHP 解析器」 可以从这里开始学习: PHP核心:骇客指南 :ht ...
- C、C++编程入口,常见的编程题
1.设计一个从5个数中取最小数和最大数的程序. 2.#include<stdio.h> 3.int min(int a[],int i); 4.int max(int a[],int i) ...
- 1296: [SCOI2009]粉刷匠[多重dp]
1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1919 Solved: 1099[Submit][Statu ...
- 【BZOJ1458】士兵占领 最小流
[BZOJ1458]士兵占领 Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占 ...
- 您需要安装旧 Java SE 6 运行环境才能打开“Eclipse”。
mac删除jdk: sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk 旧版本sdk地址: http://www.oracle. ...
- oracle rank()和dense_rank(), row_number() 的区别
转自:http://www.linuxidc.com/Linux/2015-04/116349.htm 假设现在有一张学生表student,学生表中有姓名.分数.课程编号,现在我需要按照课程对学生的成 ...
- xp系统报错 windows explorer has encountered a problem and needs to close.We are sorry for the inconvenience
xp系统遇到问题: 打开某个软件提示报错信息, windows explorer has encountered a problem and needs to close.We are sorry f ...
- python-social-auth with Django: ImportError: No module named 'social_django' 解决方法
To use Django with python social auth, you need to install the Django app as well. You can specify t ...
- Java虚拟机规范----JVM体系结构
一.Java平台的结构图 二.JVM与JRE.JDK关系? JVM:Java Virtual Machine(Java虚拟机),负责执行符合规范的Class文件 JRE:Java Runtime En ...