summaryrefslogtreecommitdiff
path: root/java/sql
diff options
context:
space:
mode:
authorAaron M. Renn <arenn@urbanophile.com>1999-01-19 04:28:42 +0000
committerAaron M. Renn <arenn@urbanophile.com>1999-01-19 04:28:42 +0000
commit6605a657bdfa08f635760e8badea8bf94539e53f (patch)
treefaa6ecb581db2766af6b7370fc350ab4efa1c087 /java/sql
parent3242e2e00ddd9aa0dd817447376d0f30627131c6 (diff)
downloadclasspath-6605a657bdfa08f635760e8badea8bf94539e53f.tar.gz
Initial Checkin
Diffstat (limited to 'java/sql')
-rw-r--r--java/sql/DriverManager.java377
1 files changed, 377 insertions, 0 deletions
diff --git a/java/sql/DriverManager.java b/java/sql/DriverManager.java
new file mode 100644
index 000000000..c05850308
--- /dev/null
+++ b/java/sql/DriverManager.java
@@ -0,0 +1,377 @@
+/*************************************************************************
+/* DriverManager.java -- Manage JDBC drivers
+/*
+/* Copyright (c) 1999 Free Software Foundation, Inc.
+/* Written by Aaron M. Renn (arenn@urbanophile.com)
+/*
+/* This library is free software; you can redistribute it and/or modify
+/* it under the terms of the GNU Library General Public License as published
+/* by the Free Software Foundation, either version 2 of the License, or
+/* (at your option) any later verion.
+/*
+/* This library is distributed in the hope that it will be useful, but
+/* WITHOUT ANY WARRANTY; without even the implied warranty of
+/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+/* GNU Library General Public License for more details.
+/*
+/* You should have received a copy of the GNU Library General Public License
+/* along with this library; if not, write to the Free Software Foundation
+/* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
+/*************************************************************************/
+
+package java.sql;
+
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+import java.util.Properties;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+/**
+ * This class manages the JDBC drivers in the system. It maintains a
+ * registry of drivers and locates the appropriate driver to handle a
+ * JDBC database URL.
+ * <p>
+ * On startup, <code>DriverManager</code> loads all the managers specified
+ * by the system property <code>jdbc.drivers</code>. The value of this
+ * property should be a colon separated list of fully qualified driver
+ * class names. Additional drivers can be loaded at any time by
+ * simply loading the driver class with <code>class.forName(String)</code>.
+ * The driver should automatically register itself in a static
+ * initializer.
+ * <p>
+ * The methods in this class are all <code>static</code>. This class
+ * cannot be instantiated.
+ *
+ * @author Aaron M. Renn (arenn@urbanophile.com)
+ */
+public class DriverManager
+{
+
+/*
+ * Class Variables
+ */
+
+/**
+ * This is the log stream for JDBC drivers.
+ */
+private static PrintStream log_stream;
+
+/**
+ * This is the log writer for JDBC drivers.
+ */
+private static PrintWriter log_writer;
+
+/**
+ * This is the login timeout used by JDBC drivers.
+ */
+private static int login_timeout;
+
+/**
+ * This is the list of JDBC drivers that are loaded.
+ */
+private static Vector drivers;
+ // Hmm, seems like we might want to do a Hashtable and lookup by something,
+ // but what would it be?
+
+// Load all drivers on startup
+static
+{
+ drivers = new Vector();
+
+ String driver_string = System.getProperty("jdbc.drivers");
+ if (driver_string != null)
+ {
+ StringTokenizer st = new StringTokenizer(driver_string);
+ while (st.hasMoreTokens())
+ {
+ String driver_classname = st.nextToken();
+
+ try
+ {
+ Class.forName(driver_classname); // The driver registers itself
+ }
+ catch (Exception e) { ; } // Ignore not founds
+ }
+ }
+
+}
+
+/*************************************************************************/
+
+/*
+ * Class Methods
+ */
+
+/**
+ * This method returns the login timeout in use by JDBC drivers systemwide.
+ *
+ * @return The login timeout.
+ */
+public static int
+getLoginTimeout()
+{
+ return(login_timeout);
+}
+
+/*************************************************************************/
+
+/**
+ * This method set the login timeout used by JDBC drivers. This is a
+ * system-wide parameter that applies to all drivers.
+ *
+ * @param login_timeout The new login timeout value.
+ */
+public static void
+setLoginTimeout(int login_timeout)
+{
+ DriverManager.login_timeout = login_timeout;
+}
+
+/*************************************************************************/
+
+/**
+ * This method returns the log writer being used by all JDBC drivers.
+ * This method should be used in place of the deprecated
+ * <code>getLogStream</code> method.
+ *
+ * @return The log writer in use by JDBC drivers.
+ */
+public static PrintWriter
+getLogWriter()
+{
+ return(log_writer);
+}
+
+/*************************************************************************/
+
+/**
+ * This method sets the log writer being used by JDBC drivers. This is a
+ * system-wide parameter that affects all drivers. Note that since there
+ * is no way to retrieve a <code>PrintStream</code> from a
+ * <code>PrintWriter</code>, this method cannot set the log stream in
+ * use by JDBC. Thus any older drivers may not see this setting.
+ *
+ * @param log_writer The new log writer for JDBC.
+ */
+public static void
+setLogWriter(PrintWriter log_writer)
+{
+ DriverManager.log_writer = log_writer;
+}
+
+/*************************************************************************/
+
+/**
+ * This method returns the log stream in use by JDBC.
+ *
+ * @return The log stream in use by JDBC.
+ *
+ * @deprecated Use <code>getLogWriter()</code> instead.
+ */
+public static PrintStream
+getLogStream()
+{
+ return(log_stream);
+}
+
+/*************************************************************************/
+
+/**
+ * This method sets the log stream in use by JDBC.
+ *
+ * @param log_stream The log stream in use by JDBC.
+ *
+ * @deprecated Use <code>setLogWriter</code> instead.
+ */
+public static void
+setLogStream(PrintStream log_stream)
+{
+ DriverManager.log_stream = log_stream;
+}
+
+/*************************************************************************/
+
+/**
+ * This method prints the specified line to the log stream.
+ *
+ * @param str The string to write to the log stream.
+ */
+public static void
+println(String str)
+{
+ if (log_stream != null) // Watch for user not using logging
+ log_stream.println(str);
+}
+
+/*************************************************************************/
+
+/**
+ * This method registers a new driver with the manager. This is normally
+ * called by the driver itself in a static initializer.
+ *
+ * @param driver The new <code>Driver</code> to add.
+ */
+public static void
+registerDriver(Driver driver)
+{
+ if (!drivers.contains(driver))
+ drivers.addElement(driver);
+}
+
+/*************************************************************************/
+
+/**
+ * This method de-registers a driver from the manager.
+ *
+ * @param driver The <code>Driver</code> to unregister.
+ */
+public static void
+deregisterDriver(Driver driver)
+{
+ if (drivers.contains(driver))
+ drivers.removeElement(driver);
+}
+
+/*************************************************************************/
+
+/**
+ * This method returns a list of all the currently registered JDBC drivers
+ * that were loaded by the current <code>ClassLoader</code>.
+ *
+ * @return An <code>Enumeration</code> of all currently loaded JDBC drivers.
+ */
+public static Enumeration
+getDrivers()
+{
+ Vector v = new Vector();
+ Enumeration e = drivers.elements();
+
+ // Is this right?
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+
+ while(e.hasMoreElements())
+ {
+ Object obj = e.nextElement();
+ if (!obj.getClass().getClassLoader().equals(cl))
+ continue;
+
+ v.addElement(obj);
+ }
+
+ return(v.elements());
+}
+
+/*************************************************************************/
+
+/**
+ * This method returns a driver that can connect to the specified
+ * JDBC URL string. This will be selected from among drivers loaded
+ * at initialization time and those drivers manually loaded by the
+ * same class loader as the caller.
+ *
+ * @param url The JDBC URL string to find a driver for.
+ *
+ * @return A <code>Driver</code> that can connect to the specified
+ * URL, or <code>null</code> if a suitable driver cannot be found.
+ *
+ * @exception SQLException If an error occurs.
+ */
+public static Driver
+getDriver(String url) throws SQLException
+{
+ // FIXME: Limit driver search to the appropriate subset of loaded drivers.
+
+ Enumeration e = drivers.elements();
+ while(e.hasMoreElements())
+ {
+ Driver d = (Driver)e.nextElement();
+ if (d.acceptsURL(url))
+ return(d);
+ }
+
+ return(null);
+}
+
+/*************************************************************************/
+
+/**
+ * This method attempts to return a connection to the specified
+ * JDBC URL string.
+ *
+ * @param url The JDBC URL string to connect to.
+ *
+ * @return A <code>Connection</code> to that URL.
+ *
+ * @exception SQLException If an error occurs.
+ */
+public static Connection
+getConnection(String url) throws SQLException
+{
+ return(getConnection(url, new Properties()));
+}
+
+/*************************************************************************/
+
+/**
+ * This method attempts to return a connection to the specified
+ * JDBC URL string using the specified username and password.
+ *
+ * @param url The JDBC URL string to connect to.
+ * @param user The username to connect with.
+ * @param password The password to connect with.
+ *
+ * @return A <code>Connection</code> to that URL.
+ *
+ * @exception SQLException If an error occurs.
+ */
+public static Connection
+getConnection(String url, String user, String password) throws SQLException
+{
+ Properties p = new Properties();
+
+ p.setProperty("user", user);
+ p.setProperty("password", password);
+
+ return(getConnection(url, p));
+}
+
+/*************************************************************************/
+
+/**
+ * This method attempts to return a connection to the specified
+ * JDBC URL string using the specified connection properties.
+ *
+ * @param url The JDBC URL string to connect to.
+ * @param properties The connection properties.
+ *
+ * @return A <code>Connection</code> to that URL.
+ *
+ * @exception SQLException If an error occurs.
+ */
+public static Connection
+getConnection(String url, Properties properties) throws SQLException
+{
+ Driver d = getDriver(url);
+ if (d == null)
+ throw new SQLException("Driver not found for URL: " + url);
+
+ return(d.connect(url, properties));
+}
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+// Keep bozos from trying to instantiate us.
+private
+DriverManager()
+{
+ ;
+}
+
+} // class DriverManager
+