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

📄 databasetool.java

📁 软件开发技术与方法
💻 JAVA
字号:
/**** DatabaseTool.java ****/

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.sql.*;

public class DatabaseTool extends Frame implements ActionListener {
    //
    // Constants:
    //
    private static final String APP_NAME = "DatabaseTool";
    private static final String TITLE = "Database Tool";
//  private static final String DRIVER =
//    "sun.jdbc.odbc.JdbcOdbcDriver";
    private static final String DRIVER =
    "COM.cloudscape.core.JDBCDriver";
    private static final String PROTOCOL = "jdbc";
//  private static final String SUBPROTOCOL = "odbc";
    private static final String SUBPROTOCOL = "cloudscape";
    private static final String SUB_DATA   = "datasource";
    private static final int DRIVER_WIDTH  = 25;
    private static final int URL_WIDTH     = 25;
    private static final int USER_WIDTH    = 15;
    private static final int PW_WIDTH      = 15;
    private static final int MESSAGE_WIDTH = 70;
    private static final int SQL_WIDTH     = 80;
    private static final int RESULT_WIDTH  = 80;
    private static final int STARTS_WITH_LEN = 40;
    private static final String LINEFEED = "\n";
    private static final String DOUBLE_LINEFEED = "\n\n";
    //
    // Instance variables:
    //
    private Button connect, previous, next, submit, clear;
    private TextField urlField, driverField;
    private TextField userField, passwordField;
    private TextArea sqlArea;
    private TextArea resultArea;
    private TextField messageField;
    private DatabaseMetaData dmd;
    private Vector submissions;
    private int submitIndex = -1;
    private Connection con = null;
    private Statement stmt = null;

