Java tutorial
/** * Copyright The Apache Software Foundation * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with this * work for additional information regarding copyright ownership. The ASF * licenses this file to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package com.alibaba.wasp.jdbc; import com.alibaba.wasp.FConstants; import org.apache.commons.lang.NotImplementedException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.sql.Connection; import java.sql.DriverManager; import java.sql.DriverPropertyInfo; import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; import java.util.Properties; import java.util.logging.Logger; /** * JDBC<com.alibaba.wasp.jdbc.Driver>.Please use * code<Class.forName("com.alibaba.wasp.jdbc.Driver");> * */ public class Driver implements java.sql.Driver { private static Log log = LogFactory.getLog(Driver.class); private static final Driver INSTANCE = new Driver(); private static final String DEFAULT_URL = "jdbc:default:connection"; private static final ThreadLocal<Connection> DEFAULT_CONNECTION = new ThreadLocal<Connection>(); private static volatile boolean registered; static { load(); } /** * Open a database connection. This method should not be called by an * application. Instead, the method DriverManager.getConnection should be * used. * * @param url * the database URL * @param info * the connection properties * @return the new connection or null if the URL is not supported */ public Connection connect(String url, Properties info) throws SQLException { try { if (info == null) { info = new Properties(); } if (!acceptsURL(url)) { return null; } if (url.equals(DEFAULT_URL)) { return DEFAULT_CONNECTION.get(); } return new JdbcConnection(url, info); } catch (Exception e) { throw JdbcException.toSQLException(e); } } /** * Check if the driver understands this URL. This method should not be called * by an application. * * @param url * the database URL * @return if the driver understands the URL */ @Override public boolean acceptsURL(String url) { if (url != null) { if (url.startsWith(FConstants.START_URL)) { return true; } else if (url.equals(DEFAULT_URL)) { return DEFAULT_CONNECTION.get() != null; } } return false; } /** * Get the major version number of the driver. This method should not be * called by an application. * * @return the major version number */ @Override public int getMajorVersion() { return FConstants.VERSION_MAJOR; } /** * Get the minor version number of the driver. This method should not be * called by an application. * * @return the minor version number */ @Override public int getMinorVersion() { return FConstants.VERSION_MINOR; } /** * Get the list of supported properties. This method should not be called by * an application. * * @param url * the database URL * @param info * the connection properties * @return a zero length array */ @Override public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) { return new DriverPropertyInfo[0]; } /** * Check if this driver is compliant to the JDBC specification. This method * should not be called by an application. * * @return true */ @Override public boolean jdbcCompliant() { return true; } /** * INTERNAL */ public static synchronized Driver load() { try { if (!registered) { registered = true; DriverManager.registerDriver(INSTANCE); } } catch (SQLException e) { if (log.isErrorEnabled()) { log.error(e); } } return INSTANCE; } /** * INTERNAL */ public static synchronized void unload() { try { if (registered) { registered = false; DriverManager.deregisterDriver(INSTANCE); } } catch (SQLException e) { if (log.isErrorEnabled()) { log.error(e); } } } /** * INTERNAL */ public static void setDefaultConnection(Connection c) { DEFAULT_CONNECTION.set(c); } /** * INTERNAL */ public static void setThreadContextClassLoader(Thread thread) { // This is very likely to create a memory leak. try { thread.setContextClassLoader(Driver.class.getClassLoader()); } catch (Throwable t) { // ignore } } public Logger getParentLogger() throws SQLFeatureNotSupportedException { throw new NotImplementedException(); } }