Mega Code Archive

 
Categories / Java / Database SQL JDBC
 

Database Browser

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));   } }