博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现数据库源的几种方式和开源数据源的使用
阅读量:3906 次
发布时间:2019-05-23

本文共 67783 字,大约阅读时间需要 225 分钟。

----------------------------理解部分-----------------------------------------

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

二、编写数据源(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
> getTypeMap() throws SQLException { // TODO Auto-generated method stub return null; } @Override public void setTypeMap(Map
> 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 unwrap(Class
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
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 unwrap(Class
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.Driverurl=jdbc:mysql://localhost:3306/testusername=rootpassword=sorry#
initialSize=10#最大连接数量maxActive=50#
maxIdle=20#
minIdle=5#
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, SERIALIZABLEdefaultTransactionIsolation=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配置文件:

jdbc:mysql://localhost:3306/day02
com.mysql.jdbc.Driver
root
root
3
10
2
10
jdbc:mysql://localhost:3306/mydb1
com.mysql.jdbc.Driver
root
123
3
10
2
10

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

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; 	}}

转载地址:http://awqen.baihongyu.com/

你可能感兴趣的文章
setting up a new remote git repository
查看>>
tcpdump practice
查看>>
python signal handling
查看>>
signals linux
查看>>
Oracle查询优化
查看>>
Mysql服务器调优
查看>>
spring相关面试题
查看>>
spring事务处理
查看>>
MVC三层模型(struts+spring+hibernate)总结
查看>>
spring tx:advice 和 aop:config 配置事务
查看>>
Spring Insight 笔记 1 :Spring Insight 是什么?
查看>>
Upop总体设计
查看>>
Upagather服务器端文档
查看>>
java性能分析1
查看>>
java性能分析2
查看>>
JAVA基础:面向对象编程的几个原则
查看>>
java面向对象设计的六大原则
查看>>
java面向对象6大原则2
查看>>
java线程池学习
查看>>
Java线程:概念与原理
查看>>