实现数据库源的几种方式和开源数据源的使用

----------------------------理解部分-----------------------------------------
一、数据库连接池原理:(理解)

二、编写数据源(DataSource)(重要)
编写一个类实现javax.sql.DataSource
三、编程的难点:(设计模式)
难点:用一个实现了javax.sql.DataSource类的实例时,用户如果调用Connection.close()方法,会把链接关闭,失去了连接池的意义。
明确一个问题:用户得到Connection的实现是:数据库驱动对Connection接口的实现。因此,调用的close方法都是数据库驱动的,它会把链接给关闭。
(这不是我们要的,我们要把该链接换回池中)。

解决方案:改写驱动原有的close方法。对已知类的某个/某些方法进行功能上的改变,有以下几种编码方案:
a、继承:此处行不通。
到底针对哪个驱动的实现写子类(很多)
数据库驱动对Connection接口的实现类,不允许被继承
丢失了原有对象的信息。捡了芝麻丢了西瓜。
b、装饰(包装)设计模式:(基础IO)
保持被包装对象的原有信息,又可以对某个/某些方法进行改写。

实现的步骤:
1、编写一个类,实现与被包装类(数据库驱动对Connection的实现)相同的接口。(使这个类和数据库的驱动实现有着相同的行为)
2、定义一个变量,引用被包装类的实例。
3、定义构造方法,传入被包装类的实例。
4、对于要改写的方法,编写自己的代码即可。
5、对于不需要改写的方法,调用原有对象的对应方法。

c、适配器模式:

创建一个适配器的类,去把所有方法重新调用一遍

package com.yidongxueyuan.datasource;

import java.sql.Array;
import java.sql.Blob;
import java.sql.CallableStatement;
import java.sql.Clob;
import java.sql.DatabaseMetaData;
import java.sql.NClob;
import java.sql.PreparedStatement;
import java.sql.SQLClientInfoException;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.sql.SQLXML;
import java.sql.Savepoint;
import java.sql.Statement;
import java.sql.Struct;
import java.util.Map;
import java.util.Properties;
import java.util.TimeZone;
import java.util.concurrent.Executor;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.ExceptionInterceptor;
import com.mysql.jdbc.Extension;
import com.mysql.jdbc.MySQLConnection;
import com.mysql.jdbc.log.Log;

//充当适配器:  
public class ConnectionAdapt implements Connection {
	private Connection conn; 
	public ConnectionAdapt(Connection conn){
		this.conn=conn;
	}

	@Override
	public Statement createStatement() throws SQLException {
		
		return conn.createStatement();
	}

	@Override
	public PreparedStatement prepareStatement(String sql) throws SQLException {
		
		return conn.prepareStatement(sql);
		
	}

