📄 platform.java
字号:
package org.apache.ddlutils;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.sql.Connection;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.apache.commons.beanutils.DynaBean;
import org.apache.ddlutils.model.Database;
import org.apache.ddlutils.model.Table;
import org.apache.ddlutils.platform.CreationParameters;
import org.apache.ddlutils.platform.JdbcModelReader;
import org.apache.ddlutils.platform.SqlBuilder;
/**
* A platform encapsulates the database-related functionality such as performing queries
* and manipulations. It also contains an sql builder that is specific to this platform.
*
* @version $Revision: 231110 $
*/
public interface Platform
{
/**
* Returns the name of the database that this platform is for.
*
* @return The name
*/
public String getName();
/**
* Returns the info object for this platform.
*
* @return The info object
*/
public PlatformInfo getPlatformInfo();
/**
* Returns the sql builder for the this platform.
*
* @return The sql builder
*/
public SqlBuilder getSqlBuilder();
/**
* Returns the model reader (which reads a database model from a live database) for this platform.
*
* @return The model reader
*/
public JdbcModelReader getModelReader();
/**
* Returns the data source that this platform uses to access the database.
*
* @return The data source
*/
public DataSource getDataSource();
/**
* Sets the data source that this platform shall use to access the database.
*
* @param dataSource The data source
*/
public void setDataSource(DataSource dataSource);
/**
* Returns the username that this platform shall use to access the database.
*
* @return The username
*/
public String getUsername();
/**
* Sets the username that this platform shall use to access the database.
*
* @param username The username
*/
public void setUsername(String username);
/**
* Returns the password that this platform shall use to access the database.
*
* @return The password
*/
public String getPassword();
/**
* Sets the password that this platform shall use to access the database.
*
* @param password The password
*/
public void setPassword(String password);
// runtime properties
/**
* Determines whether script mode is on. This means that the generated SQL is not
* intended to be sent directly to the database but rather to be saved in a SQL
* script file. Per default, script mode is off.
*
* @return <code>true</code> if script mode is on
*/
public boolean isScriptModeOn();
/**
* Specifies whether script mode is on. This means that the generated SQL is not
* intended to be sent directly to the database but rather to be saved in a SQL
* script file.
*
* @param scriptModeOn <code>true</code> if script mode is on
*/
public void setScriptModeOn(boolean scriptModeOn);
/**
* Determines whether delimited identifiers are used or normal SQL92 identifiers
* (which may only contain alphanumerical characters and the underscore, must start
* with a letter and cannot be a reserved keyword).
* Per default, delimited identifiers are not used
*
* @return <code>true</code> if delimited identifiers are used
*/
public boolean isDelimitedIdentifierModeOn();
/**
* Specifies whether delimited identifiers are used or normal SQL92 identifiers.
*
* @param delimitedIdentifierModeOn <code>true</code> if delimited identifiers shall be used
*/
public void setDelimitedIdentifierModeOn(boolean delimitedIdentifierModeOn);
/**
* Determines whether SQL comments are generated.
*
* @return <code>true</code> if SQL comments shall be generated
*/
public boolean isSqlCommentsOn();
/**
* Specifies whether SQL comments shall be generated.
*
* @param sqlCommentsOn <code>true</code> if SQL comments shall be generated
*/
public void setSqlCommentsOn(boolean sqlCommentsOn);
/**
* Determines whether SQL insert statements can specify values for identity columns.
* This setting is only relevant if the database supports it
* ({@link PlatformInfo#isIdentityOverrideAllowed()}). If this is off, then the
* <code>insert</code> methods will ignore values for identity columns.
*
* @return <code>true</code> if identity override is enabled (the default)
*/
public boolean isIdentityOverrideOn();
/**
* Specifies whether SQL insert statements can specify values for identity columns.
* This setting is only relevant if the database supports it
* ({@link PlatformInfo#isIdentityOverrideAllowed()}). If this is off, then the
* <code>insert</code> methods will ignore values for identity columns.
*
* @param identityOverrideOn <code>true</code> if identity override is enabled (the default)
*/
public void setIdentityOverrideOn(boolean identityOverrideOn);
/**
* Determines whether foreign keys of a table read from a live database
* are alphabetically sorted.
*
* @return <code>true</code> if read foreign keys are sorted
*/
public boolean isForeignKeysSorted();
/**
* Specifies whether foreign keys read from a live database, shall be
* alphabetically sorted.
*
* @param foreignKeysSorted <code>true</code> if read foreign keys shall be sorted
*/
public void setForeignKeysSorted(boolean foreignKeysSorted);
// functionality
/**
* Returns a (new) JDBC connection from the data source.
*
* @return The connection
*/
public Connection borrowConnection() throws DatabaseOperationException;
/**
* Closes the given JDBC connection (returns it back to the pool if the datasource is poolable).
*
* @param connection The connection
*/
public void returnConnection(Connection connection);
/**
* Executes a series of sql statements which must be seperated by the delimiter
* configured as {@link PlatformInfo#getSqlCommandDelimiter()} of the info object
* of this platform.
*
* @param sql The sql statements to execute
* @param continueOnError Whether to continue executing the sql commands when an error occurred
* @return The number of errors
*/
public int evaluateBatch(String sql, boolean continueOnError) throws DatabaseOperationException;
/**
* Executes a series of sql statements which must be seperated by the delimiter
* configured as {@link PlatformInfo#getSqlCommandDelimiter()} of the info object
* of this platform.
*
* TODO: consider outputting a collection of String or some kind of statement
* object from the SqlBuilder instead of having to parse strings here
*
* @param connection The connection to the database
* @param sql The sql statements to execute
* @param continueOnError Whether to continue executing the sql commands when an error occurred
* @return The number of errors
*/
public int evaluateBatch(Connection connection, String sql, boolean continueOnError) throws DatabaseOperationException;
/**
* Performs a shutdown at the database. This is necessary for some embedded databases which otherwise
* would be locked and thus would refuse other connections. Note that this does not change the database
* structure or data in it in any way.
*/
public void shutdownDatabase() throws DatabaseOperationException;
/**
* Performs a shutdown at the database. This is necessary for some embedded databases which otherwise
* would be locked and thus would refuse other connections. Note that this does not change the database
* structure or data in it in any way.
*
* @param connection The connection to the database
*/
public void shutdownDatabase(Connection connection) throws DatabaseOperationException;
/**
* Creates the database specified by the given parameters. Please note that this method does not
* use a data source set via {@link #setDataSource(DataSource)} because it is not possible to
* retrieve the connection information from it without establishing a connection.<br/>
* The given connection url is the url that you'd use to connect to the already-created
* database.<br/>
* On some platforms, this method suppurts additional parameters. These are documented in the
* manual section for the individual platforms.
*
* @param jdbcDriverClassName The jdbc driver class name
* @param connectionUrl The url to connect to the database if it were already created
* @param username The username for creating the database
* @param password The password for creating the database
* @param parameters Additional parameters relevant to database creation (which are platform specific)
*/
public void createDatabase(String jdbcDriverClassName, String connectionUrl, String username, String password, Map parameters) throws DatabaseOperationException, UnsupportedOperationException;
/**
* Drops the database specified by the given parameters. Please note that this method does not
* use a data source set via {@link #setDataSource(DataSource)} because it is not possible to
* retrieve the connection information from it without establishing a connection.
*
* @param jdbcDriverClassName The jdbc driver class name
* @param connectionUrl The url to connect to the database
* @param username The username for creating the database
* @param password The password for creating the database
*/
public void dropDatabase(String jdbcDriverClassName, String connectionUrl, String username, String password) throws DatabaseOperationException, UnsupportedOperationException;
/**
* Creates the tables defined in the database model.
*
* @param model The database model
* @param dropTablesFirst Whether to drop the tables prior to creating them (anew)
* @param continueOnError Whether to continue executing the sql commands when an error occurred
*/
public void createTables(Database model, boolean dropTablesFirst, boolean continueOnError) throws DatabaseOperationException;
/**
* Creates the tables defined in the database model.
*
* @param connection The connection to the database
* @param model The database model
* @param dropTablesFirst Whether to drop the tables prior to creating them (anew)
* @param continueOnError Whether to continue executing the sql commands when an error occurred
*/
public void createTables(Connection connection, Database model, boolean dropTablesFirst, boolean continueOnError) throws DatabaseOperationException;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -