basedatasource.java

来自「PostgreSQL7.4.6 for Linux」· Java 代码 · 共 288 行

JAVA
288
字号
package org.postgresql.jdbc2.optional;import javax.naming.*;import java.io.PrintWriter;import java.sql.*;import java.io.ObjectOutputStream;import java.io.ObjectInputStream;import java.io.IOException;/** * Base class for data sources and related classes. * * @author Aaron Mulder (ammulder@chariotsolutions.com) * @version $Revision: 1.3.6.1 $ */public abstract class BaseDataSource implements Referenceable{	// Load the normal driver, since we'll use it to actually connect to the	// database.  That way we don't have to maintain the connecting code in	// multiple places.	static {		try		{			Class.forName("org.postgresql.Driver");		}		catch (ClassNotFoundException e)		{			System.err.println("PostgreSQL DataSource unable to load PostgreSQL JDBC Driver");		}	}	// Needed to implement the DataSource/ConnectionPoolDataSource interfaces	private transient PrintWriter logger;	// Don't track loginTimeout, since we'd just ignore it anyway	// Standard properties, defined in the JDBC 2.0 Optional Package spec	private String serverName = "localhost";	private String databaseName;	private String user;	private String password;	private int portNumber;	/**	 * Gets a connection to the PostgreSQL database.  The database is identified by the	 * DataSource properties serverName, databaseName, and portNumber.	The user to	 * connect as is identified by the DataSource properties user and password.	 *	 * @return A valid database connection.	 * @throws SQLException	 *		   Occurs when the database connection cannot be established.	 */	public Connection getConnection() throws SQLException	{		return getConnection(user, password);	}	/**	 * Gets a connection to the PostgreSQL database.  The database is identified by the	 * DataSource properties serverName, databaseName, and portNumber.	The user to	 * connect as is identified by the arguments user and password, which override	 * the DataSource properties by the same name.	 *	 * @return A valid database connection.	 * @throws SQLException	 *		   Occurs when the database connection cannot be established.	 */	public Connection getConnection(String user, String password) throws SQLException	{		try		{			Connection con = DriverManager.getConnection(getUrl(), user, password);			if (logger != null)			{				logger.println("Created a non-pooled connection for " + user + " at " + getUrl());			}			return con;		}		catch (SQLException e)		{			if (logger != null)			{				logger.println("Failed to create a non-pooled connection for " + user + " at " + getUrl() + ": " + e);			}			throw e;		}	}	/**	 * This DataSource does not support a configurable login timeout.	 * @return 0	 */	public int getLoginTimeout() throws SQLException	{		return 0;	}	/**	 * This DataSource does not support a configurable login timeout.  Any value	 * provided here will be ignored.	 */	public void setLoginTimeout(int i) throws SQLException		{}	/**	 * Gets the log writer used to log connections opened.	 */	public PrintWriter getLogWriter() throws SQLException	{		return logger;	}	/**	 * The DataSource will note every connection opened to the provided log writer.	 */	public void setLogWriter(PrintWriter printWriter) throws SQLException	{		logger = printWriter;	}	/**	 * Gets the name of the host the PostgreSQL database is running on.	 */	public String getServerName()	{		return serverName;	}	/**	 * Sets the name of the host the PostgreSQL database is running on.  If this	 * is changed, it will only affect future calls to getConnection.  The default	 * value is <tt>localhost</tt>.	 */	public void setServerName(String serverName)	{		if (serverName == null || serverName.equals(""))		{			this.serverName = "localhost";		}		else		{			this.serverName = serverName;		}	}	/**	 * Gets the name of the PostgreSQL database, running on the server identified	 * by the serverName property.	 */	public String getDatabaseName()	{		return databaseName;	}	/**	 * Sets the name of the PostgreSQL database, running on the server identified	 * by the serverName property.	If this is changed, it will only affect	 * future calls to getConnection.	 */	public void setDatabaseName(String databaseName)	{		this.databaseName = databaseName;	}	/**	 * Gets a description of this DataSource-ish thing.  Must be customized by	 * subclasses.	 */	public abstract String getDescription();	/**	 * Gets the user to connect as by default.	If this is not specified, you must	 * use the getConnection method which takes a user and password as parameters.	 */	public String getUser()	{		return user;	}	/**	 * Sets the user to connect as by default.	If this is not specified, you must	 * use the getConnection method which takes a user and password as parameters.	 * If this is changed, it will only affect future calls to getConnection.	 */	public void setUser(String user)	{		this.user = user;	}	/**	 * Gets the password to connect with by default.  If this is not specified but a	 * password is needed to log in, you must use the getConnection method which takes	 * a user and password as parameters.	 */	public String getPassword()	{		return password;	}	/**	 * Sets the password to connect with by default.  If this is not specified but a	 * password is needed to log in, you must use the getConnection method which takes	 * a user and password as parameters.  If this is changed, it will only affect	 * future calls to getConnection.	 */	public void setPassword(String password)	{		this.password = password;	}	/**	 * Gets the port which the PostgreSQL server is listening on for TCP/IP	 * connections.	 *	 * @return The port, or 0 if the default port will be used.	 */	public int getPortNumber()	{		return portNumber;	}	/**	 * Gets the port which the PostgreSQL server is listening on for TCP/IP	 * connections.  Be sure the -i flag is passed to postmaster when PostgreSQL	 * is started.	If this is not set, or set to 0, the default port will be used.	 */	public void setPortNumber(int portNumber)	{		this.portNumber = portNumber;	}	/**	 * Generates a DriverManager URL from the other properties supplied.	 */	private String getUrl()	{		return "jdbc:postgresql://" + serverName + (portNumber == 0 ? "" : ":" + portNumber) + "/" + databaseName;	}    /**     * Generates a reference using the appropriate object factory.  This     * implementation uses the JDBC 2 optional package object factory.     */    protected Reference createReference()    {        return new Reference(getClass().getName(), PGObjectFactory.class.getName(), null);    }	public Reference getReference() throws NamingException	{		Reference ref = createReference();		ref.add(new StringRefAddr("serverName", serverName));		if (portNumber != 0)		{			ref.add(new StringRefAddr("portNumber", Integer.toString(portNumber)));		}		ref.add(new StringRefAddr("databaseName", databaseName));		if (user != null)		{			ref.add(new StringRefAddr("user", user));		}		if (password != null)		{			ref.add(new StringRefAddr("password", password));		}		return ref;	}	protected void writeBaseObject(ObjectOutputStream out) throws IOException	{		out.writeObject(serverName);		out.writeObject(databaseName);		out.writeObject(user);		out.writeObject(password);		out.writeInt(portNumber);	}	protected void readBaseObject(ObjectInputStream in) throws IOException, ClassNotFoundException	{		serverName = (String)in.readObject();		databaseName = (String)in.readObject();		user = (String)in.readObject();		password = (String)in.readObject();		portNumber = in.readInt();	}}

⌨️ 快捷键说明

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