浏览 5602 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-26
今天试着自己写写JDBC连接数据库。 看到代码 …… Class.forName("org.gjt.mm.mysql.Driver"); conn = DriverManager.getConnection(url,username,password); …… 我在想孤零零的一句【Class.forName("org.gjt.mm.mysql.Driver");】到底做了什么,网友说:注册MySql驱动。可是自己习惯思维是,看到调用。这连引用都没有。它加载了谁,又调用了谁呢? 想不出来!“何不看看驱动源码”呢?对啊!理解解压【org.gjt.mm.mysql.Driver】 org\gjt\mm\mysql文件夹下就一个文件:类Driver package org.gjt.mm.mysql; import java.sql.SQLException; public class Driver extends com.mysql.jdbc.Driver { } 再去看看 com.mysql.jdbc.Driver package com.mysql.jdbc; import java.sql.DriverManager; import java.sql.SQLException; public class Driver extends NonRegisteringDriver implements java.sql.Driver { static { try { DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } } } 兜兜转转,最后调用的还是【DriverManager.registerDriver(new Driver());】 但源文件里的 public static synchronized void registerDriver(java.sql.Driver driver) throws SQLException { if (!initialized) { initialize(); } DriverInfo di = new DriverInfo(); di.driver = driver; di.driverClass = driver.getClass(); di.driverClassName = di.driverClass.getName(); // Not Required -- drivers.addElement(di); writeDrivers.addElement(di); println("registerDriver: " + di); /* update the read copy of drivers vector */ readDrivers = (java.util.Vector) writeDrivers.clone(); } 就不是十分理解了! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-02-02
Class.forName("org.gjt.mm.mysql.Driver"); 这句原意是完成类加载,在这里是用来注册JDBC驱动的。 在JDBC 4.0里已经不需要再写这句垃圾代码。可以直接使用JDBC驱动 |
|
返回顶楼 | |