sqlviewer.java

来自「Weka」· Java 代码 · 共 649 行 · 第 1/2 页

JAVA
649
字号
/* *    This program is free software; you can redistribute it and/or modify *    it under the terms of the GNU General Public License as published by *    the Free Software Foundation; either version 2 of the License, or *    (at your option) any later version. * *    This program is distributed in the hope that it will be useful, *    but WITHOUT ANY WARRANTY; without even the implied warranty of *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *    GNU General Public License for more details. * *    You should have received a copy of the GNU General Public License *    along with this program; if not, write to the Free Software *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//* * SqlViewer.java * Copyright (C) 2005 University of Waikato, Hamilton, New Zealand * */package weka.gui.sql;import weka.core.Memory;import weka.gui.LookAndFeel;import weka.gui.sql.event.ConnectionEvent;import weka.gui.sql.event.ConnectionListener;import weka.gui.sql.event.HistoryChangedEvent;import weka.gui.sql.event.HistoryChangedListener;import weka.gui.sql.event.QueryExecuteEvent;import weka.gui.sql.event.QueryExecuteListener;import weka.gui.sql.event.ResultChangedEvent;import weka.gui.sql.event.ResultChangedListener;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.Properties;import javax.swing.BorderFactory;import javax.swing.DefaultListModel;import javax.swing.JFrame;import javax.swing.JPanel;/** * Represents a little tool for querying SQL databases. * * @author      FracPete (fracpete at waikato dot ac dot nz) * @version     $Revision: 1.6 $ */public class SqlViewer   extends    JPanel   implements ConnectionListener,              HistoryChangedListener,             QueryExecuteListener,              ResultChangedListener {  /** for serialization */  private static final long serialVersionUID = -4395028775566514329L;  /** the name of the history file (in the home directory) */  protected final static String HISTORY_FILE = "SqlViewerHistory.props";  /** the width property in the history file */  public final static String WIDTH = "width";  /** the height property in the history file */  public final static String HEIGHT = "height";    /** the parent of this panel */  protected JFrame m_Parent;  /** the connection panel */  protected ConnectionPanel m_ConnectionPanel;  /** the query panel */  protected QueryPanel m_QueryPanel;  /** the result panel */  protected ResultPanel m_ResultPanel;  /** the info panel */  protected InfoPanel m_InfoPanel;  /** the connect string with which the query was run */  protected String m_URL;  /** the user that was used to connect to the DB */  protected String m_User;  /** the password that was used to connect to the DB */  protected String m_Password;  /** the currently selected query */  protected String m_Query;  /** stores the history */  protected Properties m_History;    /**   * initializes the SqlViewer   * @param parent        the parent of this panel   */  public SqlViewer(JFrame parent) {    super();       m_Parent   = parent;    m_URL      = "";    m_User     = "";    m_Password = "";    m_Query    = "";    m_History  = new Properties();       createPanel();  }  /**   * builds the interface   */  protected void createPanel() {    JPanel          panel;    JPanel          panel2;        setLayout(new BorderLayout());    // connection    m_ConnectionPanel = new ConnectionPanel(m_Parent);    panel = new JPanel(new BorderLayout());    add(panel, BorderLayout.NORTH);    panel.setBorder(BorderFactory.createCompoundBorder(                    BorderFactory.createTitledBorder("Connection"),                    BorderFactory.createEmptyBorder(0, 5, 5, 5)));    panel.add(m_ConnectionPanel, BorderLayout.CENTER);    // query    m_QueryPanel = new QueryPanel(m_Parent);    panel = new JPanel(new BorderLayout());    add(panel, BorderLayout.CENTER);    panel2 = new JPanel(new BorderLayout());    panel2.setBorder(BorderFactory.createCompoundBorder(                     BorderFactory.createTitledBorder("Query"),                     BorderFactory.createEmptyBorder(0, 5, 5, 5)));    panel2.add(m_QueryPanel, BorderLayout.NORTH);    panel.add(panel2, BorderLayout.NORTH);    // result    m_ResultPanel = new ResultPanel(m_Parent);    m_ResultPanel.setQueryPanel(m_QueryPanel);    panel2 = new JPanel(new BorderLayout());    panel2.setBorder(BorderFactory.createCompoundBorder(                     BorderFactory.createTitledBorder("Result"),                     BorderFactory.createEmptyBorder(0, 5, 5, 5)));    panel2.add(m_ResultPanel, BorderLayout.CENTER);    panel.add(panel2, BorderLayout.CENTER);    // info    m_InfoPanel = new InfoPanel(m_Parent);    panel = new JPanel(new BorderLayout());    add(panel, BorderLayout.SOUTH);    panel.setBorder(BorderFactory.createCompoundBorder(                    BorderFactory.createTitledBorder("Info"),                    BorderFactory.createEmptyBorder(0, 5, 5, 5)));    panel.add(m_InfoPanel, BorderLayout.CENTER);    // listeners    addConnectionListener(this);    addConnectionListener(m_QueryPanel);    addQueryExecuteListener(this);    addQueryExecuteListener(m_ResultPanel);    addResultChangedListener(this);    addHistoryChangedListener(this);    // history    loadHistory(true);  }    /**   * This method gets called when the connection is either established   * or disconnected.   */  public void connectionChange(ConnectionEvent evt) {    if (evt.getType() == ConnectionEvent.DISCONNECT) {      m_InfoPanel.append(   "disconnect from: "                           + evt.getDbUtils().getDatabaseURL(),                          "information_small.gif" );    }    else {      m_InfoPanel.append(   "connecting to: "                           + evt.getDbUtils().getDatabaseURL()                           + " = " + evt.isConnected(),                          "information_small.gif" );    }    // did an exception happen?    if (evt.getException() != null)      m_InfoPanel.append("exception: " + evt.getException(), "error_small.gif");    // set focus    if (evt.isConnected())      m_QueryPanel.setFocus();    else      m_ConnectionPanel.setFocus();  }    /**   * This method gets called when a query has been executed.   */  public void queryExecuted(QueryExecuteEvent evt) {    ResultSetHelper   helper;        if (evt.failed()) {      m_InfoPanel.append("Query:" + evt.getQuery(), "error_small.gif");      m_InfoPanel.append("exception: " + evt.getException(), "error_small.gif");    }    else {      m_InfoPanel.append("Query: " + evt.getQuery(), "information_small.gif");      try {        if (evt.hasResult()) {          helper = new ResultSetHelper(evt.getResultSet());          if ((evt.getMaxRows() > 0) && (helper.getRowCount() >= evt.getMaxRows()))            m_InfoPanel.append(helper.getRowCount() + " rows selected ("                 + evt.getMaxRows() + " displayed).",                 "information_small.gif");          else            m_InfoPanel.append(helper.getRowCount() + " rows selected.",                 "information_small.gif");        }        // save max rows        loadHistory(false);        m_History.setProperty(            QueryPanel.MAX_ROWS, Integer.toString(evt.getMaxRows()));        saveHistory();      }      catch (Exception e) {        e.printStackTrace();      }    }  }    /**   * This method gets called when a query has been executed.   */  public void resultChanged(ResultChangedEvent evt) {    m_URL      = evt.getURL();    m_User     = evt.getUser();    m_Password = evt.getPassword();    m_Query    = evt.getQuery();  }    /**   * This method gets called when a history is modified.   * It saves the history immediately to the users home directory.   */  public void historyChanged(HistoryChangedEvent evt) {    // load history, in case some other process changed it!    loadHistory(false);        m_History.setProperty(         evt.getHistoryName(), modelToString(evt.getHistory()));    // save it    saveHistory();  }  /**   * returns the filename of the history file   */  protected String getHistoryFilename() {    return   System.getProperties().getProperty("user.home")           + File.separatorChar           + HISTORY_FILE;  }  /**   * transforms the given, comma-separated string into a DefaultListModel   * @param s     the string to break up and transform into a list model   * @return      the generated DefaultListModel   */  protected DefaultListModel stringToModel(String s) {    DefaultListModel    result;    String              tmpStr;    int                 i;    boolean             quote;    String[]            find;    String[]            replace;    int                 index;    result = new DefaultListModel();        // get rid of doubled quotes, \\n, etc.    find    = new String[]{"\"\"", "\\n", "\\r", "\\t"};    replace = new String[]{"\"",   "\n",  "\r",  "\t"};    for (i = 0; i < find.length; i++) {      tmpStr = "";      while (s.length() > 0) {        index = s.indexOf(find[i]);        if (index > -1) {          tmpStr += s.substring(0, index) + replace[i];          s       = s.substring(index + 2);        }        else {          tmpStr += s;          s       = "";        }      }      s = tmpStr;    }    quote  = false;    tmpStr = "";    for (i = 0; i < s.length(); i++) {      if (s.charAt(i) == '"') {        quote = !quote;        tmpStr += "" + s.charAt(i);      }      else if (s.charAt(i) == ',') {        if (quote) {

⌨️ 快捷键说明

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