    public DatabaseTool(String title, String subprotocol,
                        String data, String driver) {
        super(title);
        submissions = new Vector(50);
        setLayout(new BorderLayout(5, 5));
        Panel outerPanel = new Panel() {
            public Insets getInsets() {
                return new Insets(5, 5, 5, 5);
            }
        };
        outerPanel.setLayout(new BorderLayout(5, 5));
        add(outerPanel, BorderLayout.CENTER);
        Panel urlPanel = new Panel();
        outerPanel.add(urlPanel, BorderLayout.NORTH);
        Panel middlePanel = new Panel();
        middlePanel.setLayout(new BorderLayout(5, 5));
        outerPanel.add(middlePanel, BorderLayout.CENTER);
        Panel securityPanel = new Panel();
        middlePanel.add(securityPanel, BorderLayout.NORTH);

        urlPanel.add(new Label("Driver:"));
        driver = checkValue(DRIVER, driver);
        driverField = new TextField(driver, DRIVER_WIDTH);
        driverField.addActionListener(this);
        urlPanel.add(driverField);
        urlPanel.add(new Label("    URL:"));
        String url = PROTOCOL + ":";
        url += checkValue(SUBPROTOCOL, subprotocol);
        url += ":";
        url += (data == null || data.length() == 0) ? SUB_DATA : data;
        urlField = new TextField(url, URL_WIDTH);
        urlField.addActionListener(this);
        urlPanel.add(urlField);
        connect = new Button(" Connect ");
        connect.addActionListener(this);
        urlPanel.add(connect);

        securityPanel.add(new Label("User:"));
        userField = new TextField(USER_WIDTH);
        userField.addActionListener(this);
        securityPanel.add(userField);
        securityPanel.add(new Label("    Password:"));
        passwordField = new TextField(PW_WIDTH);
        passwordField.addActionListener(this);
        securityPanel.add(passwordField);

        Panel innerPanel = new Panel();
        innerPanel.setLayout(new BorderLayout(5, 5));
        middlePanel.add(innerPanel, BorderLayout.CENTER);
        Panel sqlPanel = new Panel();
        sqlPanel.setLayout(new BorderLayout(5, 5));
        innerPanel.add(sqlPanel, BorderLayout.NORTH);

        sqlPanel.add(new Label("SQL:", Label.CENTER), BorderLayout.NORTH);
        sqlArea = new TextArea(5, SQL_WIDTH);
        sqlPanel.add(sqlArea, BorderLayout.CENTER);
        Panel buttonPanel = new Panel();
        clear = new Button(" Clear ");
        clear.addActionListener(this);
        clear.setEnabled(false);
        buttonPanel.add(clear);
        previous = new Button(" Previous ");
        previous.addActionListener(this);
        previous.setEnabled(false);
        buttonPanel.add(previous);
        next = new Button(" Next ");
        next.addActionListener(this);
        next.setEnabled(false);
        buttonPanel.add(next);
        submit = new Button(" Submit ");
        submit.addActionListener(this);
        submit.setEnabled(false);
        buttonPanel.add(submit);
        sqlPanel.add(buttonPanel, BorderLayout.SOUTH);

        Panel resultPanel = new Panel();
        resultPanel.setLayout(new BorderLayout(5, 5));
        innerPanel.add(resultPanel, BorderLayout.CENTER);
        resultPanel.add(new Label("Result:", Label.CENTER), BorderLayout.NORTH);
        resultArea = new TextArea(15, RESULT_WIDTH);
        resultArea.setEditable(false);
        resultPanel.add(resultArea, BorderLayout.CENTER);

        Panel messagePanel = new Panel();
        outerPanel.add(messagePanel, BorderLayout.SOUTH);
        messagePanel.add(new Label("Status:"));
        messageField = new TextField(MESSAGE_WIDTH);
        messageField.setEditable(false);
        messagePanel.add(messageField);
        pack();
        setSize(getPreferredSize());
        setVisible(true);
        addWindowListener(
            new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
                        closeStatement();
                        closeDB();
                        System.exit(0);
                    }
                }
            }
        );
    }

  public DatabaseTool(String title, String subprotocol,
      String data) {
    this(title, subprotocol, data, DRIVER);
  } // DatabaseTool //

  public DatabaseTool(String title, String subprotocol) {
    this(title, subprotocol, SUB_DATA, DRIVER);
  } // DatabaseTool //

  public DatabaseTool(String title) {
    this(title, SUBPROTOCOL, SUB_DATA, DRIVER);
  } // DatabaseTool //

  public DatabaseTool() {
    this(TITLE, SUBPROTOCOL, SUB_DATA, DRIVER);
  } // DatabaseTool //

  public static void main(String[] args) {
    if (args.length > 3 ||
        (args.length > 0 &&
          (args[0].equalsIgnoreCase("usage") ||
          args[0].equalsIgnoreCase("-usage") ||
          args[0].equalsIgnoreCase("help") ||
          args[0].equalsIgnoreCase("-help")))) {
      System.out.println("Usage: java " + APP_NAME +
        " [<subprotocol> <data> <driver>]");
      return;
    }
    if (args.length == 1) {
      new DatabaseTool(TITLE, args[0]);
    }
    else if (args.length == 2) {
      new DatabaseTool(TITLE, args[0], args[1]);
    }
    else if (args.length == 3) {
      new DatabaseTool(TITLE, args[0], args[1], args[2]);
    }
    else
      new DatabaseTool();
  } // main //

    private String checkValue(String alternateValue, String str) {
        return (str == null || str.length() == 0) ? alternateValue : str;
    }

    private void handleMessage(String msg) {
        System.out.println(msg);
        messageField.setText(msg);
    }

    private boolean connectToDB() {
        closeDB();
        submit.setEnabled(false);
        try {
            String driver = driverField.getText();
            if (driver.length() == 0)
                driver = DRIVER;
            Class.forName(driver).newInstance();
            con = DriverManager.getConnection(urlField.getText(),
                                              userField.getText(),                                                            passwordField.getText());
            stmt = con.createStatement();
            dmd = con.getMetaData();
            String result = "Connected to: " + dmd.getURL() + LINEFEED +
                            "Driver: "  + dmd.getDriverName() + LINEFEED +
                            "Version: " + dmd.getDriverVersion();
            resultArea.setText(result);
            messageField.setText("Successfully connected to database.");
            submit.setEnabled(true);
            return true;
        }
        catch (Exception e) {
            handleMessage("Error connecting to database: " + urlField.getText());
            return false;
        }
    }

    private void closeDB() {
        try {
            if (con != null)
                con.close();
        }
        catch (Exception e) {
            System.out.println("Error closing the database connection: " +
                               urlField.getText());
        }
    }

    private void closeStatement() {
        try {
            if (stmt != null)
                stmt.close();
        }
        catch (Exception e) {
            System.out.println("Error closing the current statement.");
        }
    }

  private void displayResultSet(ResultSet rs) {
    String result = "";
    try {
      ResultSetMetaData rsmd = rs.getMetaData();
      int cols = rsmd.getColumnCount();
      for (int i = 1; i <= cols; i++) {
        if (i > 1)
          result += ", ";
        result += rsmd.getColumnLabel(i);
      }
      result += DOUBLE_LINEFEED;
      while (rs.next()) {
        for (int i = 1; i <= cols; i++) {
          if (i > 1)
            result += ", ";
          result += rs.getString(i);
        }
        result += LINEFEED;
      }
      resultArea.setText(result);
      messageField.setText("");
    }
    catch (Exception e) {
      handleMessage("Error displaying the current statement.");
    }
  } // displayResultSet //

    private void executeSQL() {
        if (con == null) {
            messageField.setText("Please connect to a database.");
            return;
        }
        String cmd = sqlArea.getText();
        int len = cmd.length();
        if (len == 0) {
            messageField.setText("SQL statement area is empty.");
            return;
        }
        if (len < 6) {
            messageField.setText("SQL statement is invalid.");
            return;
        }
        submissions.addElement(cmd);
        submitIndex = submissions.lastIndexOf(cmd, submissions.size() - 1);
        updateButtons();
        try {
            String keyword = cmd.substring(0, 6);
            int startLength = (len < STARTS_WITH_LEN) ? len : STARTS_WITH_LEN;
            String cmdStart = cmd.substring(0, startLength);
            if (keyword.equalsIgnoreCase("select")) {
                ResultSet rs = stmt.executeQuery(cmd);
                displayResultSet(rs);
                rs.close();
                messageField.setText("Executed query: " +
                cmdStart + "...");
            }
            else if (keyword.equalsIgnoreCase("update") ||
                keyword.equalsIgnoreCase("insert") ||
                keyword.equalsIgnoreCase("delete")) {
                int result = stmt.executeUpdate(cmd);
                messageField.setText("Executed update: " + cmdStart +
                                     "... with result: " + result);
            }
            else {
                stmt.execute(cmd);
                messageField.setText("Executed: " + cmdStart + "...");
            }
        }
        catch (Exception e) {
            handleMessage("Error executing the current statement.");
        }
    }

    private void getPreviousSubmission() {
        if (submitIndex <= 0)
            return;
        submitIndex--;
        sqlArea.setText((String) submissions.elementAt(submitIndex));
        updateButtons();
    }

    private void getNextSubmission() {
        if (submitIndex >= submissions.size() - 1)
            return;
        submitIndex++;
        sqlArea.setText((String) submissions.elementAt(submitIndex));
        updateButtons();
    }

    private void updateButtons() {
        previous.setEnabled(submitIndex > 0);
        next.setEnabled(submitIndex < submissions.size() - 1);
        clear.setEnabled(sqlArea.getText().length() > 0);
    }

    public void actionPerformed(ActionEvent event) {
        Object source = event.getSource();
        if (source == connect ||
            source == driverField || source == urlField ||
            source == userField || source == passwordField) {
            connectToDB();
        }
        else if (source == previous) {
            getPreviousSubmission();
        }
        else if (source == next) {
            getNextSubmission();
        }
        else if (source == submit) {
            executeSQL();
        }
        else if (source == clear) {
          sqlArea.setText("");
          resultArea.setText("");
          messageField.setText("");
        }
    }
}

⌨️ 快捷键说明

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