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

📄 sqlfile.java

📁 hsql是很有名的嵌入式数据库
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            }            if ((!gracefulExit) && possiblyUncommitteds.get()) {                errprintln("Rolling back SQL transaction.");                curConn.rollback();                possiblyUncommitteds.set(false);            }        }    }    /**     * Returns a copy of given string without a terminating semicolon.     * If there is no terminating semicolon, null is returned.     *     * @param inString Base String, which will not be modified (because     *                 a "copy" will be returned).     */    private static String deTerminated(String inString) {        int index = inString.lastIndexOf(';');        if (index < 0) {            return null;        }        for (int i = index + 1; i < inString.length(); i++) {            if (!Character.isWhitespace(inString.charAt(i))) {                return null;            }        }        return inString.substring(0, index);    }    /**     * Utility nested Exception class for internal use.     */    private class BadSpecial extends Exception {        private BadSpecial(String s) {            super(s);        }    }    /**     * Utility nested Exception class for internal use.     * This must extend SqlToolError because it has to percolate up from     * recursions of SqlTool.execute(), yet SqlTool.execute() is public     * and external users should not declare (or expect!) QuitNows to be     * thrown.     * SqlTool.execute() on throws a QuitNow if it is in a recursive call.     */    private class QuitNow extends SqlToolError {        public QuitNow(String s) {            super(s);        }        public QuitNow() {            super();        }    }    /**     * Utility nested Exception class for internal use.     * Very similar to QuitNow.     */    private class BreakException extends SqlToolError {        public BreakException() {            super();        }        public BreakException(String s) {            super(s);        }    }    /**     * Utility nested Exception class for internal use.     * Very similar to QuitNow.     */    private class ContinueException extends SqlToolError {        public ContinueException() {            super();        }        public ContinueException(String s) {            super(s);        }    }    /**     * Utility nested Exception class for internal use.     */    private class BadSwitch extends Exception {        private BadSwitch(int i) {            super(Integer.toString(i));        }    }    /**     * Process a Buffer/Edit Command.     *     * Due to the nature of the goal here, we don't trim() "other" like     * we do for other kinds of commands.     *     * @param inString Complete command, less the leading ':' character.     * @throws SQLException Passed through from processSQL()     * @throws BadSpecial Runtime error()     */    private void processBuffer(String inString)    throws BadSpecial, SQLException {        int    index = 0;        int    special;        char   commandChar = 'i';        String other       = null;        if (inString.length() > 0) {            commandChar = inString.charAt(0);            other       = inString.substring(1);            if (other.trim().length() == 0) {                other = null;            }        }        switch (commandChar) {            case ';' :                curCommand = commandFromHistory(0);                stdprintln("Executing command from buffer:\n" + curCommand                           + '\n');                processSQL();                return;            case 'a' :            case 'A' :                stringBuffer.append(commandFromHistory(0));                if (other != null) {                    String deTerminated = deTerminated(other);                    if (!other.equals(";")) {                        stringBuffer.append(((deTerminated == null) ? other                                                                    : deTerminated));                    }                    if (deTerminated != null) {                        // If we reach here, then stringBuffer contains a                        // complete SQL command.                        curCommand = stringBuffer.toString();                        setBuf(curCommand);                        stdprintln("Executing:\n" + curCommand + '\n');                        processSQL();                        stringBuffer.setLength(0);                        return;                    }                }                stdprintln("Appending to:\n" + stringBuffer);                return;            case 'l' :            case 'L' :                stdprintln("Current Buffer:\n" + commandFromHistory(0));                return;            case 's' :            case 'S' :                // Sat Apr 23 14:14:57 EDT 2005.  Changing history behavior.                // It's very inconvenient to lose all modified SQL                // commands from history just because _some_ may be modified                // because they are bad or obsolete.                boolean modeIC      = false;                boolean modeGlobal  = false;                boolean modeExecute = false;                int     modeLine    = 0;                try {                    String       fromHist = commandFromHistory(0);                    StringBuffer sb       = new StringBuffer(fromHist);                    if (other == null) {                        throw new BadSwitch(0);                    }                    String delim = other.substring(0, 1);                    StringTokenizer toker = new StringTokenizer(other, delim,                        true);                    if (toker.countTokens() < 4                            ||!toker.nextToken().equals(delim)) {                        throw new BadSwitch(1);                    }                    String from = toker.nextToken().replace('$', '\n');                    if (!toker.nextToken().equals(delim)) {                        throw new BadSwitch(2);                    }                    String to = toker.nextToken().replace('$', '\n');                    if (to.equals(delim)) {                        to = "";                    } else {                        if (toker.countTokens() > 0                                &&!toker.nextToken().equals(delim)) {                            throw new BadSwitch(3);                        }                    }                    if (toker.countTokens() > 0) {                        String opts = toker.nextToken("");                        for (int j = 0; j < opts.length(); j++) {                            switch (opts.charAt(j)) {                                case 'i' :                                    modeIC = true;                                    break;                                case ';' :                                    modeExecute = true;                                    break;                                case 'g' :                                    modeGlobal = true;                                    break;                                case '1' :                                case '2' :                                case '3' :                                case '4' :                                case '5' :                                case '6' :                                case '7' :                                case '8' :                                case '9' :                                    modeLine = Character.digit(opts.charAt(j),                                                               10);                                    break;                                default :                                    throw new BadSpecial(                                        "Unknown Substitution option: "                                        + opts.charAt(j));                            }                        }                    }                    if (modeIC) {                        fromHist = fromHist.toUpperCase();                        from     = from.toUpperCase();                    }                    // lineStart will be either 0 or char FOLLOWING a \n.                    int lineStart = 0;                    // lineStop is the \n AFTER what we consider.                    int lineStop = -1;                    if (modeLine > 0) {                        for (int j = 1; j < modeLine; j++) {                            lineStart = fromHist.indexOf('\n', lineStart) + 1;                            if (lineStart < 1) {                                throw new BadSpecial(                                    "There are not " + modeLine                                    + " lines in the buffer.");                            }                        }                        lineStop = fromHist.indexOf('\n', lineStart);                    }                    if (lineStop < 0) {                        lineStop = fromHist.length();                    }                    // System.err.println("["                    // + fromHist.substring(lineStart, lineStop) + ']');                    int i;                    if (modeGlobal) {                        i = lineStop;                        while ((i = fromHist.lastIndexOf(from, i - 1))                                >= lineStart) {                            sb.replace(i, i + from.length(), to);                        }                    } else if ((i = fromHist.indexOf(from, lineStart)) > -1                               && i < lineStop) {                        sb.replace(i, i + from.length(), to);                    }                    //statementHistory[curHist] = sb.toString();                    curCommand = sb.toString();                    setBuf(curCommand);                    stdprintln((modeExecute ? "Executing"                                            : "Current Buffer") + ":\n"                                            + curCommand);                    if (modeExecute) {                        stdprintln();                    }                } catch (BadSwitch badswitch) {                    throw new BadSpecial(                        "Substitution syntax:  \":s/from this/to that/i;g2\".  "                        + "Use '$' for line separations.  ["                        + badswitch.getMessage() + ']');                }                if (modeExecute) {                    processSQL();                    stringBuffer.setLength(0);                }                return;            case '?' :                stdprintln(BUFFER_HELP_TEXT);                return;        }        throw new BadSpecial("Unknown Buffer Command");    }    private boolean doPrepare  = false;    private String  prepareVar = null;    /**     * Process a Special Command.     *     * @param inString Complete command, less the leading '\' character.     * @throws SQLException Passed through from processSQL()     * @throws BadSpecial Runtime error()     * @throws QuitNot Command execution (but not the JVM!) should stop     */

⌨️ 快捷键说明

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