📄 webthread.java
字号:
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 + -