⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 database.java

📁 hsql是很有名的嵌入式数据库
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* Copyright (c) 1995-2000, The Hypersonic SQL Group.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * Redistributions of source code must retain the above copyright notice, this
 * list of conditions and the following disclaimer.
 *
 * 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.
 *
 * Neither the name of the Hypersonic SQL Group nor the names of its
 * contributors may be used to endorse or promote products derived from this
 * software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS 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 HYPERSONIC SQL GROUP,
 * OR 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 Hypersonic SQL Group.
 *
 *
 * For work added by the HSQL Development Group:
 *
 * Copyright (c) 2001-2005, The HSQL Development Group
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * Redistributions of source code must retain the above copyright notice, this
 * list of conditions and the following disclaimer.
 *
 * 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.
 *
 * Neither the name of the HSQL Development Group nor the names of its
 * contributors may be used to endorse or promote products derived from this
 * software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS 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 HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
 * OR 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.
 */


package org.hsqldb;import java.lang.reflect.Constructor;import org.hsqldb.lib.FileAccess;import org.hsqldb.lib.FileUtil;import org.hsqldb.lib.HashMap;import org.hsqldb.persist.HsqlDatabaseProperties;import org.hsqldb.persist.HsqlProperties;import org.hsqldb.persist.Logger;// fredt@users 20020130 - patch 476694 by velichko - transaction savepoints// additions to different parts to support savepoint transactions// fredt@users 20020215 - patch 1.7.0 - new HsqlProperties class// support use of properties from database.properties file// fredt@users 20020218 - patch 1.7.0 - DEFAULT keyword// support for default values for table columns// fredt@users 20020305 - patch 1.7.0 - restructuring// some methods move to Table.java, some removed// fredt@users 20020221 - patch 513005 by sqlbob@users (RMP) - restructuring// fredt@users 20020221 - patch 513005 by sqlbob@users (RMP) - error trapping// boucherb@users 20020130 - patch 1.7.0 - use lookup for speed// idents listed in alpha-order for easy check of stats...// fredt@users 20020420 - patch523880 by leptipre@users - VIEW support// boucherb@users - doc 1.7.0 - added javadoc comments// tony_lai@users 20020820 - patch 595073 - duplicated exception msg// tony_lai@users 20020820 - changes to shutdown compact to save memory// boucherb@users 20020828 - allow reconnect to local db that has shutdown// fredt@users 20020912 - patch 1.7.1 by fredt - drop duplicate name triggers// fredt@users 20021112 - patch 1.7.2 by Nitin Chauhan - use of switch// rewrite of the majority of multiple if(){}else if(){} chains with switch()// boucherb@users 20020310 - class loader update for JDK 1.1 compliance// fredt@users 20030401 - patch 1.7.2 by akede@users - data files readonly// fredt@users 20030401 - patch 1.7.2 by Brendan Ryan - data files in Jar// boucherb@users 20030405 - removed 1.7.2 lint - updated JavaDocs// boucherb@users 20030425 - DDL methods are moved to DatabaseCommandInterpreter.java// boucherb@users - fredt@users 200305..200307 - patch 1.7.2 - DatabaseManager upgrade// loosecannon1@users - patch 1.7.2 - properties on the JDBC URL// oj@openoffice.org - changed to file access api/** *  Database is the root class for HSQL Database Engine database. <p> * *  It holds the data structure that form an HSQLDB database instance. * * Modified significantly from the Hypersonic original in successive * HSQLDB versions. * * @author Thomas Mueller (Hypersonic SQL Group) * @version 1.8.0 * @since Hypersonic SQL */public class Database {    int            databaseID;    private String sType;    private String sName;// loosecannon1@users 1.7.2 patch properties on the JDBC URL    private HsqlProperties urlProperties;    private String         sPath;    DatabaseInformation    dbInfo;    ClassLoader            classLoader;    /** indicates the state of the database */    private int   dbState;    public Logger logger;    /** true means that all tables are readonly. */    boolean databaseReadOnly;    /**     * true means that all CACHED and TEXT tables are readonly.     *  MEMORY tables are updatable but updates are not persisted.     */    private boolean filesReadOnly;    /** true means filesReadOnly but CACHED and TEXT tables are disallowed */    private boolean                filesInJar;    public boolean                 sqlEnforceStrictSize;    public int                     firstIdentity;    private boolean                bIgnoreCase;    private boolean                bReferentialIntegrity;    private HsqlDatabaseProperties databaseProperties;    private boolean                shutdownOnNoConnection;    // schema invarient objects    private HashMap        hAlias;    private UserManager    userManager;    private GranteeManager granteeManager;    HsqlNameManager        nameManager;    // session related objects    public SessionManager     sessionManager;    public TransactionManager txManager;    CompiledStatementManager  compiledStatementManager;    // schema objects    public SchemaManager schemaManager;    public Collation     collation;    //    public static final int DATABASE_ONLINE       = 1;    public static final int DATABASE_OPENING      = 4;    public static final int DATABASE_CLOSING      = 8;    public static final int DATABASE_SHUTDOWN     = 16;    public static final int CLOSEMODE_IMMEDIATELY = -1;    public static final int CLOSEMODE_NORMAL      = 0;    public static final int CLOSEMODE_COMPACT     = 1;    public static final int CLOSEMODE_SCRIPT      = 2;    /**     *  Constructs a new Database object.     *     * @param type is the type of the database: "mem", "file", "res"     * @param path is the canonical path to the database files     * @param props property overrides placed on the connect URL     * @exception  HsqlException if the specified name and path     *      combination is illegal or unavailable, or the database files the     *      name and path resolves to are in use by another process     */    Database(String type, String path, String name,             HsqlProperties props) throws HsqlException {        urlProperties = props;        setState(Database.DATABASE_SHUTDOWN);        sName = name;        sType = type;        sPath = path;        if (sType == DatabaseURL.S_RES) {            filesInJar    = true;            filesReadOnly = true;        }        // does not need to be done more than once        try {            classLoader = getClass().getClassLoader();        } catch (Exception e) {            // strict security policy:  just use the system/boot loader            classLoader = null;        }// oj@openoffice.org - changed to file access api        String fileaccess_class_name =            (String) urlProperties.getProperty("fileaccess_class_name");        if (fileaccess_class_name != null) {            String storagekey = urlProperties.getProperty("storage_key");            try {                Class zclass = Class.forName(fileaccess_class_name);                Constructor constructor = zclass.getConstructor(new Class[]{                    Object.class });                fileaccess =                    (FileAccess) constructor.newInstance(new Object[]{                        storagekey });                isStoredFileAccess = true;            } catch (java.lang.ClassNotFoundException e) {                System.out.println("ClassNotFoundException");            } catch (java.lang.InstantiationException e) {                System.out.println("InstantiationException");            } catch (java.lang.IllegalAccessException e) {                System.out.println("IllegalAccessException");            } catch (Exception e) {                System.out.println("Exception");            }        } else {            fileaccess = new FileUtil();        }        shutdownOnNoConnection = urlProperties.getProperty("shutdown",                "false").equals("true");        logger                   = new Logger();        compiledStatementManager = new CompiledStatementManager(this);    }    /**     * Opens this database.  The database should be opened after construction.     */    synchronized void open() throws HsqlException {        if (!isShutdown()) {            return;        }        reopen();    }    /**     * Opens this database.  The database should be opened after construction.     * or reopened by the close(int closemode) method during a     * "shutdown compact". Closes the log if there is an error.     */    void reopen() throws HsqlException {        boolean isNew;        setState(DATABASE_OPENING);        try {            User sysUser;            databaseProperties = new HsqlDatabaseProperties(this);            isNew = sType == DatabaseURL.S_MEM                    ||!databaseProperties.checkFileExists();            if (isNew && urlProperties.isPropertyTrue("ifexists")) {                throw Trace.error(Trace.DATABASE_NOT_EXISTS, sType + sPath);            }            databaseProperties.load();            databaseProperties.setURLProperties(urlProperties);            compiledStatementManager.reset();            granteeManager        = new GranteeManager(this);            userManager           = new UserManager(this);            hAlias                = Library.getAliasMap();            nameManager           = new HsqlNameManager();            schemaManager         = new SchemaManager(this);            bReferentialIntegrity = true;            sysUser               = userManager.getSysUser();            sessionManager        = new SessionManager(this, sysUser);            txManager             = new TransactionManager(this);            collation             = new Collation();            dbInfo = DatabaseInformation.newDatabaseInformation(this);            databaseProperties.setDatabaseVariables();            if (sType != DatabaseURL.S_MEM) {                logger.openLog(this);            }            if (isNew) {                sessionManager.getSysSession(                    null, false).sqlExecuteDirectNoPreChecks(                    "CREATE USER SA PASSWORD \"\" ADMIN");                logger.synchLogForce();            }            dbInfo.setWithContent(true);        } catch (Throwable e) {            logger.closeLog(Database.CLOSEMODE_IMMEDIATELY);            logger.releaseLock();            setState(DATABASE_SHUTDOWN);            clearStructures();            DatabaseManager.removeDatabase(this);            if (!(e instanceof HsqlException)) {                e = Trace.error(Trace.GENERAL_ERROR, e.toString());            }            throw (HsqlException) e;        }        setState(DATABASE_ONLINE);    }    /**     * Clears the data structuress, making them elligible for garbage collection.     */    void clearStructures() {        if (schemaManager != null) {            schemaManager.clearStructures();        }        granteeManager = null;        userManager    = null;        hAlias         = null;        nameManager    = null;        schemaManager  = null;        sessionManager = null;        dbInfo         = null;    }    /**     *  Returns the type of the database: "mem", "file", "res"     */    public String getType() {        return sType;    }    /**     *  Returns the path of the database     */    public String getPath() {        return sPath;    }    /**     *  Returns the database properties.     */    public HsqlDatabaseProperties getProperties() {        return databaseProperties;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -