Java/Database SQL JDBC/Database Viewer

Материал из Java эксперт
Перейти к: навигация, поиск

Database Browser

   <source lang="java">

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

}

</source>