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

📄 webthread.java

📁 非常棒的java数据库
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
                    if (!s.startsWith("@")) {
                        buff.append(PageParser.escapeHtml(s + ";"));
                        buff.append("<br />");
                    }
                    buff.append(getResult(conn, i + 1, s, list.size() == 1, false));
                    buff.append("<br />");
                }
                result = buff.toString();
            }
            session.put("result", result);
        } catch (Throwable e) {
            session.put("result", getStackTrace(0, e, session.getContents().isH2));
        }
        return "result.jsp";
    }

    static class DynamicClassLoader extends SecureClassLoader {

        private String name;
        private byte[] data;
        private Class clazz;

        DynamicClassLoader(String name, byte[] data) throws MalformedURLException {
            super(DynamicClassLoader.class.getClassLoader());
            this.name = name;
            this.data = data;
        }

        public Class loadClass(String className) throws ClassNotFoundException {
            return findClass(className);
        }

        public Class findClass(String className) throws ClassNotFoundException {
            if (className.equals(name)) {
                if (clazz == null) {
                    clazz = defineClass(className, data, 0, data.length);
                }
                return clazz;
            }
            try {
                return findSystemClass(className);
            } catch (Exception e) {
            }
            return super.findClass(className);
        }
    }

    private String executeJava(String code) throws Exception {
        File javaFile = new File("Java.java");
        File classFile = new File("Java.class");
        try {
            PrintWriter out = new PrintWriter(new FileWriter(javaFile));
            classFile.delete();
            int endImport = code.indexOf("@CODE");
            String importCode = "import java.util.*; import java.math.*; import java.sql.*;";
            if (endImport >= 0) {
                importCode = code.substring(0, endImport);
                code = code.substring("@CODE".length() + endImport);
            }
            out.println(importCode);
            out.println("public class Java { public static Object run() throws Throwable {" + code + "}}");
            out.close();
            Process p = Runtime.getRuntime().exec("javac Java.java");
            InputStream processIn = p.getInputStream();
            InputStream processErrorIn = p.getErrorStream();
            StringBuffer buff = new StringBuffer();
            while (true) {
                int c = processIn.read();
                if (c == -1) {
                    break;
                }
                buff.append((char) c);
            }
            while (true) {
                int c = processErrorIn.read();
                if (c == -1) {
                    break;
                }
                buff.append((char) c);
            }
            String error = buff.toString().trim();
            if (error.length() > 0) {
                throw new Exception("Error compiling: " + error);
            }
            byte[] data = new byte[(int) classFile.length()];
            DataInputStream in = new DataInputStream(new FileInputStream(classFile));
            in.readFully(data);
            in.close();
            DynamicClassLoader cl = new DynamicClassLoader("Java", data);
            Class clazz = cl.loadClass("Java");
            Method[] methods = clazz.getMethods();
            for (int i = 0; i < methods.length; i++) {
                Method m = methods[i];
                if (m.getName().equals("run")) {
                    return "" + m.invoke(null, new Object[0]);
                }
            }
            return null;
        } finally {
            javaFile.delete();
            classFile.delete();
        }
    }

    private String editResult() {
        ResultSet rs = session.result;
        int row = Integer.parseInt(attributes.getProperty("row"));
        int op = Integer.parseInt(attributes.getProperty("op"));
        String result = "", error = "";
        try {
            if (op == 1) {
                boolean insert = row < 0;
                if (insert) {
                    rs.moveToInsertRow();
                } else {
                    rs.absolute(row);
                }
                for (int i = 0; i < rs.getMetaData().getColumnCount(); i++) {
                    String x = attributes.getProperty("r" + row + "c" + (i + 1));
                    rs.updateString(i + 1, unescapeData(x));
                }
                if (insert) {
                    rs.insertRow();
                } else {
                    rs.updateRow();
                }
            } else if (op == 2) {
                rs.absolute(row);
                rs.deleteRow();
            } else if (op == 3) {
                // cancel
            }
        } catch (Throwable e) {
            result = "<br />" + getStackTrace(0, e, session.getContents().isH2);
            error = formatAsError(e.getMessage());
        }
        String sql = "@EDIT " + (String) session.get("resultSetSQL");
        Connection conn = session.getConnection();
        result = error + getResult(conn, -1, sql, true, true) + result;
        session.put("result", result);
        return "result.jsp";
    }

    private ResultSet getMetaResultSet(Connection conn, String sql) throws SQLException {
        DatabaseMetaData meta = conn.getMetaData();
        if (sql.startsWith("@TABLES")) {
            String[] p = split(sql);
            String[] types = p[4] == null ? null : StringUtils.arraySplit(p[4], ',', false);
            return meta.getTables(p[1], p[2], p[3], types);
        } else if (sql.startsWith("@COLUMNS")) {
            String[] p = split(sql);
            return meta.getColumns(p[1], p[2], p[3], p[4]);
        } else if (sql.startsWith("@INDEX_INFO")) {
            String[] p = split(sql);
            boolean unique = p[4] == null ? false : Boolean.valueOf(p[4]).booleanValue();
            boolean approx = p[5] == null ? false : Boolean.valueOf(p[5]).booleanValue();
            return meta.getIndexInfo(p[1], p[2], p[3], unique, approx);
        } else if (sql.startsWith("@PRIMARY_KEYS")) {
            String[] p = split(sql);
            return meta.getPrimaryKeys(p[1], p[2], p[3]);
        } else if (sql.startsWith("@PROCEDURES")) {
            String[] p = split(sql);
            return meta.getProcedures(p[1], p[2], p[3]);
        } else if (sql.startsWith("@PROCEDURE_COLUMNS")) {
            String[] p = split(sql);
            return meta.getProcedureColumns(p[1], p[2], p[3], p[4]);
        } else if (sql.startsWith("@SCHEMAS")) {
            return meta.getSchemas();
        } else if (sql.startsWith("@CATALOG")) {
            SimpleResultSet rs = new SimpleResultSet();
            rs.addColumn("CATALOG", Types.VARCHAR, 0, 0);
            rs.addRow(new String[] { conn.getCatalog() });
            return rs;
        } else if (sql.startsWith("@MEMORY")) {
            SimpleResultSet rs = new SimpleResultSet();
            rs.addColumn("Type", Types.VARCHAR, 0, 0);
            rs.addColumn("Value", Types.VARCHAR, 0, 0);
            rs.addRow(new String[] { "Used Memory", "" + MemoryUtils.getMemoryUsed() });
            rs.addRow(new String[] { "Free Memory", "" + MemoryUtils.getMemoryFree() });
            return rs;
        } else if (sql.startsWith("@INFO")) {
            SimpleResultSet rs = new SimpleResultSet();
            rs.addColumn("KEY", Types.VARCHAR, 0, 0);
            rs.addColumn("VALUE", Types.VARCHAR, 0, 0);
            rs.addRow(new String[] { "conn.getCatalog", conn.getCatalog() });
            rs.addRow(new String[] { "conn.getAutoCommit", "" + conn.getAutoCommit() });
            rs.addRow(new String[] { "conn.getTransactionIsolation", "" + conn.getTransactionIsolation() });
            rs.addRow(new String[] { "conn.getWarnings", "" + conn.getWarnings() });
            String map;
            try {
                map = "" + conn.getTypeMap();
            } catch (SQLException e) {
                map = e.toString();
            }
            rs.addRow(new String[] { "conn.getTypeMap", "" + map });
            rs.addRow(new String[] { "conn.isReadOnly", "" + conn.isReadOnly() });
            rs.addRow(new String[] { "meta.getCatalogSeparator", "" + meta.getCatalogSeparator() });
            rs.addRow(new String[] { "meta.getCatalogTerm", "" + meta.getCatalogTerm() });
            rs.addRow(new String[] { "meta.getDatabaseProductName", "" + meta.getDatabaseProductName() });
            rs.addRow(new String[] { "meta.getDatabaseProductVersion", "" + meta.getDatabaseProductVersion() });
            rs
                    .addRow(new String[] { "meta.getDefaultTransactionIsolation",
                            "" + meta.getDefaultTransactionIsolation() });
            rs.addRow(new String[] { "meta.getDriverMajorVersion", "" + meta.getDriverMajorVersion() });
            rs.addRow(new String[] { "meta.getDriverMinorVersion", "" + meta.getDriverMinorVersion() });
            rs.addRow(new String[] { "meta.getDriverName", "" + meta.getDriverName() });
            rs.addRow(new String[] { "meta.getDriverVersion", "" + meta.getDriverVersion() });
            rs.addRow(new String[] { "meta.getExtraNameCharacters", "" + meta.getExtraNameCharacters() });
            rs.addRow(new String[] { "meta.getIdentifierQuoteString", "" + meta.getIdentifierQuoteString() });
            rs.addRow(new String[] { "meta.getMaxBinaryLiteralLength", "" + meta.getMaxBinaryLiteralLength() });
            rs.addRow(new String[] { "meta.getMaxCatalogNameLength", "" + meta.getMaxCatalogNameLength() });
            rs.addRow(new String[] { "meta.getMaxCharLiteralLength", "" + meta.getMaxCharLiteralLength() });
            rs.addRow(new String[] { "meta.getMaxColumnNameLength", "" + meta.getMaxColumnNameLength() });
            rs.addRow(new String[] { "meta.getMaxColumnsInGroupBy", "" + meta.getMaxColumnsInGroupBy() });
            rs.addRow(new String[] { "meta.getMaxColumnsInIndex", "" + meta.getMaxColumnsInIndex() });
            rs.addRow(new String[] { "meta.getMaxColumnsInOrderBy", "" + meta.getMaxColumnsInOrderBy() });
            rs.addRow(new String[] { "meta.getMaxColumnsInSelect", "" + meta.getMaxColumnsInSelect() });
            rs.addRow(new String[] { "meta.getMaxColumnsInTable", "" + meta.getMaxColumnsInTable() });
            rs.addRow(new String[] { "meta.getMaxConnections", "" + meta.getMaxConnections() });
            rs.addRow(new String[] { "meta.getMaxCursorNameLength", "" + meta.getMaxCursorNameLength() });
            rs.addRow(new String[] { "meta.getMaxIndexLength", "" + meta.getMaxIndexLength() });
            rs.addRow(new String[] { "meta.getMaxProcedureNameLength", "" + meta.getMaxProcedureNameLength() });
            rs.addRow(new String[] { "meta.getMaxRowSize", "" + meta.getMaxRowSize() });
            rs.addRow(new String[] { "meta.getMaxSchemaNameLength", "" + meta.getMaxSchemaNameLength() });
            rs.addRow(new String[] { "meta.getMaxStatementLength", "" + meta.getMaxStatementLength() });
            rs.addRow(new String[] { "meta.getMaxStatements", "" + meta.getMaxStatements() });
            rs.addRow(new String[] { "meta.getMaxTableNameLength", "" + meta.getMaxTableNameLength() });
            rs.addRow(new String[] { "meta.getMaxTablesInSelect", "" + meta.getMaxTablesInSelect() });
            rs.addRow(new String[] { "meta.getMaxUserNameLength", "" + meta.getMaxUserNameLength() });
            rs.addRow(new String[] { "meta.getNumericFunctions", "" + meta.getNumericFunctions() });
            rs.addRow(new String[] { "meta.getProcedureTerm", "" + meta.getProcedureTerm() });
            rs.addRow(new String[] { "meta.getSchemaTerm", "" + meta.getSchemaTerm() });
            rs.addRow(new String[] { "meta.getSearchStringEscape", "" + meta.getSearchStringEscape() });
            rs.addRow(new String[] { "meta.getSQLKeywords", "" + meta.getSQLKeywords() });
            rs.addRow(new String[] { "meta.getStringFunctions", "" + meta.getStringFunctions() });
            rs.addRow(new String[] { "meta.getSystemFunctions", "" + meta.getSystemFunctions() });
            rs.addRow(new String[] { "meta.getTimeDateFunctions", "" + meta.getTimeDateFunctions() });
            rs.addRow(new String[] { "meta.getURL", "" + meta.getURL() });
            rs.addRow(new String[] { "meta.getUserName", "" + meta.getUserName() });
            rs.addRow(new String[] { "meta.isCatalogAtStart", "" + meta.isCatalogAtStart() });
            rs.addRow(new String[] { "meta.isReadOnly", "" + meta.isReadOnly() });
            rs.addRow(new String[] { "meta.allProceduresAreCallable", "" + meta.allProceduresAreCallable() });
            rs.addRow(new String[] { "meta.allTablesAreSelectable", "" + meta.allTablesAreSelectable() });
            rs.addRow(new String[] { "meta.dataDefinitionCausesTransactionCommit",
                    "" + meta.dataDefinitionCausesTransactionCommit() });
            rs.addRow(new String[] { "meta.dataDefinitionIgnoredInTransactions",
                    "" + meta.dataDefinitionIgnoredInTransactions() });
            rs.addRow(new String[] { "meta.doesMaxRowSizeIncludeBlobs", "" + meta.doesMaxRowSizeIncludeBlobs() });
            rs.addRow(new String[] { "meta.nullPlusNonNullIsNull", "" + meta.nullPlusNonNullIsNull() });
            rs.addRow(new String[] { "meta.nullsAreSortedAtEnd", "" + meta.nullsAreSortedAtEnd() });
            rs.addRow(new String[] { "meta.nullsAreSortedAtStart", "" + meta.nullsAreSortedAtStart() });
            rs.addRow(new String[] { "meta.nullsAreSortedHigh", "" + meta.nullsAreSortedHigh() });
            rs.addRow(new String[] { "meta.nullsAreSortedLow", "" + meta.nullsAreSortedLow() });
            rs.addRow(new String[] { "meta.storesLowerCaseIdentifiers", "" + meta.storesLowerCaseIdentifiers() });
            rs.addRow(new String[] { "meta.storesLowerCaseQuotedIdentifiers",
                    "" + meta.storesLowerCaseQuotedIdentifiers() });
            rs.addRow(new String[] { "meta.storesMixedCaseIdentifiers", "" + meta.storesMixedCaseIdentifiers() });
            rs.addRow(new String[] { "meta.storesMixedCaseQuotedIdentifiers",
                    "" + meta.storesMixedCaseQuotedIdentifiers() });
            rs.addRow(new String[] { "meta.storesUpperCaseIdentifiers", "" + meta.storesUpperCaseIdentifiers() });
            rs.addRow(new String[] { "meta.storesUpperCaseQuotedIdentifiers",
                    "" + meta.storesUpperCaseQuotedIdentifiers() });
            rs.addRow(new String[] { "meta.supportsAlterTableWithAddColumn",
                    "" + meta.supportsAlterTableWithAddColumn() });
            rs.addRow(new String[] { "meta.supportsAlterTableWithDropColumn",
                    "" + meta.supportsAlterTableWithDropColumn() });
            rs.addRow(new String[] { "meta.supportsANSI92EntryLevelSQL", "" + meta.supportsANSI92EntryLevelSQL() });
            rs.addRow(new String[] { "meta.supportsANSI92FullSQL", "" + meta.supportsANSI92FullSQL() });
            rs.addRow(new String[] { "meta.supportsANSI92IntermediateSQL", "" + meta.supportsANSI92IntermediateSQL() });
            rs.addRow(new String[] { "meta.supportsBatchUpdates", "" + meta.supportsBatchUpdates() });
            rs.addRow(new String[] { "meta.supportsCatalogsInDataManipulation",
                    "" + meta.supportsCatalogsInDataManipulation() });
            rs.addRow(new String[] { "meta.supportsCatalogsInIndexDefinitions",
                    "" + meta.supportsCatalogsInIndexDefinitions() });
            rs.addRow(new String[] { "meta.supportsCatalogsInPrivilegeDefinitions",
                    "" + meta.supportsCatalogsInPrivilegeDefinitions() });
            rs.addRow(new String[] { "meta.supportsCatalogsInProcedureCalls",
                    "" + meta.supportsCatalogsInProcedureCalls() });
            rs.addRow(new String[] { "meta.supportsCatalogsInTableDefinitions",
                    "" + meta.supportsCatalogsInTableDefinitions() });
            rs.addRow(new String[] { "meta.supportsColumnAliasing", "" + meta.supportsColumnAliasing() });
            rs.addRow(new String[] { "meta.supportsConvert", "" + meta.supportsConvert() });
            rs.addRow(new String[] { "meta.supportsCoreSQLGrammar", "" + meta.supportsCoreSQLGrammar() });
            rs.addRow(new String[] { "meta.supportsCorrelatedSubqueries", "" + me

⌨️ 快捷键说明

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