package com.databases.jtree;

 import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList; import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTree;
import javax.swing.plaf.PanelUI;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath; public class MainFrame extends JFrame {
private Connection conn; // 数据库连接对象
ResultSet rs;
Statement st;
private JTree tree;
ArrayList<String> list = new ArrayList<>();
private DefaultMutableTreeNode databases;
public static JTable jtable;
public static JScrollPane jScrollPane; public static JPanel p1 = new JPanel();
public static JPanel p2 = new JPanel();
public static JPanel p3 = new JPanel(); public static void main(String[] args) throws SQLException {
new MainFrame();
} public MainFrame() throws SQLException {
super("数据库管理");
this.setBounds(400, 300, 780, 480);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT));
databases = new DefaultMutableTreeNode("数据库管理 ");
tree = new JTree(databases);
tree.setSize(600, 600);
tree.setLocation(400, 300); p2.add(new JScrollPane(tree));
p3.add(jScrollPane = new JScrollPane(jtable));
p1.setLayout(new GridLayout(1, 2));
p1.add(p2);
p1.add(p3);
this.add(p1); conDB("information_schema");
String sql = "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA";
rs = st.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getString("SCHEMA_NAME"));
list.add(rs.getString("SCHEMA_NAME"));
}
closeDB(); for (int i = 0; i < list.size(); i++) {
DefaultMutableTreeNode roots = new DefaultMutableTreeNode(list.get(i));
databases.add(roots);
conDB("information_schema");
String sql1 = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '" + list.get(i)
+ "';";
rs = st.executeQuery(sql1);
while (rs.next()) {
System.out.println(rs.getString("TABLE_NAME"));
DefaultMutableTreeNode tables = new DefaultMutableTreeNode(rs.getString("TABLE_NAME"));
roots.add(tables);
}
closeDB();
}
MouseListener ml = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
int selRow = tree.getRowForLocation(e.getX(), e.getY());
TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
if (selRow != -1) {
if (e.getClickCount() == 1) {
try {
mySingleClick(selRow, selPath);
} catch (SQLException e1) {
e1.printStackTrace();
}
System.out.println("长度" + selPath.getPathCount());
}
}
}
}; tree.addMouseListener(ml);
this.setVisible(true);
}
public void mySingleClick(int selRow, TreePath selPath) throws SQLException {
if (selPath.getPathCount() == 3) {
String tableName = selPath.getLastPathComponent().toString();
String databasesName = selPath.getPathComponent(1).toString();
conDB(databasesName);
JTable jtable = new JTable();
jtable= query(tableName);
p3.removeAll();
jScrollPane = new JScrollPane(jtable);
p3.add(MainFrame.jScrollPane);
p3.updateUI();
closeDB();
}
}
// 以下是连接数据库
public void conDB(String DBName) {
try {
// 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
JOptionPane.showMessageDialog(null, "数据库加载失败!");
}
try {
// 连接数据库
String url = "jdbc:mysql://localhost:3306/" + DBName + "";
System.out.println(url);
String user = "root";
String passwd = "10521";
conn = DriverManager.getConnection(url, user, passwd);
st = conn.createStatement();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "数据库连接失败!");
}
} // 以下是关闭数据库
public void closeDB() {
try {
conn.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "数据库关闭失败!");
}
} public JTable query(String table) throws SQLException {
DefaultTableModel tablemodel = new DefaultTableModel();
String sql = "SELECT * FROM " + table + ";";
Statement stmt = this.conn.createStatement(); // 创建语句对象
ResultSet rest = stmt.executeQuery(sql); // 执行数据查询SELECT语句
ResultSetMetaData rsmd = rest.getMetaData(); // 返回表属性对象
int count = rsmd.getColumnCount(); // 获得列数
for (int j = 1; j <= count; j++) // 将各列名添加到表格模型作为标题,列序号>=1
tablemodel.addColumn(rsmd.getColumnLabel(j)); // 将结果集中各行数据添加到表格模型
Object[] columns = new Object[count]; // 创建对象数组,数组长度为列数
while (rest.next()) // 迭代遍历结果集,从前向后访问每行
{
for (int j = 1; j <= columns.length; j++) // 获得每行各列值
columns[j - 1] = rest.getString(j);
tablemodel.addRow(columns); // 表格模型添加一行,参数指明各列值
}
rest.close();
stmt.close();
return new JTable(tablemodel);
}
}

