Mega Code Archive

 
Categories / Java / Database SQL JDBC
 

Encapsulate the Connection-related operations that every JDBC program seems to use

/*  * Copyright (c) Ian F. Darwin, http://www.darwinsys.com/, 1996-2002.  * All rights reserved. Software written by Ian F. Darwin and others.  * $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $  *  * 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.  *  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.  *   * Java, the Duke mascot, and all variants of Sun's Java "steaming coffee  * cup" logo are trademarks of Sun Microsystems. Sun's, and James Gosling's,  * pioneering role in inventing and promulgating (and standardizing) the Java   * language and environment is gratefully acknowledged.  *   * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for  * inventing predecessor languages C and C++ is also gratefully acknowledged.  */ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; /** Encapsulate the Connection-related operations that every   * JDBC program seems to use.  */ public class ConnectionUtil {   /** The default config filename, relative to ${user.home} */   public static final String DEFAULT_NAME = ".db.properties";      /** The current config filename */   private static String configFileName =     System.getProperty("user.home") + File.separator + DEFAULT_NAME;   /** Get a Connection for the given config using the default or set property file name */   public static Connection getConnection(String config) throws Exception {     try {       Properties p = new Properties();       p.load(new FileInputStream(configFileName));       return getConnection(p, config);     } catch (IOException ex) {       throw new Exception(ex.toString());     }   }      /** Get a Connection for the given config name from a provided Properties */   public static Connection getConnection(Properties p,  String config) throws Exception {     try {       String db_driver = p.getProperty(config  + "." + "DBDriver");       String db_url = p.getProperty(config  + "." + "DBURL");       String db_user = p.getProperty(config  + "." + "DBUser");       String db_password = p.getProperty(config  + "." + "DBPassword");       if (db_driver == null || db_url == null) {         throw new IllegalStateException("Driver or URL null: " + config);       }       return createConnection(db_driver, db_url, db_user, db_password);     } catch (ClassNotFoundException ex) {       throw new Exception(ex.toString());        } catch (SQLException ex) {       throw new Exception(ex.toString());     }   }   public static Connection createConnection(String db_driver, String db_url,            String db_user, String db_password)       throws ClassNotFoundException, SQLException {     // Load the database driver     System.out.println("Loading driver " + db_driver);     Class.forName(db_driver);     System.out.println("Connecting to DB " + db_url);     return DriverManager.getConnection(       db_url, db_user, db_password);   }      /** Returns the full path of the configuration file being used.    * @return Returns the configFileName.    */   public static String getConfigFileName() {     return configFileName;   }      /** Sets the full path of the config file to read.    * @param configFileNam The FileName of the configuration file to use.    */   public static void setConfigFileName(String configFileNam) {     configFileName = configFileNam;     File file = new File(configFileName);     if (!file.canRead()) {       throw new IllegalArgumentException("Unreadable: " + configFileName);     }     try {       ConnectionUtil.configFileName = file.getCanonicalPath();     } catch (IOException ex) {       System.err.println("Warning: IO error checking path: " + configFileName);       ConnectionUtil.configFileName = configFileName;     }   } }