Java tutorial
import java.awt.BorderLayout; import java.awt.Container; 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.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.Vector; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableModel; public class DatabaseBrowser extends JFrame { protected Connection connection; protected JComboBox catalogBox; protected JComboBox schemaBox; protected JComboBox tableBox; protected JTable table = new JTable(); public static void main(String[] args) throws Exception { new sun.jdbc.odbc.JdbcOdbcDriver(); DatabaseBrowser db = new DatabaseBrowser(); } public DatabaseBrowser() throws Exception { ConnectionDialog cd = new ConnectionDialog(this); connection = cd.getConnection(); Container pane = getContentPane(); pane.add(getSelectionPanel(), BorderLayout.NORTH); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); refreshTable(); pane.add(new JScrollPane(table), BorderLayout.CENTER); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(600, 450); setVisible(true); } protected JPanel getSelectionPanel() { JPanel panel = new JPanel(); panel.add(new JLabel("Catalog")); panel.add(new JLabel("Schema")); panel.add(new JLabel("Table")); catalogBox = new JComboBox(); populateCatalogBox(); panel.add(catalogBox); schemaBox = new JComboBox(); populateSchemaBox(); panel.add(schemaBox); tableBox = new JComboBox(); populateTableBox(); panel.add(tableBox); catalogBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent event) { String newCatalog = (String) (catalogBox.getSelectedItem()); try { connection.setCatalog(newCatalog); } catch (Exception e) { } populateSchemaBox(); populateTableBox(); refreshTable(); } }); schemaBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent event) { populateTableBox(); refreshTable(); } }); tableBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent event) { refreshTable(); } }); return panel; } protected void populateCatalogBox() { try { DatabaseMetaData dmd = connection.getMetaData(); ResultSet rset = dmd.getCatalogs(); Vector values = new Vector(); while (rset.next()) { values.addElement(rset.getString(1)); } rset.close(); catalogBox.setModel(new DefaultComboBoxModel(values)); catalogBox.setSelectedItem(connection.getCatalog()); catalogBox.setEnabled(values.size() > 0); } catch (Exception e) { catalogBox.setEnabled(false); } } protected void populateSchemaBox() { try { DatabaseMetaData dmd = connection.getMetaData(); ResultSet rset = dmd.getSchemas(); Vector values = new Vector(); while (rset.next()) { values.addElement(rset.getString(1)); } rset.close(); schemaBox.setModel(new DefaultComboBoxModel(values)); schemaBox.setEnabled(values.size() > 0); } catch (Exception e) { schemaBox.setEnabled(false); } } protected void populateTableBox() { try { String[] types = { "TABLE" }; String catalog = connection.getCatalog(); String schema = (String) (schemaBox.getSelectedItem()); DatabaseMetaData dmd = connection.getMetaData(); ResultSet rset = dmd.getTables(catalog, schema, null, types); Vector values = new Vector(); while (rset.next()) { values.addElement(rset.getString(3)); } rset.close(); tableBox.setModel(new DefaultComboBoxModel(values)); tableBox.setEnabled(values.size() > 0); } catch (Exception e) { tableBox.setEnabled(false); } } protected void refreshTable() { String catalog = (catalogBox.isEnabled() ? catalogBox.getSelectedItem().toString() : null); String schema = (schemaBox.isEnabled() ? schemaBox.getSelectedItem().toString() : null); String tableName = (String) tableBox.getSelectedItem(); if (tableName == null) { table.setModel(new DefaultTableModel()); return; } String selectTable = (schema == null ? "" : schema + ".") + tableName; if (selectTable.indexOf(' ') > 0) { selectTable = "\"" + selectTable + "\""; } try { Statement stmt = connection.createStatement(); ResultSet rset = stmt.executeQuery("SELECT * FROM " + selectTable); table.setModel(new ResultSetTableModel(rset)); } catch (Exception e) { } } } class ConnectionDialog extends JDialog { protected JTextField useridField; protected JTextField passwordField; protected JTextField urlField; protected boolean canceled; protected Connection connect; public ConnectionDialog(JFrame f) { super(f, "Connect To Database", true); buildDialogLayout(); setSize(300, 200); } public Connection getConnection() { setVisible(true); return connect; } protected void buildDialogLayout() { Container pane = getContentPane(); pane.add(new JLabel("Userid:")); pane.add(new JLabel("Password:")); pane.add(new JLabel("URL:")); useridField = new JTextField(10); pane.add(useridField); passwordField = new JTextField(10); pane.add(passwordField); urlField = new JTextField(15); pane.add(urlField); pane.add(getButtonPanel()); } protected JPanel getButtonPanel() { JPanel panel = new JPanel(); JButton btn = new JButton("Ok"); btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { onDialogOk(); } }); panel.add(btn); return panel; } protected void onDialogOk() { if (attemptConnection()) { setVisible(false); } } protected boolean attemptConnection() { try { connect = DriverManager.getConnection(urlField.getText(), useridField.getText(), passwordField.getText()); return true; } catch (Exception e) { JOptionPane.showMessageDialog(this, "Error connecting to " + "database: " + e.getMessage()); } return false; } } class ResultSetTableModel extends AbstractTableModel { protected Vector columnHeaders; protected Vector tableData; public ResultSetTableModel(ResultSet rset) throws SQLException { Vector rowData; ResultSetMetaData rsmd = rset.getMetaData(); int count = rsmd.getColumnCount(); columnHeaders = new Vector(count); tableData = new Vector(); for (int i = 1; i <= count; i++) { columnHeaders.addElement(rsmd.getColumnName(i)); } while (rset.next()) { rowData = new Vector(count); for (int i = 1; i <= count; i++) { rowData.addElement(rset.getObject(i)); } tableData.addElement(rowData); } } public int getColumnCount() { return columnHeaders.size(); } public int getRowCount() { return tableData.size(); } public Object getValueAt(int row, int column) { Vector rowData = (Vector) (tableData.elementAt(row)); return rowData.elementAt(column); } public boolean isCellEditable(int row, int column) { return false; } public String getColumnName(int column) { return (String) (columnHeaders.elementAt(column)); } }