Mysql数据库 (JTree应用)的更多相关文章

  1. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  2. 当忘记mysql数据库密码时如何进行修改

    因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...

  3. MySQL数据库和InnoDB存储引擎文件

    参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...

  4. 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库

    说起Oracle数据库,以前没用过Oracle不知道,但是这1年用Oracle后,发现真的是想狂吐槽,特别是那个.NET驱动和链接字符串,特别奇葩.总归是和其他数据库不一样,标新立异,不知道为何.另外 ...

  5. CentOS下mysql数据库常用命令总结

    mysql数据库使用总结 本文主要记录一些mysql日常使用的命令,供以后查询. 1.更改root密码 mysqladmin -uroot password 'yourpassword' 2.远程登陆 ...

  6. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...

  7. mysql数据库主从同步

    环境: Mater:   CentOS7.1  5.5.52-MariaDB  192.168.108.133 Slave:   CentOS7.1  5.5.52-MariaDB  192.168. ...

  8. PDO连接mysql数据库

    1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...

  9. mysql数据库开发常见问题及优化

    mysql 数据库是被广泛应用的关系型数据库,其体积小.支持多处理器.开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高.在使用 mysql 的过程中不规范的 SQL 编写.非最优的 ...

随机推荐

  1. httpd基础知识

    apache简介   Apache取自"a patchy server"的读音,意思是充满补丁的服务器.Apache起初由伊利诺伊大学香槟分校的国家超级电脑应用中心(NCSA)开发 ...

  2. c#读sql server数据添加到MySQL数据库

    using System;using System.Collections.Generic;using System.Text;using Console = System.Console;using ...

  3. centos7 设置时区和时间

    1.设置时区(同步时间前先设置) timedatectl set-timezone Asia/Shanghai 2.安装组件 yum -y install ntp systemctl enable n ...

  4. 一个可以再WIN2000及以上操作系统使用的GetTickCount64

    以后尽量用Delphi/C++双代码写. GetTickCount返回值是整数,这样的话最多49天多就会复位重新从0开始.Vista以后提供了GetTickCount64这个函数,但是WindowsX ...

  5. gitea 源码阅读笔记 002 生成无依赖单文件可执行包

    gitea bindata static gitea 可以通过 make generate 生成一个单文件可执行程序, 该文件不需要任何其它依赖,直接可以单独执行. 对于用户的安装.升级和生成dock ...

  6. HTML/CSS基础知识(三)

    浏览器内核 浏览器内核是浏览器的核心,也称“渲染引擎”,用来解释网页语法并渲染到网页上.浏览器内核决定了浏览器该如何显示网页内容以及页面的格式信息.不同的浏览器内核对网页的语法解释也不同,因此网页开发 ...

  7. 在consul上注册web服务

    1. 创建web服务 IDEA->File->New->Project->Empty Project,project name取名provider,点击finish 2. 创建 ...

  8. Celery 异步任务 , 定时任务 , 周期任务 的芹菜

    1.什么是Celery?Celery 是芹菜Celery 是基于Python实现的模块, 用于执行异步定时周期任务的其结构的组成是由    1.用户任务 app    2.管道 broker 用于存储 ...

  9. Android 开发 框架系列 glide-transformations 图片处理基本使用

    首先简单的介绍一下Gilde作用范围.Gilde功能十分强大,它可以实现图片处理.图片本地加载.图片网络加载.位图加载.图片内存缓存.图片磁盘缓存.Gif图片加载.使用简单轻松,轻松的后是它强大的心, ...

  10. python Django 无法获取post 参数问题

    对于 request.POST.get(name) 方式取值,需要 from 表单提交数据,如果 是ajax 提交数据,则需要做如下设置: 1.设置请求头,以from表单方式传值 'Content-T ...