⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 schemaframe.java

📁 Java实例入门
💻 JAVA
字号:
package schemaview;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.*;import java.sql.*;import com.borland.dbswing.*;import javax.swing.tree.*;import javax.swing.event.*;import com.borland.dx.sql.dataset.*;/** * Title:        查看数据库结构 * Description:  这是一个用来浏览数据库结构的小工具 * Copyright:    Copyright (c) 2001 * Company: * @author * @version 1.0 */public class SchemaFrame extends JFrame {  JPanel contentPane;  BorderLayout borderLayout1 = new BorderLayout();  JLabel jStatusBar = new JLabel();  JPanel jPanelLabel = new JPanel();  GridLayout gridLayout1 = new GridLayout();  JLabel jLabel1 = new JLabel();  JLabel jLabel2 = new JLabel();  JPanel jPanelMain = new JPanel();  GridLayout gridLayout2 = new GridLayout();  JScrollPane jScrollPaneLeft = new JScrollPane();  JScrollPane jScrollPaneRight = new JScrollPane();  JdbTable jdbTable = new JdbTable();  JTree jTreeSchema;  DefaultMutableTreeNode root,tablesNodes,viewsNodes,systablesNodes,proceduresNodes,synonymsNodes;  DefaultTreeModel model;  Database db = new Database();  boolean tabLoaded=false;  boolean sysTabLoaded=false;  boolean procLoaded=false;  boolean viewLoaded=false;  boolean synLoaded=false;  DatabaseMetaData dbSchemaData;  /**Construct the frame*/  public SchemaFrame() {    enableEvents(AWTEvent.WINDOW_EVENT_MASK);    try {      jbInit();    }    catch(Exception e) {      e.printStackTrace();    }  }  /**Component initialization*/  private void jbInit() throws Exception  {    //setIconImage(Toolkit.getDefaultToolkit().createImage(SchemaFrame.class.getResource("[Your Icon]")));    contentPane = (JPanel) this.getContentPane();    jStatusBar.setText(" ");    contentPane.setLayout(borderLayout1);    this.setSize(new Dimension(400, 300));    this.setTitle("数据库结构浏览器");    jPanelLabel.setLayout(gridLayout1);    gridLayout1.setColumns(2);    jLabel1.setText("请选取数据库对象");    jLabel2.setText("该对象的属性");    jPanelMain.setLayout(gridLayout2);    gridLayout2.setColumns(2);    db.setConnection(new com.borland.dx.sql.dataset.ConnectionDescriptor("jdbc:odbc:JavaTest", "sa", "java", false, "sun.jdbc.odbc.JdbcOdbcDriver"));    contentPane.add(jStatusBar, BorderLayout.SOUTH);    contentPane.add(jPanelLabel,  BorderLayout.NORTH);    jPanelLabel.add(jLabel1, null);    jPanelLabel.add(jLabel2, null);    contentPane.add(jPanelMain, BorderLayout.CENTER);    jPanelMain.add(jScrollPaneLeft, null);    dbSchemaData=db.getMetaData();    initTree();    jdbTable.setVisible(false) ;    jScrollPaneLeft.getViewport().add(jTreeSchema, null);    jPanelMain.add(jScrollPaneRight, null);    jScrollPaneRight.getViewport().add(jdbTable, null);    jTreeSchema.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {      public void valueChanged(TreeSelectionEvent e) {        jTreeSchema_valueChanged(e);      }    });  }  /**Overridden so we can exit when window is closed*/  protected void processWindowEvent(WindowEvent e) {    super.processWindowEvent(e);    if (e.getID() == WindowEvent.WINDOW_CLOSING) {      System.exit(0);    }  }  void initTree(){    tablesNodes=new DefaultMutableTreeNode("Table");    viewsNodes=new DefaultMutableTreeNode("View");    systablesNodes=new DefaultMutableTreeNode("System Table");    proceduresNodes=new DefaultMutableTreeNode("Procedure");    synonymsNodes=new DefaultMutableTreeNode("Synonym");    root=new DefaultMutableTreeNode("ODBC:JavaTest");    root.add(tablesNodes);    root.add(viewsNodes);    root.add(systablesNodes);    root.add(proceduresNodes);    root.add(synonymsNodes);    model=new DefaultTreeModel(root);    jTreeSchema=new JTree(model);  }  void jTreeSchema_valueChanged(TreeSelectionEvent e) {    TreePath selPath=jTreeSchema.getSelectionPath();    DefaultMutableTreeNode selNode=(DefaultMutableTreeNode)selPath.getLastPathComponent();    if(selNode.equals(tablesNodes)){       if(!tabLoaded)           loadTables(tablesNodes,model,dbSchemaData,"TABLE");       tabLoaded=true;    }    if(selNode.equals(viewsNodes)){       if(!viewLoaded)           loadTables(viewsNodes,model,dbSchemaData,"VIEW");       viewLoaded=true;    }    if(selNode.equals(systablesNodes)){       if(!sysTabLoaded)           loadTables(systablesNodes,model,dbSchemaData,"SYSTEM TABLE");       sysTabLoaded=true;    }    if(selNode.equals(synonymsNodes)){       if(!synLoaded)           loadTables(synonymsNodes,model,dbSchemaData,"SYNONYM");       synLoaded=true;    }    if(selNode.equals(proceduresNodes)){       if(!procLoaded)           loadProcs(proceduresNodes,model,dbSchemaData);       procLoaded=true;    }    if(selNode.equals(root)){        disPlayConInfo();    }   if(selPath.getPathCount()==2) disPlayChildInfo(selNode);   if(selPath.getPathCount()==3) disPlayTabInfo(selNode);   if(selPath.getPathCount()==4) disPlayFieldsInfo(selNode);   if(selPath.getPathCount()==5) disPlayFieldInfo(selNode);   jStatusBar.setText(selNode.toString()+" has "+selNode.getChildCount()+" items" );  }  void loadTables(DefaultMutableTreeNode treeNode,DefaultTreeModel treeModel,DatabaseMetaData schemaData,String type){    String types[]=new String[1];    types[0]=type;    try{        ResultSet rs=schemaData.getTables(null,null,null,types);       if(rs!=null){            while(rs.next() ){               String nodeName=rs.getString("TABLE_NAME").trim();               DefaultMutableTreeNode newNode=new DefaultMutableTreeNode(nodeName);               treeModel.insertNodeInto(newNode,treeNode,treeNode.getChildCount());               loadColums(newNode,treeModel,schemaData,nodeName);            }       }    }catch(Exception e){System.out.println(e);}  }   void loadProcs(DefaultMutableTreeNode treeNode,DefaultTreeModel treeModel,DatabaseMetaData schemaData){    try{        ResultSet rs=schemaData.getProcedures(null,null,null);       if(rs!=null){            while(rs.next() ){               String nodeName=rs.getString("PROCEDURE_NAME").trim();               DefaultMutableTreeNode newNode=new DefaultMutableTreeNode(nodeName);               treeModel.insertNodeInto(newNode,treeNode,treeNode.getChildCount());            }       }    }catch(Exception e){System.out.println(e);}  }   void loadColums(DefaultMutableTreeNode treeNode,DefaultTreeModel treeModel,DatabaseMetaData schemaData,String tableName){    DefaultMutableTreeNode colNode=new DefaultMutableTreeNode("Columns" );    DefaultMutableTreeNode indNode=new DefaultMutableTreeNode("Indexs" );    try{        ResultSet rs=schemaData.getColumns(null,null,tableName,null);       if(rs!=null){            while(rs.next() ){               String nodeName=rs.getString("COLUMN_NAME");               DefaultMutableTreeNode newNode=new DefaultMutableTreeNode(nodeName);               treeModel.insertNodeInto(newNode,colNode,colNode.getChildCount());            }       }      if(colNode.getChildCount() >0)          treeModel.insertNodeInto(colNode,treeNode,treeNode.getChildCount());       rs=null;       rs=schemaData.getIndexInfo(null,null,tableName,false,false);      if(rs!=null){           while(rs.next() ){              String nodeName=rs.getString("INDEX_NAME");             if(nodeName!=null){                  DefaultMutableTreeNode newNode=new DefaultMutableTreeNode(nodeName.trim());                  treeModel.insertNodeInto(newNode,indNode,indNode.getChildCount());              }           }      }     if(indNode.getChildCount() >0)          treeModel.insertNodeInto(indNode,treeNode,treeNode.getChildCount());    }catch(Exception e){System.out.println(e);}   }  void  disPlayChildInfo(DefaultMutableTreeNode parentNode){     String row[]=new String[1];     jdbTable.setVisible(false) ;     jdbTable.setDataSet(null);     DefaultTableModel tableModel=new DefaultTableModel();     tableModel.addColumn(parentNode.toString());     for(int i=1;i<=parentNode.getChildCount() ;i++){        row[0]=parentNode.getChildAt(i-1).toString();        tableModel.addRow(row);     }     jdbTable.setModel(tableModel);     jdbTable.setVisible(true) ;     jdbTable.setAutoResizeMode(JdbTable.AUTO_RESIZE_ALL_COLUMNS );     jdbTable.setRowHeaderVisible(false) ;  }  void  disPlayConInfo(){     String row[]=new String[2];     jdbTable.setVisible(false) ;     jdbTable.setDataSet(null);     DefaultTableModel tableModel=new DefaultTableModel();     tableModel.addColumn("属性");     tableModel.addColumn("值");     try{        row[0]="URL";          row[1]=dbSchemaData.getURL();        tableModel.addRow(row);        row[0]="ReadOnly";     row[1]=dbSchemaData.isReadOnly()?"yes":"no";        tableModel.addRow(row);        row[0]="Database Product";          row[1]=dbSchemaData.getDatabaseProductName();        tableModel.addRow(row);        row[0]="Product Version";          row[1]=dbSchemaData.getDatabaseProductVersion();        tableModel.addRow(row);        row[0]="Driver";          row[1]=dbSchemaData.getDriverName();        tableModel.addRow(row);        row[0]="DriverVersion";          row[1]=dbSchemaData.getDriverVersion();        tableModel.addRow(row);     }catch(Exception e){}     jdbTable.setModel(tableModel);     jdbTable.setVisible(true) ;     jdbTable.setAutoResizeMode(JdbTable.AUTO_RESIZE_ALL_COLUMNS );     jdbTable.setRowHeaderVisible(false) ;  }  void  disPlayTabInfo(DefaultMutableTreeNode tabNode){     String row[]=new String[2];     String tableName=tabNode.toString();     String types[]=new String[1];     types[0]=tabNode.getParent().toString();     jdbTable.setVisible(false) ;     jdbTable.setDataSet(null);     DefaultTableModel tableModel=new DefaultTableModel();     tableModel.addColumn("属性");     tableModel.addColumn("值");     try{        ResultSet rs=dbSchemaData.getTables(null,null,tableName,types);        ResultSetMetaData rsmd=rs.getMetaData();        rs.next();       for(int i=1;i<=rsmd.getColumnCount() ;i++){            row[0]=rsmd.getColumnName(i);            row[1]=rs.getString(row[0]);            tableModel.addRow(row);        }     }catch(Exception e){}     jdbTable.setModel(tableModel);     jdbTable.setVisible(true) ;     jdbTable.setAutoResizeMode(JdbTable.AUTO_RESIZE_ALL_COLUMNS );     jdbTable.setRowHeaderVisible(false) ;  }  void  disPlayFieldsInfo(DefaultMutableTreeNode tabNode){     String tableName=tabNode.getParent().toString();     String typeName=tabNode.toString();     jdbTable.setVisible(false) ;     jdbTable.setDataSet(null);     try{         ResultSet rs;        if(typeName.toUpperCase().equals("INDEXS") )            rs=dbSchemaData.getIndexInfo(null,null,tableName,false,false);        else            rs=dbSchemaData.getColumns(null,null,tableName,null);        jdbTable.setDataSet(db.resultSetToDataSet(rs));     }catch(Exception e){}     jdbTable.setVisible(true) ;     jdbTable.setAutoResizeMode(JdbTable.AUTO_RESIZE_OFF);     jdbTable.setRowHeaderVisible(false) ;  }  void  disPlayFieldInfo(DefaultMutableTreeNode fieldNode){     String row[]=new String[2];     String tableName=fieldNode.getParent().getParent().toString();     String typeName=fieldNode.getParent().toString();     String fieldName=fieldNode.toString();     jdbTable.setVisible(false) ;     jdbTable.setDataSet(null);     DefaultTableModel tableModel=new DefaultTableModel();     tableModel.addColumn("属性");     tableModel.addColumn("值");     try{         ResultSet rs;        if(typeName.toUpperCase().equals("INDEXS") )            rs=dbSchemaData.getIndexInfo(null,null,tableName,false,false);        else            rs=dbSchemaData.getColumns(null,null,tableName,fieldName);         ResultSetMetaData rsmd=rs.getMetaData();        while(rs.next()){            if(typeName.toUpperCase().equals("INDEXS") ){                  String indexName=rs.getString("INDEX_NAME");                 if(indexName==null) continue;                  indexName=indexName.toUpperCase();                 if(!indexName.equals(fieldName.toUpperCase())) continue;                  row[0]="NON_UNIQUE";             row[1]=rs.getString(row[0]);                  tableModel.addRow(row);                  row[0]="COLUMN_NAME";            row[1]=rs.getString(row[0]);                  tableModel.addRow(row);                  row[0]="ASC_OR_DESC";            row[1]=rs.getString(row[0]);                  tableModel.addRow(row);              }             else{                  row[0]="COLUMN_NAME";             row[1]=rs.getString(row[0]);                  tableModel.addRow(row);                  row[0]="TYPE_NAME";               row[1]=rs.getString(row[0]);                  tableModel.addRow(row);                  row[0]="COLUMN_SIZE";             row[1]=rs.getString(row[0]);                  tableModel.addRow(row);                  row[0]="DECIMAL_DIGITS";          row[1]=rs.getString(row[0]);                  tableModel.addRow(row);                  row[0]="IS_NULLABLE";             row[1]=rs.getString(row[0]);                  tableModel.addRow(row);                  row[0]="SQL_DATA_TYPE";           row[1]=rs.getString(row[0]);                  tableModel.addRow(row);             }         }     }catch(Exception e){System.out.println(e);}     jdbTable.setModel(tableModel);     jdbTable.setVisible(true) ;     jdbTable.setAutoResizeMode(JdbTable.AUTO_RESIZE_ALL_COLUMNS);     jdbTable.setRowHeaderVisible(false) ;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -