JDBC:DriverManager.registerDriver(new com.mysql.jdbc.Driver()););

jackaudrey 2010-06-01 11:32:00
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
在java中用这种方式注册驱动,程序出错,有包
用Class.forName("com.mysql.jdbc.Driver")这个就没有错
...全文
589 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinj101926 2012-06-11
  • 打赏
  • 举报
回复
DriverManager 类包含一列 Driver 类,它们已通过调用方法 DriverManager.registerDriver 对自己进行了注册。所有 Driver 类都必须包含有一个静态部分。它创建该类的实例,然后在加载该实例时 DriverManager 类进行注册。这样,用户正常情况下将不会直接调用 DriverManager.registerDriver;而是在加载驱动程序时由驱动程序自动调用。
niekaipaopao 2010-06-02
  • 打赏
  • 举报
回复

一直用的都是String url="com.mysql.jdbc.Driver"; class.forName(url);的方式注册驱动。
原理是运动reflecting(反射)机制把引用名为com.mysql.jdbc.Driver的Driver对象的构造信息写入堆中的方法区。而且会调用Driver的无参构造方法在完成实例化。。
而new com.mysql.jdbc.Driver()通过new 一个对象的引用来当做registerDriver()方法的参数有点让人想不太通。。。。恭请楼主按照原始的套路。
  • 打赏
  • 举报
回复
Class.forName("com.mysql.jdbc.Driver")

这句话表示加载驱动。至于为什么这样会加载驱动呢?因为 JDBC 规范要求在 Driver 实现类的静态块中使用 DriverManager.registerDriver 方法把自己注册给驱动管理器。

根据 Java 类加载的规定,在类加载时除了会初始化类的信息之外,还会初始化所有 static 的东西,比如静态块、静态成员、静态方法,以及静态内部类。

DriverManager.registerDriver 方法不是给开发人员使用的,这是给 JDBC 驱动厂商用的。
licip 2010-06-02
  • 打赏
  • 举报
回复
学习了。
kitajima-- 2010-06-02
  • 打赏
  • 举报
回复
“在加载某一 Driver 类时,它应该创建自己的实例并向 DriverManager 注册该实例。这意味着用户可以通过调用以下程序加载和注册一个驱动程序”
那如何才能自动注册呢,有一点需要注意的就是Class.forName就可以注册,只能将注册信息添加到静态代码中,所有Driver代码的实现类中都采用了
static {
try {
DriverManager.registerDriver(new ProxoolDriver());
} catch (SQLException e) {
System.out.println(e.toString());
}
}
这种方式进行注册,这样在Class.forName的时候就会执行上面的代码,也就想系统注册驱动程序,注册驱动程序就是他会组装DriverInfo 后缓存到DriverManager中,便于后面进行处理
izard999 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bao110908 的回复:]
Class.forName("com.mysql.jdbc.Driver")

这句话表示加载驱动。至于为什么这样会加载驱动呢?因为 JDBC 规范要求在 Driver 实现类的静态块中使用 DriverManager.registerDriver 方法把自己注册给驱动管理器。

根据 Java 类加载的规定,在类加载时除了会初始化类的信息之外,还会初始化所有 static 的东西,比如静……
[/Quote]
顶火龙果.!
jackaudrey 2010-06-02
  • 打赏
  • 举报
回复
确实,Driver.registerDriver(new com.mysql.jdbc.Driver())这种方法会导致程序两次注册驱动,
我用这种方式的时候,一写完就出错,错误时找不到这个类,
用Class.forName("com.mysql.jdbc.Driver")是时候,程序都可以运行起来,证明驱动有效,
是不是可能在其它的地方存在错误
lq282514781 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bao110908 的回复:]

Class.forName("com.mysql.jdbc.Driver")

这句话表示加载驱动。至于为什么这样会加载驱动呢?因为 JDBC 规范要求在 Driver 实现类的静态块中使用 DriverManager.registerDriver 方法把自己注册给驱动管理器。

根据 Java 类加载的规定,在类加载时除了会初始化类的信息之外,还会初始化所有 static 的东西,比如……
[/Quote]正解
lizhongyi188 2010-06-02
  • 打赏
  • 举报
回复
上面的方法其实也可以的:
DriverManager.registerDriver(new com.mysql.jdbc.Drive());

Connection conn=DriverManager.getConnection(url,user,pwd);


楼上的你们都说错了吧! 这种方式是可以的,不信自己试试去!
ladybirds2008 2010-06-02
  • 打赏
  • 举报
回复
你们厉害。。。。
临远 2010-06-02
  • 打赏
  • 举报
回复
按理说效果一样啊,什么错误?发来看看。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