📄 torquesqlexec.java
字号:
package org.apache.torque.task;/* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Turbine" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * "Apache Turbine", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.PrintStream;import java.io.StringReader;import java.io.Reader;import java.util.List;import java.util.ArrayList;import java.util.Iterator;import java.util.HashMap;import java.util.Map;import java.util.Properties;import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.Driver;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.SQLWarning;import java.sql.Statement;import org.apache.commons.lang.StringUtils;import org.apache.tools.ant.AntClassLoader;import org.apache.tools.ant.BuildException;import org.apache.tools.ant.Project;import org.apache.tools.ant.ProjectHelper;import org.apache.tools.ant.Task;import org.apache.tools.ant.types.EnumeratedAttribute;import org.apache.tools.ant.types.Path;import org.apache.tools.ant.types.Reference;/** * This task uses an SQL -> Database map in the form of a properties * file to insert each SQL file listed into its designated database. * * @author <a href="mailto:jeff@custommonkey.org">Jeff Martin</a> * @author <a href="mailto:gholam@xtra.co.nz">Michael McCallum</A> * @author <a href="mailto:tim.stephenson@sybase.com">Tim Stephenson</A> * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</A> * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a> * @version $Id: TorqueSQLExec.java,v 1.2 2003/03/21 17:31:08 mpoeschl Exp $ */public class TorqueSQLExec extends Task{ private int goodSql = 0; private int totalSql = 0; private Path classpath; private AntClassLoader loader; /** * */ public static class DelimiterType extends EnumeratedAttribute { public static final String NORMAL = "normal"; public static final String ROW = "row"; public String[] getValues() { return new String[] {NORMAL, ROW}; } } /** Database connection */ private Connection conn = null; /** Autocommit flag. Default value is false */ private boolean autocommit = false; /** SQL statement */ private Statement statement = null; /** DB driver. */ private String driver = null; /** DB url. */ private String url = null; /** User name. */ private String userId = null; /** Password */ private String password = null; /** SQL input command */ private String sqlCommand = ""; /** SQL Statement delimiter */ private String delimiter = ";"; /** * The delimiter type indicating whether the delimiter will * only be recognized on a line by itself */ private String delimiterType = DelimiterType.NORMAL; /** Print SQL results. */ private boolean print = false; /** Print header columns. */ private boolean showheaders = true; /** Results Output file. */ private File output = null; /** RDBMS Product needed for this SQL. */ private String rdbms = null; /** RDBMS Version needed for this SQL. */ private String version = null; /** Action to perform if an error is found */ private String onError = "abort"; /** Encoding to use when reading SQL statements from a file */ private String encoding = null; /** Src directory for the files listed in the sqldbmap. */ private String srcDir; /** Properties file that maps an individual SQL file to a database. */ private File sqldbmap; /** * Set the sqldbmap properties file. * * @param sqldbmap filename for the sqldbmap */ public void setSqlDbMap(String sqldbmap) { this.sqldbmap = project.resolveFile(sqldbmap); } /** * Get the sqldbmap properties file. * * @return filename for the sqldbmap */ public File getSqlDbMap() { return sqldbmap; } /** * Set the src directory for the sql files listed in the sqldbmap file. * * @param srcDir sql source directory */ public void setSrcDir(String srcDir) { this.srcDir = project.resolveFile(srcDir).toString(); } /** * Get the src directory for the sql files listed in the sqldbmap file. * * @return sql source directory */ public String getSrcDir() { return srcDir; } /** * Set the classpath for loading the driver. * * @param classpath the classpath */ public void setClasspath(Path classpath) { if (this.classpath == null) { this.classpath = classpath; } else { this.classpath.append(classpath); } } /** * Create the classpath for loading the driver. * * @return the classpath */ public Path createClasspath() { if (this.classpath == null) { this.classpath = new Path(project); } return this.classpath.createPath(); } /** * Set the classpath for loading the driver using the classpath reference. * * @param r reference to the classpath */ public void setClasspathRef(Reference r) { createClasspath().setRefid(r); } /** * Set the sql command to execute * * @param sql sql command to execute */ public void addText(String sql) { this.sqlCommand += sql; } /** * Set the JDBC driver to be used. * * @param driver driver class name */ public void setDriver(String driver) { this.driver = driver; } /** * Set the DB connection url. * * @param url connection url */ public void setUrl(String url) { this.url = url; } /** * Set the user name for the DB connection. * * @param userId database user */ public void setUserid(String userId) { this.userId = userId; } /** * Set the file encoding to use on the sql files read in * * @param encoding the encoding to use on the files */ public void setEncoding(String encoding) { this.encoding = encoding; } /** * Set the password for the DB connection. * * @param password database password */ public void setPassword(String password) { this.password = password; } /** * Set the autocommit flag for the DB connection. * * @param autocommit the autocommit flag */ public void setAutocommit(boolean autocommit) { this.autocommit = autocommit; } /** * Set the statement delimiter. * * <p>For example, set this to "go" and delimitertype to "ROW" for * Sybase ASE or MS SQL Server.</p> * * @param delimiter */ public void setDelimiter(String delimiter) { this.delimiter = delimiter; } /** * Set the Delimiter type for this sql task. The delimiter type takes two * values - normal and row. Normal means that any occurence of the delimiter * terminate the SQL command whereas with row, only a line containing just * the delimiter is recognized as the end of the command. * * @param delimiterType */ public void setDelimiterType(DelimiterType delimiterType) { this.delimiterType = delimiterType.getValue(); } /** * Set the print flag. * * @param print */ public void setPrint(boolean print) { this.print = print; } /** * Set the showheaders flag. * * @param showheaders */ public void setShowheaders(boolean showheaders) { this.showheaders = showheaders; } /** * Set the output file. * * @param output */ public void setOutput(File output) { this.output = output; } /** * Set the rdbms required * * @param vendor */ public void setRdbms(String vendor) { this.rdbms = vendor.toLowerCase(); } /** * Set the version required * * @param version */ public void setVersion(String version) { this.version = version.toLowerCase(); } /** * Set the action to perform onerror * * @param action */ public void setOnerror(OnError action) { this.onError = action.getValue(); } /** * Load the sql file and then execute it * * @throws BuildException */ public void execute() throws BuildException { sqlCommand = sqlCommand.trim(); if (sqldbmap == null || getSqlDbMap().exists() == false) { throw new BuildException("You haven't provided an sqldbmap, or " + "the one you specified doesn't exist: " + sqldbmap); } if (driver == null) { throw new BuildException("Driver attribute must be set!", location); } if (userId == null) { throw new BuildException("User Id attribute must be set!", location); } if (password == null) { throw new BuildException("Password attribute must be set!", location); } if (url == null) { throw new BuildException("Url attribute must be set!", location); } Properties map = new Properties(); try { FileInputStream fis = new FileInputStream(getSqlDbMap()); map.load(fis); fis.close(); } catch (IOException ioe) { throw new BuildException("Cannot open and process the sqldbmap!"); } Map databases = new HashMap(); Iterator eachFileName = map.keySet().iterator(); while (eachFileName.hasNext()) { String sqlfile = (String) eachFileName.next(); String database = map.getProperty(sqlfile); List files = (List) databases.get(database); if (files == null) { files = new ArrayList(); databases.put(database, files); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -