📄 webthread.java
字号:
private String linkToSource(String s) {
try {
StringBuffer result = new StringBuffer(s.length());
int idx = s.indexOf("<br />");
result.append(s.substring(0, idx));
while (true) {
int start = s.indexOf("org.h2.", idx);
if (start < 0) {
result.append(s.substring(idx));
break;
}
result.append(s.substring(idx, start));
int end = s.indexOf(')', start);
if (end < 0) {
result.append(s.substring(idx));
break;
}
String element = s.substring(start, end);
int open = element.lastIndexOf('(');
int dotMethod = element.lastIndexOf('.', open - 1);
int dotClass = element.lastIndexOf('.', dotMethod - 1);
String packageName = element.substring(0, dotClass);
int colon = element.lastIndexOf(':');
String file = element.substring(open + 1, colon);
String lineNumber = element.substring(colon + 1, element.length());
String fullFileName = packageName.replace('.', '/') + "/" + file;
result.append("<a href=\"http://h2database.com/html/source.html?file=");
result.append(fullFileName);
result.append("&line=");
result.append(lineNumber);
result.append("&build=");
result.append(Constants.BUILD_ID);
result.append("\">");
result.append(element);
result.append("</a>");
idx = end;
}
return result.toString();
} catch (Throwable t) {
return s;
}
}
private String formatAsError(String s) {
return "<div class=\"error\">" + s + "</div>";
}
private String test() {
String driver = attributes.getProperty("driver", "");
String url = attributes.getProperty("url", "");
String user = attributes.getProperty("user", "");
String password = attributes.getProperty("password", "");
session.put("driver", driver);
session.put("url", url);
session.put("user", user);
boolean isH2 = url.startsWith("jdbc:h2:");
try {
Connection conn = server.getConnection(driver, url, user, password, this);
JdbcUtils.closeSilently(conn);
session.put("error", "${text.login.testSuccessful}");
return "login.jsp";
} catch (Exception e) {
session.put("error", getLoginError(e, isH2));
return "login.jsp";
}
}
private String getLoginError(Exception e, boolean isH2) {
if (e instanceof JdbcSQLException && ((JdbcSQLException) e).getErrorCode() == ErrorCode.CLASS_NOT_FOUND_1) {
return "${text.login.driverNotFound}<br />" + getStackTrace(0, e, isH2);
} else {
return getStackTrace(0, e, isH2);
}
}
private String login() {
final String driver = attributes.getProperty("driver", "");
final String url = attributes.getProperty("url", "");
final String user = attributes.getProperty("user", "");
final String password = attributes.getProperty("password", "");
session.put("autoCommit", "checked");
session.put("autoComplete", "1");
session.put("maxrows", "1000");
boolean thread = false;
if (socket != null && url.startsWith("jdbc:h2:") && !url.startsWith("jdbc:h2:tcp:")
&& !url.startsWith("jdbc:h2:ssl:") && !url.startsWith("jdbc:h2:mem:")) {
thread = true;
}
if (!thread) {
boolean isH2 = url.startsWith("jdbc:h2:");
try {
Connection conn = server.getConnection(driver, url, user, password, this);
session.setConnection(conn);
session.put("url", url);
session.put("user", user);
session.remove("error");
settingSave();
return "frame.jsp";
} catch (Exception e) {
session.put("error", getLoginError(e, isH2));
return "login.jsp";
}
}
class LoginTask implements Runnable, DatabaseEventListener {
private PrintWriter writer;
private SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SSS");
LoginTask() throws IOException {
String message = "HTTP/1.1 200 OK\n";
message += "Content-Type: " + mimeType + "\n\n";
output.write(message.getBytes());
writer = new PrintWriter(output);
writer.println("<html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" /></head>");
writer.println("<body><h2>Opening Database</h2>URL: " + PageParser.escapeHtml(url) + "<br />");
writer.println("User: " + PageParser.escapeHtml(user) + "<br />");
writer.println("Version: " + Constants.getVersion() + "<br /><br />");
writer.flush();
log("Start...");
}
public void closingDatabase() {
log("Closing database");
}
public void diskSpaceIsLow(long stillAvailable) throws SQLException {
log("Disk space is low; still available: " + stillAvailable);
}
public void exceptionThrown(SQLException e, String sql) {
log("Exception: " + PageParser.escapeHtml(e.toString()) + " SQL: " + PageParser.escapeHtml(sql));
server.traceError(e);
}
public void init(String url) {
log("Init: " + PageParser.escapeHtml(url));
}
public void opened() {
log("Database was opened");
}
public void setProgress(int state, String name, int x, int max) {
name = PageParser.escapeHtml(name);
if (state == listenerLastState) {
long time = System.currentTimeMillis();
if (listenerLastEvent + 500 < time) {
return;
}
listenerLastEvent = time;
} else {
listenerLastState = state;
}
switch (state) {
case DatabaseEventListener.STATE_BACKUP_FILE:
log("Backing up " + name + " " + (100L * x / max) + "%");
break;
case DatabaseEventListener.STATE_CREATE_INDEX:
log("Creating index " + name + " " + (100L * x / max) + "%");
break;
case DatabaseEventListener.STATE_RECOVER:
log("Recovering " + name + " " + (100L * x / max) + "%");
break;
case DatabaseEventListener.STATE_SCAN_FILE:
log("Scanning file " + name + " " + (100L * x / max) + "%");
break;
default:
log("Unknown state: " + state);
}
}
private synchronized void log(String message) {
if (output != null) {
message = dateFormat.format(new Date()) + ": " + message;
writer.println(message + "<br />");
writer.flush();
}
server.trace(message);
}
public void run() {
String sessionId = (String) session.get("sessionId");
boolean isH2 = url.startsWith("jdbc:h2:");
try {
Connection conn = server.getConnection(driver, url, user, password, this);
session.setConnection(conn);
session.put("url", url);
session.put("user", user);
session.remove("error");
settingSave();
log("OK<script type=\"text/javascript\">top.location=\"frame.jsp?jsessionid=" + sessionId
+ "\"</script></body></htm>");
// return "frame.jsp";
} catch (Exception e) {
session.put("error", getLoginError(e, isH2));
log("Error<script type=\"text/javascript\">top.location=\"index.jsp?jsessionid=" + sessionId
+ "\"</script></body></html>");
// return "index.jsp";
}
synchronized (this) {
IOUtils.closeSilently(output);
try {
socket.close();
} catch (IOException e) {
// ignore
}
output = null;
}
}
}
try {
LoginTask login = new LoginTask();
Thread t = new Thread(login);
t.start();
} catch (IOException e) {
// ignore
}
return "";
}
private String logout() {
try {
Connection conn = session.getConnection();
session.setConnection(null);
session.remove("conn");
session.remove("result");
session.remove("tables");
session.remove("user");
if (conn != null) {
conn.close();
}
} catch (Exception e) {
server.trace(e.toString());
}
return "index.do";
}
private String query() {
String sql = attributes.getProperty("sql").trim();
try {
Connection conn = session.getConnection();
String result;
if (sql.startsWith("@JAVA")) {
if (server.getAllowScript()) {
try {
result = executeJava(sql.substring("@JAVA".length()));
} catch (Throwable t) {
result = getStackTrace(0, t, false);
}
} else {
result = "Executing Java code is not allowed, use command line parameters -webScript true";
}
} else if ("@AUTOCOMMIT TRUE".equals(sql)) {
conn.setAutoCommit(true);
result = "${text.result.autoCommitOn}";
} else if ("@AUTOCOMMIT FALSE".equals(sql)) {
conn.setAutoCommit(false);
result = "${text.result.autoCommitOff}";
} else if (sql.startsWith("@TRANSACTION_ISOLATION")) {
String s = sql.substring("@TRANSACTION_ISOLATION".length()).trim();
if (s.length() > 0) {
int level = Integer.parseInt(s);
conn.setTransactionIsolation(level);
}
result = "Transaction Isolation: " + conn.getTransactionIsolation() + "<br />";
result += Connection.TRANSACTION_READ_UNCOMMITTED + ": READ_UNCOMMITTED<br />";
result += Connection.TRANSACTION_READ_COMMITTED + ": READ_COMMITTED<br />";
result += Connection.TRANSACTION_REPEATABLE_READ + ": REPEATABLE_READ<br />";
result += Connection.TRANSACTION_SERIALIZABLE + ": SERIALIZABLE";
} else if (sql.startsWith("@SET MAXROWS ")) {
int maxrows = Integer.parseInt(sql.substring("@SET MAXROWS ".length()));
session.put("maxrows", "" + maxrows);
result = "${text.result.maxrowsSet}";
} else {
ScriptReader r = new ScriptReader(new StringReader(sql));
ObjectArray list = new ObjectArray();
while (true) {
String s = r.readStatement();
if (s == null) {
break;
}
list.add(s);
}
StringBuffer buff = new StringBuffer();
for (int i = 0; i < list.size(); i++) {
String s = (String) list.get(i);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -