1. 程式人生 > >Java實現資料庫和資料表的二級聯動

Java實現資料庫和資料表的二級聯動

實現的效果是獲取Mysql的所有資料庫,然後點選資料庫名就可以實現獲取該資料庫裡的所有表。

主要是用DefaultComboBoxModel來實現,實現思路就是移除之前的模型,然後為這個模型重新新增資料,從而實現了二級聯動。

給出參考程式碼:

package com.xmlDemo.frame;

import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import com.xmlDemo.service.DBService;
import com.xmlDemo.service.DBToXmlService;
import com.xmlDemo.util.DBConnectionUtil;
//主要是用DefaultComboBoxModel來實現
public class ExportFrame extends JFrame implements ItemListener{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	String dbName = "xml";

	private List<String> list2;
	
	private String[] arrs2 = {};
	
	private DefaultComboBoxModel model;
	
	private JComboBox comboBox1;
	private JComboBox comboBox2;
	
	private final static String BASEURL="../xmlDemo/images/";
	
	private String tableName = "users";
	
	public ExportFrame(){
		try {
			export();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void export() throws Exception{
     	Image image=Toolkit.getDefaultToolkit().getImage(BASEURL+"logo.png");
 		setIconImage(image);
     	setTitle("匯出資訊");
     	setLayout(new FlowLayout(FlowLayout.LEFT));
     	
     	JPanel panel1 = new JPanel();
     	
     	JPanel panel2 = new JPanel();
     	
     	JLabel label1 = new JLabel("資料庫:");
     	
     	List<String> list1 = new DBService().getAllDatabases();
     	
     	String arrs1[] = new String[list1.size()];
     	
     	for(int i = 0; i < list1.size(); i++){
     		arrs1[i] = list1.get(i);
     	}
     	
     	comboBox1 = new JComboBox(arrs1);
     	comboBox1.setSelectedItem(dbName);
     	comboBox1.addItemListener(this);
     	
     	panel1.add(label1);
     	panel1.add(comboBox1);
     	
     	list2 = new DBService().getAllTables(dbName);
     	
     	arrs2 = new String[list2.size()];
     	
     	for(int i = 0; i < list2.size(); i++){
     		arrs2[i] = list2.get(i);
     	}
     	
     	JLabel label2 = new JLabel("資料表:");
     	//建立一個模型
     	model = new DefaultComboBoxModel();
     	
		try {
			list2 = new DBService().getAllTables(dbName);
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
     	
     	arrs2 = new String[list2.size()];
     	
     	for(int i = 0; i < list2.size(); i++){
     		arrs2[i] = list2.get(i);
     		model.addElement(arrs2[i]);
     	}
     	
     	comboBox2 = new JComboBox();
     	comboBox2.setSelectedItem(tableName);
     	comboBox2.setModel(model);
     	comboBox2.addItemListener(new ItemListener() {
			
			@Override
			public void itemStateChanged(ItemEvent e) {
				// TODO Auto-generated method stub
				if(e.getStateChange()==ItemEvent.SELECTED){
					tableName = "" + e.getItem();
				}
			}
		});
     	
     	
     	panel2.add(label2);
     	panel2.add(comboBox2);
     	
     	JButton btn = new JButton("匯出");
     	
     	btn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				try {
					if(dbName.equals("xml")){
						new DBToXmlService().exportDataToXMlFile(dbName, tableName);
					}else{
						JOptionPane.showConfirmDialog(null, "當前版本只支援特定資料庫","溫馨提示",JOptionPane.YES_NO_OPTION);
					}
					
				} catch (Exception e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});
     	
     	add(panel1);
     	add(panel2);
     	add(btn);
     	
     	setVisible(true);
     	setSize(400,400);
     	setLocation(300,300);
	}
	
	
	
	@Override
	public void itemStateChanged(ItemEvent e) {
		// TODO Auto-generated method stub
		if(e.getStateChange()==ItemEvent.SELECTED){//選中JComboBox元件
			dbName = ""+e.getItem();//獲取字串
			try {
				list2 = new DBService().getAllTables(dbName);
			} catch (Exception e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			
	     	//@SuppressWarnings("unchecked")
			model = (DefaultComboBoxModel)comboBox2.getModel();
			//移除之前的ComboBox模型
	     	while(model.getSize()>0){
	     		model.removeElementAt(model.getSize()-1);
	     	}
	     	
	     	arrs2 = new String[list2.size()];
	     	//重新新增模型
	     	for(int i = 0;i<list2.size();i++){
	     		arrs2[i] = list2.get(i);
	     		model.addElement(arrs2[i]);
	     	}
		}
	
	}

}

資料庫操作的類:

package com.xmlDemo.service;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.xmlDemo.util.DBConnectionUtil;

public class DBService {

//獲取某個資料庫的所有資料表
	public List<String> getAllTables(String databaseName) throws Exception{
		List<String> list = new ArrayList<String>();
		int i = 0;
		
		String url = "jdbc:mysql://localhost:3306/"+databaseName;
		
		Connection connection = new DBConnectionUtil().getConnection(url);
	
		try {
			ResultSet rs=connection.getMetaData().getTables("","","",null);

			while (rs.next()) {
				list.add(rs.getString("TABLE_NAME"));
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return list;
	}
	
	public List<String> getAllDatabases() throws Exception{
		
		List<String> list = new ArrayList<String>();
		int i = 0;
		
		String sql = "show databases";
		String url="jdbc:mysql://localhost:3306?useUnicode=true&characterEncoding=UTF-8";
		Connection connection = new DBConnectionUtil().getConnection(url);
	
		try {
			PreparedStatement prepare = connection.prepareStatement(sql);
			ResultSet rs=prepare.executeQuery();

			while (rs.next()) {
				list.add(rs.getString(1));
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			new DBConnectionUtil().close();
		}

		return list;
	}

}

相關推薦

Java實現資料庫資料二級聯動

實現的效果是獲取Mysql的所有資料庫,然後點選資料庫名就可以實現獲取該資料庫裡的所有表。 主要是用DefaultComboBoxModel來實現,實現思路就是移除之前的模型,然後為這個模型重新新增資料,從而實現了二級聯動。 給出參考程式碼: package com.

資料庫資料的基本操作

一、資料庫的操作 // 登陸mysql資料庫 mysql -u root -p; // 建立資料庫 CREATE DATABASE db_book; // 檢視所有資料庫 SHOW DATABASE; // 選擇資料庫 USE db_book; // 檢視所有資料表 SHOW TAB

Python建立資料庫資料

一 建立資料庫 1 CreateDatabase類 # -*-coding:utf-8 -*- import MySQLdb from ReadCode import ReadCode class CreateDatabase(): def __init__(

MySQL資料庫 || 資料庫資料的基本操作

第一篇博文,一個小小的紀念儀式^-^ 以下正文 一:資料庫的基本操作 --資料庫的操作 --連線資料庫 mysql -uroot -p密碼 mysql -uroot -pmysql --退出資料庫 exit quit ctrl + d --檢視所有資料庫

在C# WinForm中如何建立SQL Server資料庫資料

【1】動態建立資料庫方法(例項),你可以在WinForm中新增一個文字框,輸入資料庫名稱,這個就不用我囉嗦了吧。將下面的第一句改為 string myExecuteQuery = "create database "+textBox1.Text.Trim(); //建立te

【無私分享:ASP.NET CORE 專案實戰(第四章)】Code First 建立資料庫資料

目錄索引 簡介   本章我們來介紹下Asp.net Core 使用 CodeFirst 建立資料庫和表,通過 控制檯 和 dotnet ef 兩種方式 修改EF上下文物件,新增測試類   我修改了一下名字,Domains 改為了 wkmvc.Data   我們新建一個

PHP語言建立資料庫資料(亂碼的解決)

/*php語言建立資料庫 <span style="color:#ff0000;">建立資料庫,建立資料表要用mysql_query()函式來執行!!!*</span>/

MySql--資料庫資料的建立、修改及刪除

總結一下MySql的資料庫和資料表的簡單操作,關於使用者註冊、修改許可權、資料庫和資料表的建立、修改和刪除的語句。 /***************************使用者**********************************/ select use

MySQL命令列匯出匯入資料庫資料

MySQL命令列匯出資料庫: 1,進入MySQL目錄下的bin資料夾:cd MySQL中到bin資料夾的目錄 如我輸入的命令列:cd C:\Program Files\MySQL\MySQL Server 5.7\bin 2,匯出資料庫:mysqldump -u 使用者

java實現標準化考試系統詳解(二)-----資料庫資料的規劃題庫增刪改查

(一)、資料庫、資料表的規劃 首先我們需要考慮一下作為考試系統我們需要哪些資料,這些資料將以後作為欄位值出現。 我們先來看看這張圖: 圖中框起來的部分基本上就是我們需要的資料,細數數就是: 1.試題序號,它作為主鍵出現不可以重複(id) 2.適用工程,可以理解為這個題適用

使用AjaxJquery配合資料庫實現下拉框的二級聯動

首先我們需要先建立好資料庫,將一些資料插入進去 需要兩張表: province:省份表 city :          城市表 如圖: 然後再在java中建立相關的實體類與之對應 再然後,我們就能開始做jdbc的操作了 public class ConnectionFa

Java實現檔案以及資料夾的建立刪除

  1,檔案建立 /** * 建立指定路徑檔案 * * @param filePath:指定路徑(包括檔名的絕對路徑) */ public static void createFile(String filePath) { File file = new File(

JAVA工程啟動時自動建立資料庫資料

很多時候,我們會有這樣的需求: 系統首次部署時,自動建立資料庫、表 執行單元測試時,資料庫、表維持初始化狀態方便測試。 本文對這種需求的實現做了可行性驗證。 **** 注意這邊需要配置具有建庫建表許可權的資料庫使用者名稱、密碼***** 資料庫配置檔案 jdb

Java實現簡單的資料遷移,從單庫單到單庫單(2)

這個文章是對我上一篇文章Java實現簡單的資料遷移,從單庫單表到單庫單表的簡單擴充套件因為我上一篇文章那種方法只能把資料進行簡單的遷移,但是這裡我需要對資料庫的內容進行重新的編排,所以很顯然,我上一篇文章的寫法是沒法完成我的需求的。 重申一下需求: 從一張資料表

java自定義註解、mybatis 外掛 實現資料庫 分庫分

一、自定義註解實現分庫 為什麼會有資料庫切庫一說 首先,許多專案都有主庫與從庫,有的主庫後面甚至會有很多個從庫,主從庫之間的通常同步也很快,這為資料庫切庫提供了一個基礎,因為可以去不同的資料庫查詢,得到相同的結果(如果不同的資料庫是完全不同的,這個不在我們這篇文章討論的範圍之內,那個屬於讓專

JAVA實現資料庫資料匯入/匯出到Excel(POI技術)

準備工作: 1.匯入POI包:POI下載地址:http://download.csdn.net/detail/zxm1306192988/9522142(重要) 如下 2.匯入匯出到Excel工具類ExcelUtil.java,封裝了POI對Excel的操作 pa

JAVA資料庫進行操作,實現資料庫資料的插入,查詢,更改,刪除操作

轉載自:http://www.cnblogs.com/sodawoods-blogs/p/4415858.html (—)通過mysql workbench 建立一個數據庫,在這裡命名為company,然後建一個tb_employee表 (二)以下是java程式碼對錶

Hibernate+Java+Oracle實現資料庫存取資料

一、Hibernate簡介 Hibernate是基於物件/關係對映(ORM,Object/Relational Mapping)的一個解決方案。ORM方案的思想是將物件模型表示的物件對映到關係型資料庫中,或者反之。Hibernate目前是ORM思想在Java中

java實現批量匯入資料資料庫

這裡使用的是jdbc,下面貼出主要的程式碼,connection自己實現就可以了 Connection con = null; try{ con = getConnection(); /*

java實現資料庫資料匯出到excel

excel表格的匯入匯出有兩種方法,一種是jxl和poi 我是用的是jxl,所以要先下個Jar包,可以去搜索下載一個。package com.wenliang.admin.web;import java.io.File;   import jxl.*;   import jx