Class.forName 㧠DB ã¢ã¯ã»ã¹ã§ããããã«ãªãçç±
Java ã®ç 修㧠DB(ã ãããMDBããª) ã«ã¢ã¯ã»ã¹ããããã°ã©ã ãä½ããã¨ã«ãªã£ãã¨ããè¬å¸«ã¯ã»ã¼ 100% ãJDBC Driver ã使ç¨ããããã«ã¯ Class.forName ã使ç¨ãã¾ããã¨è¨ãã¯ãããã ãåªæã®ãã¨ãã
ã§ãClass.forName ã® API ãè¦ã¦ã¿ãã
forName(String name, boolean initialize, ClassLoader loader)
æå®ãããã¯ã©ã¹ãã¼ãã使ã£ã¦ãæå®ãããæåååãæã¤ã¯ã©ã¹ã¾ãã¯ã¤ã³ã¿ãã§ã¼ã¹ã«é¢é£ä»ãããã Class ãªãã¸ã§ã¯ããè¿ãã¾ã
ããã¦çåãçã¾ããããã¯ã©ã¹ããã¼ãããã ãã§ãªãã§DBã«ã¢ã¯ã»ã¹ã§ããããã«ãªãã®ï¼ãã¨ã
è¬å¸«ã¯ãªãã§ãããã¯èª¬æããªããåãã£ã¦ãªãã£ã¦ãã¨ã¯ç¡ãã¨æããã©ãã¾ã åå¿è
ã ããè¦ãã¨ãã°ãããçãªæãã ããã
ãã©ãããã¯è¨ããã¦ãããï¼
説æãã¹ãã ï¼
ãããã§ä»ã«ãªã£ã¦ããããç解ã§ãããç¹ã«å¿
è¦ãªãã£ãã®ããããã©ããµã¨æ°ã«ãªã£ã¦èª¿ã¹ã¦ã¿ãã
ãã§ãããããäºï¼ééã£ã¦ããæ¥ããããããæ©ãæãã¦ãã ããï¼ã
åãã³ãã® JDBC Driver 㯠java.sql.Driver ãå®è£
ãã¦ããå¿
è¦ãããããã®å®è£
ã¯ã©ã¹ã¯ static initializer 㧠java.sql.DriverManager.registerDriver(java.sql.Driver) ã使ã£ã¦ç»é²ãã¦ããã
Class.forName -> static initializer -> DriverManager.registerDriver ã£ã¦æµãããã¨ã¯ DriverManager ãçµç±ãã¦å Driver ã«ã¢ã¯ã»ã¹ãã¦ä½¿ç¨ããã
ã¤ãã§ã«ããã¤ãã® JDBC Driver ã®ã½ã¼ã¹ã確èªãã¦ã¿ãã
sun
JDBC Driver ã®ç»é²
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
static initializer
public class JdbcOdbcDriver extends JdbcOdbcObject implements JdbcOdbcDriverInterface { //-------------------------------------------------------------------- // Static method to be executed when the class is loaded. //-------------------------------------------------------------------- static { JdbcOdbcTracer tracer1 = new JdbcOdbcTracer(); if (tracer1.isTracing ()) { tracer1.trace ("JdbcOdbcDriver class loaded"); } JdbcOdbcDriver driver = new JdbcOdbcDriver (); // Attempt to register the driver try { DriverManager.registerDriver (driver); } catch (SQLException ex) { if (tracer1.isTracing ()) { tracer1.trace ("Unable to register driver"); } } }
MySQL
JDBC Driver ã®ç»é²
Class.forName("com.mysql.jdbc.Driver");
static initializer
public class Driver extends NonRegisteringDriver implements java.sql.Driver { // ~ Static fields/initializers // --------------------------------------------- // // Register ourselves with the DriverManager // static { try { java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } }
PostgreSQL
JDBC Driver ã®ç»é²
Class.forName("org.postgresql.Driver");
static initializer
public class Driver implements java.sql.Driver { // make these public so they can be used in setLogLevel below public static final int DEBUG = 2; public static final int INFO = 1; private static final Logger logger = new Logger(); private static boolean logLevelSet = false; static { try { // moved the registerDriver from the constructor to here // because some clients call the driver themselves (I know, as // my early jdbc work did - and that was based on other examples). // Placing it here, means that the driver is registered once only. java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException e) { e.printStackTrace(); } }
SQLite
JDBC Driver ã®ç»é²
Class.forName("org.sqlite.JDBC");
static initializer
public class JDBC implements Driver { private static final String PREFIX = "jdbc:sqlite:"; static { try { DriverManager.registerDriver(new JDBC()); } catch (SQLException e) { e.printStackTrace(); } }
é·å¹´ã®çåãã¾ãä¸ã¤è§£ãããã