📄 sqltool.java
字号:
}
coeOverride = Boolean.TRUE;
} else if (parameter.equals("list")) {
listMode = true;
} else if (parameter.equals("rcfile")) {
if (++i == arg.length) {
throw bcl;
}
rcFile = arg[i];
} else if (parameter.equals("setvar")) {
if (++i == arg.length) {
throw bcl;
}
varSettings = arg[i];
} else if (parameter.equals("sql")) {
noinput = true; // but turn back on if file "-" specd.
if (++i == arg.length) {
throw bcl;
}
sqlText = arg[i];
if (sqlText.charAt(sqlText.length() - 1) != ';') {
sqlText += ";";
}
} else if (parameter.equals("debug")) {
debug = true;
} else if (parameter.equals("noautofile")) {
noautoFile = true;
} else if (parameter.equals("autocommit")) {
autoCommit = true;
} else if (parameter.equals("stdinput")) {
noinput = false;
stdinputOverride = Boolean.TRUE;
} else if (parameter.equals("noinput")) {
noinput = true;
stdinputOverride = Boolean.FALSE;
} else if (parameter.equals("driver")) {
if (++i == arg.length) {
throw bcl;
}
driver = arg[i];
} else if (parameter.equals("inlinerc")) {
if (++i == arg.length) {
throw bcl;
}
rcParams = arg[i];
} else {
throw bcl;
}
}
if (!listMode) {
// If an inline RC file was specified, don't worry about the targetDb
if (rcParams == null) {
if (++i == arg.length) {
throw bcl;
}
targetDb = arg[i];
}
}
int scriptIndex = 0;
if (sqlText != null) {
try {
tmpFile = File.createTempFile("sqltool-", ".sql");
//(new java.io.FileWriter(tmpFile)).write(sqlText);
java.io.FileWriter fw = new java.io.FileWriter(tmpFile);
fw.write("/* " + (new java.util.Date()) + ". "
+ SqlTool.class.getName()
+ " command-line SQL. */\n\n");
fw.write(sqlText + '\n');
fw.flush();
fw.close();
} catch (IOException ioe) {
exitMain(4, "Failed to write given sql to temp file: "
+ ioe);
return;
}
}
if (stdinputOverride != null) {
noinput = !stdinputOverride.booleanValue();
}
interactive = (!noinput) && (arg.length <= i + 1);
if (arg.length == i + 2 && arg[i + 1].equals("-")) {
if (stdinputOverride == null) {
noinput = false;
}
} else if (arg.length > i + 1) {
// I.e., if there are any SQL files specified.
scriptFiles =
new File[arg.length - i - 1 + ((stdinputOverride == null ||!stdinputOverride.booleanValue()) ? 0
: 1)];
if (debug) {
System.err.println("scriptFiles has "
+ scriptFiles.length + " elements");
}
while (i + 1 < arg.length) {
scriptFiles[scriptIndex++] = new File(arg[++i]);
}
if (stdinputOverride != null
&& stdinputOverride.booleanValue()) {
scriptFiles[scriptIndex++] = null;
noinput = true;
}
}
} catch (BadCmdline bcl) {
exitMain(2, SYNTAX_MESSAGE);
return;
}
RCData conData = null;
// Use the inline RC file if it was specified
if (rcParams != null) {
rcFields = new HashMap();
try {
varParser(rcParams, rcFields, true);
} catch (SqlToolException e) {
exitMain(24, e.getMessage());
}
try {
rcUrl = (String) rcFields.get("url");
rcUsername = (String) rcFields.get("user");
rcDriver = (String) rcFields.get("driver");
rcCharset = (String) rcFields.get("charset");
rcTruststore = (String) rcFields.get("truststore");
rcPassword = promptForPassword(rcUsername);
conData = new RCData(CMDLINE_ID, rcUrl, rcUsername,
rcPassword, rcDriver, rcCharset,
rcTruststore);
} catch (SqlToolException e) {
throw e;
} catch (Exception e) {
exitMain(1, "Invalid inline RC file specified: "
+ e.getMessage());
return;
}
} else {
try {
conData = new RCData(new File((rcFile == null)
? DEFAULT_RCFILE
: rcFile), targetDb);
} catch (Exception e) {
exitMain(
1, "Failed to retrieve connection info for database '"
+ targetDb + "': " + e.getMessage());
return;
}
}
if (listMode) {
exitMain(0);
return;
}
if (debug) {
conData.report();
}
try {
conn = conData.getConnection(
driver, System.getProperty("sqlfile.charset"),
System.getProperty("javax.net.ssl.trustStore"));
conn.setAutoCommit(autoCommit);
DatabaseMetaData md = null;
if (interactive && (md = conn.getMetaData()) != null) {
System.out.println("JDBC Connection established to a "
+ md.getDatabaseProductName() + " v. "
+ md.getDatabaseProductVersion()
+ " database as '" + md.getUserName()
+ "'.");
}
} catch (Exception e) {
e.printStackTrace();
// Let's not continue as if nothing is wrong.
exitMain(10,
"Failed to get a connection to " + conData.url + " as "
+ conData.username + ". " + e.getMessage());
return;
}
File[] emptyFileArray = {};
File[] singleNullFileArray = { null };
File autoFile = null;
if (interactive &&!noautoFile) {
autoFile = new File(System.getProperty("user.home")
+ "/auto.sql");
if ((!autoFile.isFile()) ||!autoFile.canRead()) {
autoFile = null;
}
}
if (scriptFiles == null) {
// I.e., if no SQL files given on command-line.
// Input file list is either nothing or {null} to read stdin.
scriptFiles = (noinput ? emptyFileArray
: singleNullFileArray);
}
int numFiles = scriptFiles.length;
if (tmpFile != null) {
numFiles += 1;
}
if (autoFile != null) {
numFiles += 1;
}
SqlFile[] sqlFiles = new SqlFile[numFiles];
HashMap userVars = new HashMap();
if (varSettings != null) {
varParser(varSettings, userVars, false);
}
// We print version before execing this one.
int interactiveFileIndex = -1;
try {
int fileIndex = 0;
if (autoFile != null) {
sqlFiles[fileIndex++] = new SqlFile(autoFile, false,
userVars);
}
if (tmpFile != null) {
sqlFiles[fileIndex++] = new SqlFile(tmpFile, false, userVars);
}
for (int j = 0; j < scriptFiles.length; j++) {
if (interactiveFileIndex < 0 && interactive) {
interactiveFileIndex = fileIndex;
}
sqlFiles[fileIndex++] = new SqlFile(scriptFiles[j],
interactive, userVars);
}
} catch (IOException ioe) {
try {
conn.close();
} catch (Exception e) {}
exitMain(2, ioe.getMessage());
return;
}
int retval = 0; // Value we will return via System.exit().
try {
for (int j = 0; j < sqlFiles.length; j++) {
if (j == interactiveFileIndex) {
System.out.print("SqlTool v. " + revnum
+ ". ");
}
sqlFiles[j].execute(conn, coeOverride);
}
} catch (IOException ioe) {
System.err.println("Failed to execute SQL: " + ioe.getMessage());
retval = 3;
// These two Exception types are handled properly inside of SqlFile.
// We just need to return an appropriate error status.
} catch (SqlToolError ste) {
retval = 2;
// Should not be handling SQLExceptions here! SqlFile should handle
// them.
} catch (SQLException se) {
retval = 1;
} finally {
try {
conn.close();
} catch (Exception e) {}
}
// Taking file removal out of final block because this is good debug
// info to keep around if the program aborts.
if (tmpFile != null &&!tmpFile.delete()) {
System.err.println(
"Error occurred while trying to remove temp file '" + tmpFile
+ "'");
}
exitMain(retval);
return;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -