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

📄 databasemanagerswing.java

📁 hsql是很有名的嵌入式数据库
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
/* Copyright (c) 1995-2000, The Hypersonic SQL Group.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * Redistributions of source code must retain the above copyright notice, this
 * list of conditions and the following disclaimer.
 *
 * Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * Neither the name of the Hypersonic SQL Group nor the names of its
 * contributors may be used to endorse or promote products derived from this
 * software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE HYPERSONIC SQL GROUP,
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * This software consists of voluntary contributions made by many individuals 
 * on behalf of the Hypersonic SQL Group.
 *
 *
 * For work added by the HSQL Development Group:
 *
 * Copyright (c) 2001-2005, The HSQL Development Group
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * Redistributions of source code must retain the above copyright notice, this
 * list of conditions and the following disclaimer.
 *
 * Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * Neither the name of the HSQL Development Group nor the names of its
 * contributors may be used to endorse or promote products derived from this
 * software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */


package org.hsqldb.util;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.Locale;import java.util.Properties;import java.util.Vector;import java.awt.BorderLayout;import java.awt.Cursor;import java.awt.Dimension;import java.awt.Event;import java.awt.Font;import java.awt.Insets;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import javax.swing.ButtonGroup;import javax.swing.ImageIcon;import javax.swing.JApplet;import javax.swing.JButton;import javax.swing.JCheckBoxMenuItem;import javax.swing.JComponent;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JRadioButtonMenuItem;import javax.swing.JScrollPane;import javax.swing.JSplitPane;import javax.swing.JTable;import javax.swing.JTextArea;import javax.swing.JToolBar;import javax.swing.JTree;import javax.swing.KeyStroke;import javax.swing.SwingUtilities;import javax.swing.table.TableModel;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.MutableTreeNode;import org.hsqldb.lib.java.JavaSystem;//dmarshall@users - 20020101 - original swing port of DatabaseManager//sqlbob@users 20020401 - patch 537501 by ulrivo - commandline arguments//sqlbob@users 20020407 - patch 1.7.0 - reengineering and enhancements//nickferguson@users 20021005 - patch 1.7.1 - enhancements//deccles@users 20040412 - patch 933671 - various bug fixes//deccles@users 2004xxxx - enhancements//weconsultants@users 20041109 - version 1.8.0 - reengineering and enhancements://              Added: Goodies 'Look and Feel'.//              Added: a Font Changer(Font Type\Style).//              Added: a Color Changer (foreground\bckground).//              Added: RowCounts for each JTree table nodes.//              Added: OneTouchExpandable attribute to JSplitPanes.//              Moved: setFramePositon code to a CommonSwing.setFramePositon() Method.//              Added: call to new method to handle exception processing (CommonSwing.errorMessage());//              Added: Added a new pane added at the bottom of the Frame. (Status Icon and StatusLine).//              Added: 2 Methods (setStatusMessage()), one overrides the other. One to change the ruung status//                              another to allow a message to be posted without changing the Status Icon if needed.//              Added: Added a customCursor for the current wait cursor//      Added: Ability to switch the current LAF while runing (Native,Java or Motif)//unsaved@users 2005xxxx - improvements and bug fixes/** * Swing Tool for managing a JDBC database.<p> * <pre> *             Usage: java DatabaseManagerSwing [--options] *             where options include: *              --driver <classname>  jdbc driver class *              --url <name>          jdbc url *              --user <name>         username used for connection *              --password <password> password for this user *              --dir <path>          default directory *              --script <file>       reads from script file *              --urlid <urlid>       get connection info from RC file *              --rcfile <file>       use instead of default (with urlid) *              --noexit              Don't exit JVM * </pre> * * Note that the sys-table switch will not work for Oracle, because Oracle * does not categorize their system tables correctly in the JDBC Metadata. * * New class based on Hypersonic SQL original * * @author dmarshall@users * @version 1.8.0 * @since 1.7.0 */public class DatabaseManagerSwing extends JAppletimplements ActionListener, WindowListener, KeyListener {    /*     * This is down here because it is an  implementation note, not a     * Javadoc comment!     * Tue Apr 26 16:38:54 EDT 2005     * Switched default switch method from "-switch" to "--switch" because     * "-switch" usage is ambiguous as used here.  Single switches should     * be reserved for single-letter switches which can be mixed like     * "-u -r -l" = "-url".  -blaine     */    private static final String DEFAULT_RCFILE =        System.getProperty("user.home") + "/dbmanager.rc";    private static final String HELP_TEXT =        "See the forums, mailing lists, and HSQLDB User Guide\n"        + "at http://hsqldb.org.\n\n"        + "Please paste the following version identifier with any\n"        + "problem reports or help requests:  $Revision: 1.57 $";    private static final String ABOUT_TEXT =        "$Revision: 1.57 $ of DatabaseManagerSwing\n\n"        + "Copyright (c) 1995-2000, The Hypersonic SQL Group.\n"        + "Copyright (c) 2001-2005, The HSQL Development Group.\n"        + "http://hsqldb.org\n\n\n"        + "You may use and redistribute according to the HSQLDB\n"        + "license documented in the source code and at the web\n"        + "site above.";    static final String    NL         = System.getProperty("line.separator");    static final String    NULL_STR   = "[null]";    static int             iMaxRecent = 24;    Connection             cConn;    Connection             rowConn;        // holds the connetion for getting table row counts    DatabaseMetaData       dMeta;    Statement              sStatement;    JMenu                  mRecent;    String[]               sRecent;    int                    iRecent;    JTextArea              txtCommand;    JScrollPane            txtCommandScroll;    JButton                butExecute;    JTree                  tTree;    JScrollPane            tScrollPane;    DefaultTreeModel       treeModel;    TableModel             tableModel;    DefaultMutableTreeNode rootNode;    JPanel                 pResult;    long                   lTime;    GridSwing              gResult;    JTable                 gResultTable;    JScrollPane            gScrollPane;    JTextArea              txtResult;    JScrollPane            txtResultScroll;    JSplitPane             nsSplitPane;    // Contains query over results    JSplitPane             ewSplitPane;    // Contains tree beside nsSplitPane    boolean                bHelp;    JFrame                 fMain;    static boolean         bMustExit;    String                 ifHuge = "";    JToolBar               jtoolbar;    private boolean        showSchemas  = true;    private boolean        showTooltips = true;    private boolean        autoRefresh  = true;    private boolean        gridFormat   = true;    // Added: (weconsultants@users)    static DatabaseManagerSwing refForFontDialogSwing;    boolean                     displayRowCounts = false;    boolean                     showSys          = false;    boolean                     showIndexDetails = true;    String                      currentLAF       = null;    JPanel                      pStatus;    static JButton              iReadyStatus;    JRadioButtonMenuItem        rbAllSchemas = new JRadioButtonMenuItem("*");    JMenuItem                   mitemAbout   = new JMenuItem("About", 'A');    JMenuItem                   mitemHelp    = new JMenuItem("Help", 'H');    JMenuItem mitemUpdateSchemas = new JMenuItem("Update Schemas");    JCheckBoxMenuItem boxAutoCommit =        new JCheckBoxMenuItem(AUTOCOMMIT_BOX_TEXT);    JCheckBoxMenuItem boxLogging = new JCheckBoxMenuItem(LOGGING_BOX_TEXT);    JCheckBoxMenuItem boxShowSchemas =        new JCheckBoxMenuItem(SHOWSCHEMAS_BOX_TEXT);    JCheckBoxMenuItem boxAutoRefresh =        new JCheckBoxMenuItem(AUTOREFRESH_BOX_TEXT);    JCheckBoxMenuItem boxTooltips = new JCheckBoxMenuItem(SHOWTIPS_BOX_TEXT);    JCheckBoxMenuItem boxRowCounts =        new JCheckBoxMenuItem(ROWCOUNTS_BOX_TEXT);    JCheckBoxMenuItem boxShowGrid = new JCheckBoxMenuItem(GRID_BOX_TEXT);    JCheckBoxMenuItem boxShowSys  = new JCheckBoxMenuItem(SHOWSYS_BOX_TEXT);    // Consider adding GTK and Plaf L&Fs.    JRadioButtonMenuItem rbNativeLF =        new JRadioButtonMenuItem("Native Look & Feel");    JRadioButtonMenuItem rbJavaLF =        new JRadioButtonMenuItem("Java Look & Feel");    JRadioButtonMenuItem rbMotifLF =        new JRadioButtonMenuItem("Motif Look & Feel");    JLabel                      jStatusLine;    static String               READY_STATUS         = "Ready";    private static final String AUTOCOMMIT_BOX_TEXT  = "Autocommit mode";    private static final String LOGGING_BOX_TEXT     = "Logging mode";    private static final String SHOWSCHEMAS_BOX_TEXT = "Show schemas";    private static final String AUTOREFRESH_BOX_TEXT = "Auto-refresh tree";    private static final String SHOWTIPS_BOX_TEXT    = "Show Tooltips";    private static final String ROWCOUNTS_BOX_TEXT   = "Show row counts";    private static final String SHOWSYS_BOX_TEXT     = "Show system tables";    private static final String GRID_BOX_TEXT =        "Show results in Grid (a.o.t. Text)";    // variables to hold the default cursors for these top level swing objects    // so we can restore them when we exit our thread    Cursor        fMainCursor;    Cursor        txtCommandCursor;    Cursor        txtResultCursor;    HashMap       tipMap     = new HashMap();    private JMenu mnuSchemas = new JMenu("Schemas");    /**     * Wait Cursor     */    // Changed: (weconsultants@users): commonted out the, out of the box, cursor to use a custom cursor    private final Cursor waitCursor = new Cursor(Cursor.WAIT_CURSOR);    //getToolkit().createCustomCursor(CommonSwing.getIcon("SystemCursor"),    //                                new Point(4, 4), "HourGlass cursor");    // (ulrivo): variables set by arguments from the commandline    static String  defDriver   = "org.hsqldb.jdbcDriver";    static String  defURL      = "jdbc:hsqldb:.";    static String  defUser     = "sa";    static String  defPassword = "";    static String  defScript;    static String  defDirectory;    private String schemaFilter = null;    public void init() {        DatabaseManagerSwing m = new DatabaseManagerSwing();        m.main();        try {            // The connection dialog will be used before the            // DatabaseManager window is drawn.            connect(ConnectionDialogSwing.createConnection(defDriver, defURL,                    defUser, defPassword));            m.setWaiting("Initializing");            m.insertTestData();            m.updateAutoCommitBox();        } catch (Exception e) {            //  Added: (weconsultants@users)            CommonSwing.errorMessage(e);        } finally {            setWaiting(null);        }    }    public static void main(String[] arg) {        System.getProperties().put("sun.java2d.noddraw", "true");        // (ulrivo): read all arguments from the command line        String  lowerArg;        String  urlid        = null;        String  rcFile       = null;        boolean autoConnect  = false;        boolean urlidConnect = false;        bMustExit = true;        for (int i = 0; i < arg.length; i++) {            lowerArg = arg[i].toLowerCase();            if (lowerArg.length() > 1 && lowerArg.charAt(1) == '-') {                lowerArg = lowerArg.substring(1);            }            i++;            if (lowerArg.equals("-driver")) {                defDriver   = arg[i];                autoConnect = true;            } else if (lowerArg.equals("-url")) {                defURL      = arg[i];                autoConnect = true;            } else if (lowerArg.equals("-user")) {                defUser     = arg[i];                autoConnect = true;            } else if (lowerArg.equals("-password")) {                defPassword = arg[i];                autoConnect = true;            } else if (lowerArg.equals("-urlid")) {                urlid        = arg[i];                urlidConnect = true;            } else if (lowerArg.equals("-rcfile")) {                rcFile       = arg[i];                urlidConnect = true;            } else if (lowerArg.equals("-dir")) {                defDirectory = arg[i];            } else if (lowerArg.equals("-script")) {                defScript = arg[i];            } else if (lowerArg.equals("-noexit")) {                bMustExit = false;                i--;            } else {                showUsage();                return;

⌨️ 快捷键说明

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