	@Override
	public CallableStatement prepareCall(String sql) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String nativeSQL(String sql) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void setAutoCommit(boolean autoCommit) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean getAutoCommit() throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void commit() throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void rollback() throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void close() throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean isClosed() throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public DatabaseMetaData getMetaData() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void setReadOnly(boolean readOnly) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean isReadOnly() throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void setCatalog(String catalog) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public String getCatalog() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void setTransactionIsolation(int level) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public int getTransactionIsolation() throws SQLException {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public SQLWarning getWarnings() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void clearWarnings() throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public Statement createStatement(int resultSetType, int resultSetConcurrency)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement prepareStatement(String sql, int resultSetType,
			int resultSetConcurrency) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public CallableStatement prepareCall(String sql, int resultSetType,
			int resultSetConcurrency) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Map<String, Class<?>> getTypeMap() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void setTypeMap(Map<String, Class<?>> map) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setHoldability(int holdability) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public int getHoldability() throws SQLException {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public Savepoint setSavepoint() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Savepoint setSavepoint(String name) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void rollback(Savepoint savepoint) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void releaseSavepoint(Savepoint savepoint) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public Statement createStatement(int resultSetType,
			int resultSetConcurrency, int resultSetHoldability)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement prepareStatement(String sql, int resultSetType,
			int resultSetConcurrency, int resultSetHoldability)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public CallableStatement prepareCall(String sql, int resultSetType,
			int resultSetConcurrency, int resultSetHoldability)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement prepareStatement(String sql, int[] columnIndexes)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement prepareStatement(String sql, String[] columnNames)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Clob createClob() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Blob createBlob() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public NClob createNClob() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public SQLXML createSQLXML() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean isValid(int timeout) throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void setClientInfo(String name, String value)
			throws SQLClientInfoException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setClientInfo(Properties properties)
			throws SQLClientInfoException {
		// TODO Auto-generated method stub

	}

	@Override
	public String getClientInfo(String name) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Properties getClientInfo() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Array createArrayOf(String typeName, Object[] elements)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Struct createStruct(String typeName, Object[] attributes)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public <T> T unwrap(Class<T> iface) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean isWrapperFor(Class<?> iface) throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String exposeAsXml() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean getAllowLoadLocalInfile() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getAllowMasterDownConnections() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getAllowMultiQueries() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getAllowNanAndInf() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getAllowUrlInLocalInfile() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getAlwaysSendSetIsolation() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String getAuthenticationPlugins() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean getAutoClosePStmtStreams() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getAutoDeserialize() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getAutoGenerateTestcaseScript() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getAutoReconnectForPools() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getAutoSlowLog() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public int getBlobSendChunkSize() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public boolean getBlobsAreStrings() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getCacheCallableStatements() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getCacheCallableStmts() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getCachePrepStmts() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getCachePreparedStatements() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getCacheResultSetMetadata() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getCacheServerConfiguration() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public int getCallableStatementCacheSize() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getCallableStmtCacheSize() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public boolean getCapitalizeTypeNames() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String getCharacterSetResults() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getClientCertificateKeyStorePassword() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getClientCertificateKeyStoreType() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getClientCertificateKeyStoreUrl() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getClientInfoProvider() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getClobCharacterEncoding() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean getClobberStreamingResults() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getCompensateOnDuplicateKeyUpdateCounts() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public int getConnectTimeout() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public String getConnectionAttributes() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getConnectionCollation() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getConnectionLifecycleInterceptors() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean getContinueBatchOnError() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getCreateDatabaseIfNotExist() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String getDefaultAuthenticationPlugin() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int getDefaultFetchSize() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public String getDisabledAuthenticationPlugins() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean getDisconnectOnExpiredPasswords() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getDontTrackOpenResources() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getDumpMetadataOnColumnNotFound() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getDumpQueriesOnException() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getDynamicCalendars() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getElideSetAutoCommits() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getEmptyStringsConvertToZero() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getEmulateLocators() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getEmulateUnsupportedPstmts() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getEnablePacketDebug() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getEnableQueryTimeouts() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String getEncoding() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ExceptionInterceptor getExceptionInterceptor() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getExceptionInterceptors() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean getExplainSlowQueries() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getFailOverReadOnly() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getFunctionsNeverReturnBlobs() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getGatherPerfMetrics() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getGatherPerformanceMetrics() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getGenerateSimpleParameterMetadata() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getGetProceduresReturnsFunctions() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getHoldResultsOpenOverStatementClose() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getIgnoreNonTxTables() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getIncludeInnodbStatusInDeadlockExceptions() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getIncludeThreadDumpInDeadlockExceptions() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getIncludeThreadNamesAsStatementComment() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public int getInitialTimeout() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public boolean getInteractiveClient() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getIsInteractiveClient() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getJdbcCompliantTruncation() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getJdbcCompliantTruncationForReads() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String getLargeRowSizeThreshold() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getLoadBalanceAutoCommitStatementRegex() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int getLoadBalanceAutoCommitStatementThreshold() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getLoadBalanceBlacklistTimeout() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public String getLoadBalanceConnectionGroup() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean getLoadBalanceEnableJMX() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String getLoadBalanceExceptionChecker() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int getLoadBalancePingTimeout() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public String getLoadBalanceSQLExceptionSubclassFailover() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getLoadBalanceSQLStateFailover() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getLoadBalanceStrategy() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean getLoadBalanceValidateConnectionOnSwapServer() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String getLocalSocketAddress() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int getLocatorFetchBufferSize() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public boolean getLogSlowQueries() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getLogXaCommands() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String getLogger() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getLoggerClassName() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean getMaintainTimeStats() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public int getMaxAllowedPacket() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getMaxQuerySizeToLog() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getMaxReconnects() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getMaxRows() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getMetadataCacheSize() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getNetTimeoutForStreamingResults() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public boolean getNoAccessToProcedureBodies() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getNoDatetimeStringSync() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getNoTimezoneConversionForTimeType() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getNullCatalogMeansCurrent() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getNullNamePatternMatchesAll() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getOverrideSupportsIntegrityEnhancementFacility() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public int getPacketDebugBufferSize() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public boolean getPadCharsWithSpace() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getParanoid() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String getParseInfoCacheFactory() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getPasswordCharacterEncoding() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean getPedantic() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getPinGlobalTxToPhysicalConnection() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getPopulateInsertRowWithDefaultValues() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public int getPrepStmtCacheSize() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getPrepStmtCacheSqlLimit() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getPreparedStatementCacheSize() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getPreparedStatementCacheSqlLimit() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public boolean getProcessEscapeCodesForPrepStmts() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getProfileSQL() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getProfileSql() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String getProfilerEventHandler() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getPropertiesTransform() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int getQueriesBeforeRetryMaster() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public boolean getQueryTimeoutKillsConnection() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getReconnectAtTxEnd() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getRelaxAutoCommit() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getReplicationEnableJMX() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public int getReportMetricsIntervalMillis() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public boolean getRequireSSL() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String getResourceId() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int getResultSetSizeThreshold() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public boolean getRetainStatementAfterResultSetClose() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public int getRetriesAllDown() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public boolean getRewriteBatchedStatements() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getRollbackOnPooledClose() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getRoundRobinLoadBalance() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getRunningCTS13() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public int getSecondsBeforeRetryMaster() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getSelfDestructOnPingMaxOperations() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getSelfDestructOnPingSecondsLifetime() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public String getServerConfigCacheFactory() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getServerTimezone() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getSessionVariables() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int getSlowQueryThresholdMillis() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public long getSlowQueryThresholdNanos() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public String getSocketFactory() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getSocketFactoryClassName() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int getSocketTimeout() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public String getStatementInterceptors() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean getStrictFloatingPoint() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getStrictUpdates() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getTcpKeepAlive() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getTcpNoDelay() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public int getTcpRcvBuf() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getTcpSndBuf() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getTcpTrafficClass() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public boolean getTinyInt1isBit() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getTraceProtocol() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getTransformedBitIsBoolean() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getTreatUtilDateAsTimestamp() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String getTrustCertificateKeyStorePassword() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getTrustCertificateKeyStoreType() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getTrustCertificateKeyStoreUrl() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean getUltraDevHack() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseAffectedRows() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseBlobToStoreUTF8OutsideBMP() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseColumnNamesInFindColumn() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseCompression() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String getUseConfigs() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean getUseCursorFetch() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseDirectRowUnpack() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseDynamicCharsetInfo() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseFastDateParsing() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseFastIntParsing() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseGmtMillisForDatetimes() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseHostsInPrivileges() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseInformationSchema() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseJDBCCompliantTimezoneShift() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseJvmCharsetConverters() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseLegacyDatetimeCode() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseLocalSessionState() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseLocalTransactionState() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseNanosForElapsedTime() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseOldAliasMetadataBehavior() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseOldUTF8Behavior() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseOnlyServerErrorMessages() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseReadAheadInput() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseSSL() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseSSPSCompatibleTimezoneShift() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseServerPrepStmts() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseServerPreparedStmts() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseSqlStateCodes() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseStreamLengthsInPrepStmts() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseTimezone() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseUltraDevWorkAround() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseUnbufferedInput() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseUnicode() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getUseUsageAdvisor() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String getUtf8OutsideBmpExcludedColumnNamePattern() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getUtf8OutsideBmpIncludedColumnNamePattern() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean getVerifyServerCertificate() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean getYearIsDateType() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String getZeroDateTimeBehavior() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void setAllowLoadLocalInfile(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setAllowMasterDownConnections(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setAllowMultiQueries(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setAllowNanAndInf(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setAllowUrlInLocalInfile(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setAlwaysSendSetIsolation(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setAuthenticationPlugins(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setAutoClosePStmtStreams(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setAutoDeserialize(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setAutoGenerateTestcaseScript(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setAutoReconnect(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setAutoReconnectForConnectionPools(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setAutoReconnectForPools(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setAutoSlowLog(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setBlobSendChunkSize(String arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setBlobsAreStrings(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setCacheCallableStatements(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setCacheCallableStmts(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setCachePrepStmts(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setCachePreparedStatements(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setCacheResultSetMetadata(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setCacheServerConfiguration(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setCallableStatementCacheSize(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setCallableStmtCacheSize(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setCapitalizeDBMDTypes(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setCapitalizeTypeNames(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setCharacterEncoding(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setCharacterSetResults(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setClientCertificateKeyStorePassword(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setClientCertificateKeyStoreType(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setClientCertificateKeyStoreUrl(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setClientInfoProvider(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setClobCharacterEncoding(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setClobberStreamingResults(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setCompensateOnDuplicateKeyUpdateCounts(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setConnectTimeout(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setConnectionCollation(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setConnectionLifecycleInterceptors(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setContinueBatchOnError(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setCreateDatabaseIfNotExist(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setDefaultAuthenticationPlugin(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setDefaultFetchSize(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setDetectServerPreparedStmts(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setDisabledAuthenticationPlugins(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setDisconnectOnExpiredPasswords(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setDontTrackOpenResources(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setDumpMetadataOnColumnNotFound(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setDumpQueriesOnException(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setDynamicCalendars(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setElideSetAutoCommits(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setEmptyStringsConvertToZero(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setEmulateLocators(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setEmulateUnsupportedPstmts(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setEnablePacketDebug(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setEnableQueryTimeouts(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setEncoding(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setExceptionInterceptors(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setExplainSlowQueries(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setFailOverReadOnly(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setFunctionsNeverReturnBlobs(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setGatherPerfMetrics(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setGatherPerformanceMetrics(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setGenerateSimpleParameterMetadata(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setGetProceduresReturnsFunctions(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setHoldResultsOpenOverStatementClose(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setIgnoreNonTxTables(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setIncludeInnodbStatusInDeadlockExceptions(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setIncludeThreadDumpInDeadlockExceptions(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setIncludeThreadNamesAsStatementComment(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setInitialTimeout(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setInteractiveClient(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setIsInteractiveClient(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setJdbcCompliantTruncation(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setJdbcCompliantTruncationForReads(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLargeRowSizeThreshold(String arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLoadBalanceAutoCommitStatementRegex(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLoadBalanceAutoCommitStatementThreshold(int arg0)
			throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLoadBalanceBlacklistTimeout(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLoadBalanceConnectionGroup(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLoadBalanceEnableJMX(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLoadBalanceExceptionChecker(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLoadBalancePingTimeout(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLoadBalanceSQLExceptionSubclassFailover(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLoadBalanceSQLStateFailover(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLoadBalanceStrategy(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLoadBalanceValidateConnectionOnSwapServer(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLocalSocketAddress(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLocatorFetchBufferSize(String arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLogSlowQueries(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLogXaCommands(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLogger(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLoggerClassName(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setMaintainTimeStats(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setMaxQuerySizeToLog(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setMaxReconnects(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setMaxRows(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setMetadataCacheSize(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setNetTimeoutForStreamingResults(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setNoAccessToProcedureBodies(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setNoDatetimeStringSync(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setNoTimezoneConversionForTimeType(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setNullCatalogMeansCurrent(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setNullNamePatternMatchesAll(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setOverrideSupportsIntegrityEnhancementFacility(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setPacketDebugBufferSize(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setPadCharsWithSpace(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setParanoid(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setParseInfoCacheFactory(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setPasswordCharacterEncoding(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setPedantic(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setPinGlobalTxToPhysicalConnection(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setPopulateInsertRowWithDefaultValues(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setPrepStmtCacheSize(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setPrepStmtCacheSqlLimit(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setPreparedStatementCacheSize(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setPreparedStatementCacheSqlLimit(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setProcessEscapeCodesForPrepStmts(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setProfileSQL(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setProfileSql(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setProfilerEventHandler(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setPropertiesTransform(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setQueriesBeforeRetryMaster(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setQueryTimeoutKillsConnection(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setReconnectAtTxEnd(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setRelaxAutoCommit(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setReplicationEnableJMX(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setReportMetricsIntervalMillis(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setRequireSSL(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setResourceId(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setResultSetSizeThreshold(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setRetainStatementAfterResultSetClose(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setRetriesAllDown(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setRewriteBatchedStatements(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setRollbackOnPooledClose(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setRoundRobinLoadBalance(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setRunningCTS13(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setSecondsBeforeRetryMaster(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setSelfDestructOnPingMaxOperations(int arg0)
			throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setSelfDestructOnPingSecondsLifetime(int arg0)
			throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setServerConfigCacheFactory(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setServerTimezone(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setSessionVariables(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setSlowQueryThresholdMillis(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setSlowQueryThresholdNanos(long arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setSocketFactory(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setSocketFactoryClassName(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setSocketTimeout(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setStatementInterceptors(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setStrictFloatingPoint(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setStrictUpdates(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setTcpKeepAlive(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setTcpNoDelay(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setTcpRcvBuf(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setTcpSndBuf(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setTcpTrafficClass(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setTinyInt1isBit(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setTraceProtocol(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setTransformedBitIsBoolean(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setTreatUtilDateAsTimestamp(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setTrustCertificateKeyStorePassword(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setTrustCertificateKeyStoreType(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setTrustCertificateKeyStoreUrl(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUltraDevHack(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseAffectedRows(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseBlobToStoreUTF8OutsideBMP(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseColumnNamesInFindColumn(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseCompression(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseConfigs(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseCursorFetch(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseDirectRowUnpack(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseDynamicCharsetInfo(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseFastDateParsing(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseFastIntParsing(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseGmtMillisForDatetimes(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseHostsInPrivileges(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseInformationSchema(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseJDBCCompliantTimezoneShift(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseJvmCharsetConverters(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseLegacyDatetimeCode(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseLocalSessionState(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseLocalTransactionState(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseNanosForElapsedTime(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseOldAliasMetadataBehavior(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseOldUTF8Behavior(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseOnlyServerErrorMessages(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseReadAheadInput(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseSSL(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseSSPSCompatibleTimezoneShift(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseServerPrepStmts(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseServerPreparedStmts(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseSqlStateCodes(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseStreamLengthsInPrepStmts(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseTimezone(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseUltraDevWorkAround(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseUnbufferedInput(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseUnicode(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUseUsageAdvisor(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUtf8OutsideBmpExcludedColumnNamePattern(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setUtf8OutsideBmpIncludedColumnNamePattern(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setVerifyServerCertificate(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setYearIsDateType(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setZeroDateTimeBehavior(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean useUnbufferedInput() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void abort(Executor arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void abortInternal() throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void changeUser(String arg0, String arg1) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void checkClosed() throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void clearHasTriedMaster() {
		// TODO Auto-generated method stub

	}

	@Override
	public PreparedStatement clientPrepareStatement(String arg0)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement clientPrepareStatement(String arg0, int arg1)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement clientPrepareStatement(String arg0, int[] arg1)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement clientPrepareStatement(String arg0, String[] arg1)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement clientPrepareStatement(String arg0, int arg1,
			int arg2) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement clientPrepareStatement(String arg0, int arg1,
			int arg2, int arg3) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int getActiveStatementCount() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getAutoIncrementIncrement() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public Object getConnectionMutex() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getHost() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long getIdleFor() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public Log getLog() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int getNetworkTimeout() throws SQLException {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public Properties getProperties() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getSchema() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getServerCharacterEncoding() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public TimeZone getServerTimezoneTZ() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getStatementComment() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean hasSameProperties(Connection arg0) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean hasTriedMaster() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void initializeExtension(Extension arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean isAbonormallyLongQuery(long arg0) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean isInGlobalTx() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean isMasterConnection() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean isNoBackslashEscapesSet() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean isSameResource(Connection arg0) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean isServerLocal() throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean lowerCaseTableNames() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean parserKnowsUnicode() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void ping() throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void reportQueryTime(long arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void resetServerState() throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public PreparedStatement serverPrepareStatement(String arg0)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement serverPrepareStatement(String arg0, int arg1)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement serverPrepareStatement(String arg0, int[] arg1)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement serverPrepareStatement(String arg0, String[] arg1)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement serverPrepareStatement(String arg0, int arg1,
			int arg2) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PreparedStatement serverPrepareStatement(String arg0, int arg1,
			int arg2, int arg3) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void setFailedOver(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setInGlobalTx(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setNetworkTimeout(Executor arg0, int arg1) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setPreferSlaveDuringFailover(boolean arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setProxy(MySQLConnection arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setSchema(String arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setStatementComment(String arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void shutdownServer() throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean supportsIsolationLevel() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean supportsQuotedIdentifiers() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean supportsTransactions() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean versionMeetsMinimum(int arg0, int arg1, int arg2)
			throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}

}

d 动态代理:(很重要 AOP–Aspect-Oriented Programming 核心技术)

代理对象是被代理对象的子类!
基于接口的动态代理:Proxy
如果一个类没有实现任何的接口,此种代理就不能使用了。
(1)使用要求,被代理的对象,必须实现某个接口:
代理对象: connProxy:
被代理对象: conn

代码:

原来的类:

package com.yidongxueyuan.proxy;

//原始情况: 没有使用任何的代理对象:
public class TestNoProxy implements SpringBrother{

	@Override
	public void dance(float money) {
		if(money>1000){
			System.out.println("you can dance");
		}
		
	}

	@Override
	public void sing(float money) {
		if(money>100){
			System.out.println("you can sing");
		}
		
	}
	
	public static void main(String[] args) {
		new TestNoProxy().sing(100);
		new TestNoProxy().dance(100);
	}
	
}

代理之后的类:

package com.yidongxueyuan.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class TestProxy {
	
	
	//获得对象的代理类:  
	
	public static void main(String[] args) {
		//使用代理的模式: 对TestNoProxy 进行增强: 
		final  TestNoProxy noproxy = new TestNoProxy();
		//在JDK当中: 获得一个代理对象: 使用Proxy 类: 
		/*
		 *  loader : 类的加载器:  加载被代理的加载器: 加载字节码文件: 加载被代理类的字节码: 
		 *  interfaces: 被代理对象字节码当中所有的方法名称:  
		 *  handler: 定义了代理对象对被代理的对象  具体的代理策略: 
		 *  
		 *  注意:  
		 *  Proxy: JDK提供的基于接口的动态代理: 被代理的对象必须实现接口: 
		 *  Object proxy = Proxy.newProxyInstance("","","");  返回的proxy 就是一个代理对象: 代理对象是:接口的子类对象:\
		 *  参数一: 类的加载器:  被代理类的加载器:  
		 *  参数二: interfaces : 被代理类当中的所有的方法名称: clazz.getInterfaces(); 
		 *  参数三: 接口类型: InvocationHandler :  传递一个实现类: 使用匿名内部类: 定义: 定义代理对象的具体的代理策略:   
		 *        接口当中三个参数: 
		 *        Object proxy:代理对象的引用: 
		 *        Method method: 当前被执行的方法:  
		 *        Object args[] “:封装了执行方法的参数:  参数的个数不确定, 数组类型: 
		 *   
		 */
		SpringBrother proxy = (SpringBrother)Proxy.newProxyInstance(noproxy.getClass().getClassLoader(), noproxy.getClass().getInterfaces(), new InvocationHandler() {
			
			
			/*
			 * proxy :代理对象的引用:
			 * 
			 * method: 当前执行的方法:   类型是Method 类型; 使用反射,对Interface当中提供的方法进行调用: 
			 * 
			 * args:当前执行方法的参数: 数组类型: 不同的方法参数个数可能不同:  
			 */
			@Override
			public Object invoke(Object proxy, Method method, Object[] args)
					throws Throwable {
				//功能性的增强: 
				//判断出场费: 
				
				if("sing".equals(method.getName())){
					//获得参数的值:
					float money =  (Float) args[0];
					if(money >10000){
						//执行了被代理类的方法: 
						method.invoke(noproxy, args);
					}
				}
				if("dance".equals(method.getName())){
					//获得参数的值:
					float money =  (Float) args[0];
					if(money >20000){
						//执行了被代理类的方法: 
						method.invoke(noproxy, args);
					}
				}
				
				return null;
			}
		});
		
		
		//使用代理类调用方法:
		proxy.sing(222000);
		proxy.dance(200);
		
	}
	
	
}

方法二:
比方法一感觉要灵活一些

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class StudentDaoProxy implements InvocationHandler {
	
	private  final StudentDao stuDao = new StudentDao();
	//产生一个代理对象; 
	public  Dao getProxy(){
		
		return (Dao)Proxy.newProxyInstance(stuDao.getClass().getClassLoader(), stuDao.getClass().getInterfaces(), this);
	}
	
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		
		//增强: 
		method.invoke(stuDao, args);
		return null;
	}
}

调用的时候:


import com.yidongxueyuan.domain.Student;

public class TestProxy {
	public static void main(String[] args) {
		//获得一个代理对象; 
		Dao proxy = new StudentDaoProxy().getProxy();
		proxy.savaStu(new Student("lisi",21));//使用代理对象调用:
	}
}

动态代理实现数据源:

package com.yidongxueyuan.proxy2;

import java.io.PrintWriter;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.logging.Logger;

import javax.sql.DataSource;

import com.yidongxueyuan.dao.JdbcUtil;

/*
 * 使用动态代理: 编写数据源: 将Connection的close方法进行增强: 
 */
public class MyDataSource02 implements DataSource {

	private static List<Connection> pool =Collections.synchronizedList( new ArrayList());//保证了安全: 
	private Connection conn;
	//向池子当中放链接对象:  
	static{
		for(int i=1; i<=10 ;i++){
			Connection conn = JdbcUtil.getConnection(); 
			pool.add(conn);
		}
	}
	
	@Override
	public Connection getConnection() throws SQLException {
		final Connection conn = pool.remove(0);//池子:Mysql 提供的conn: 
		
		//代理对象:获得conn的代理对象: 
		Connection proxy = (Connection)Proxy.newProxyInstance(
				conn.getClass().getClassLoader(), 
				conn.getClass().getInterfaces(), 
				new InvocationHandler() {//具体的代理策略:
					
					@Override
					public Object invoke(Object proxy, Method method, Object[] args)
							throws Throwable {
						//对close方法进行功能性的增强; 
						if("close".equals(method.getName())){
							//换回池子当中:
							pool.add(conn);
						}else{//不是close方法《 调用conn 的原来的方法:
							method.invoke(conn, args);//调用方法可能有返回值; 
						}
						
						return null;
					}
				}
				);
		
		
		return proxy;
	}

	@Override
	public PrintWriter getLogWriter() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void setLogWriter(PrintWriter out) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLoginTimeout(int seconds) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public int getLoginTimeout() throws SQLException {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public Logger getParentLogger() throws SQLFeatureNotSupportedException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public <T> T unwrap(Class<T> iface) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean isWrapperFor(Class<?> iface) throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}


	@Override
	public Connection getConnection(String username, String password)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

}

CGLIB 基于子类的动态代理:**

**
前提:被代理类的要求
1、不能是final的
2、必须是public的
3: 必须提供无参数的构造器:

实现步骤: 导入jar包:

比如普通的JavaBean就可能没有实现任何的接口。代理类是被代理类的子类。
被代理类:

package com.yidongxueyuan.proxycglib;

public class SpringBrother {
	
	public void sing(float money){
		System.out.println("给钱唱歌");
		
	}
	public void dance(float money){
		System.out.println("给钱跳舞");
		
	}
}

代理类:

package com.yidongxueyuan.proxycglib;

import java.lang.reflect.Method;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

public class SpringBrotherfProxy {
	//获得SpringBrother 对象的代理对象: 
	SpringBrother sb = new SpringBrother();//被代理的对象: 
	
	/*
	 *  参数: 
	 *  参数一: 被代理对象的class 类型: 
	 *  参数二: callBack : 回调函数:   
	 *        不直接使用callBack 这个接口, 使用的子接口 : MethodInterceptor
	 */
	public SpringBrother getProxy(){
		SpringBrother proxy =(SpringBrother) Enhancer.create(sb.getClass()), new MethodInterceptor() {
			
			/*
			 *  参数一: proxy 代理对象的引用: (不用)
			 *  参数二; method 被执行的方法: 
			 *  参数三: 方法当中的参数: 
			 *  参数四: 代理方法的应用:(不用)
			 */
			@Override
			public Object intercept(Object proxy, Method method, Object[] arg2,
					MethodProxy arg3) throws Throwable {
				//功能性的增强:
				method.invoke(sb, arg2);
				return null;
			}
		});
		
		return proxy;
	}
}

四、开源数据源的使用:(很重要,简单)

  开源数据源: DBCP C3P0 JNDI。 DBCP和C3P0都可以直接通过编码的形式配置数据源, 这样的实现方式是硬编码的方式,不利于日后的维护和扩展,所以不推荐直接编码的方式,而是采用配置文件的方式。 实现可配置,利于维护。  

1、DBCP:
Apache组织开发的。
DBCP:DataBase Connection Pool,对数据源的一种实现。
a、拷贝jar包: dbcp pool包,两个jar包
b、编写配置文件: 配置文件copy
c、使用即可: 编写工具类:

实现步骤一:
Copy jar 包: 两个: 一个是连接池子的jar包: 一个是dbcp的jar包:

实现的步骤二:
配置文件的准备: 配置文件是dbcpconfig.properties文件

#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=sorry

#<!-- 初始化连接 -->
initialSize=10

#最大连接数量
maxActive=50

#<!-- 最大空闲连接 -->
maxIdle=20

#<!-- 最小空闲连接 -->
minIdle=5

#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000


#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] 
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=utf8

#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true

#driver default 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=

#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, 

SERIALIZABLE
defaultTransactionIsolation=REPEATABLE_READ
  实现步骤三: 工具类的编写: 
   
/*
 * 使用DBCP数据源: 获得一个连接对象: 
 * getConnection(); //从池子当中获得了一个连接对象: 
 * 调用close方法  将conn  归还到池子当中: 
 */
public class DBCPUtils {

	public static  DataSource ds; 
	//读取外部的配置文件: 
	static{
		try {
			//获得类的加载器:
			ClassLoader loader = DBCPUtils.class.getClassLoader();
			//输入流: 
			InputStream in = loader.getResourceAsStream("dbcpconfig.properties");
			System.out.println(in);
			//将流当中的数据加载到Property集合当中: 
			Properties prop= new Properties(); 
			//in将集合填充:
			prop.load(in);
		
//			prop有内容: 
			ds = BasicDataSourceFactory.createDataSource(prop);
			
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
	// 获得一个数据源: 从池子当中获得链接: 
	public static Connection getConnection() throws SQLException{
		Connection conn = ds.getConnection();
		return conn; 
	}
	
	//提供一个数据源: 
	public DataSource getDataSource(){
		return ds; 
	}
	
	public static void main(String[] args) throws SQLException {
		Connection connection = getConnection();
		System.out.println(connection);
	}
}

2、C3P0:
开源数据源的实现。
(1)实现步骤: copy jar包:
(2)编写配置文件:
注意: A:必须放在src下。类的加载器默认从类的加载器当中读取配置文件。
B:配置文件的名称必须: c3p0-config.xml
(3)编写一个工具类: 获得链接对象: 
   
实现步骤一: copy jar包:
    
实现步骤二: 编写配置c3p0配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<default-config>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/day02</property>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="user">root</property>
		<property name="password">root</property>
		<property name="acquireIncrement">3</property>
		<property name="initialPoolSize">10</property>
		<property name="minPoolSize">2</property>
		<property name="maxPoolSize">10</property>	
	</default-config>
	<named-config name="oracle-config">
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="user">root</property>
		<property name="password">123</property>
		<property name="acquireIncrement">3</property>
		<property name="initialPoolSize">10</property>
		<property name="minPoolSize">2</property>
		<property name="maxPoolSize">10</property>
	</named-config>
</c3p0-config>

实现步骤三: 编写工具类: 获得链接池子当中的链接对象:

    public class C3P0Utils{
	//创建对象的时候,自动从类路径当中获得读取配置文件。 读取到的配置文件的: default-config标签当中的内容: 
	private static ComboPooledDataSource  ds = new ComboPooledDataSource();
//	private static ComboPooledDataSource  ds = new ComboPooledDataSource("day15");
	
	public static DataSource getDataSource(){
		return ds; 
	}
	//提供一个连接方法: 
	public static Connection getConnection(){
		try {
			return ds.getConnection();
		} catch (SQLException e) {
			throw new RuntimeException(e); 
		} 
	}
}

3、更接近实际开发:JNDI管理数据源
JNDI:Java Naming and Directory Interface。属于JavaEE技术之一,目的模仿window系统中的注册表。

a、在服务器中注册JNDI数据源
1、拷贝数据库的驱动到Tomcat\lib目录下
2、在web应用的META-INF目录下建立一个名称为context.xml的配置文件

3、获取JNDI容器中的资源

总结: JNDI使用:
(1)copy 数据库的驱动到tomcat的lib下。
(2)编写配置文件: 配置文件名称必须context.xml
编写的配置文件: 必须放在当前的上下文环境。
直接将配置文件放在WEB/INF下。
(3)编写一个类,从JNDI容器当中获得具体的实例:
编写的实体类,必须依赖服务器,直接运行主方法是不能获得数据源的。直接运行主方法没有依赖任何的服务器。

package com.yidongxueyuan.utils;

import java.sql.Connection;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

/*
 * 使用JNDI 容器 获得链接对象: 
 */
public class JNDIUtil {
	
	public static Connection getConnection() throws Exception{
		  Context initContext = new InitialContext();
//	      Context envContext  = (Context)initContext.lookup("java:/comp/env");//实例目录:不同的服务器不一样:  
//	      DataSource ds = (DataSource)envContext.lookup("jdbc/test");
		  
		  DataSource ds  = (DataSource)initContext.lookup("java:/comp/env/jdbc/test");
		  
	      Connection conn = ds.getConnection();
	      
	      return conn; 
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方-教育技术博主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值