社区
Java EE
帖子详情
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
打赏
收藏
JDBC:DriverManager.registerDriver(new com.mysql.jdbc.Driver()););
DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 在java中用这种方式注册驱动,程序出错,有包 用Class.forName("com.mysql.jdbc.Driver")这个就没有错
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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()方法的参数有点让人想不太通。。。。恭请楼主按照原始的套路。
火龙果被占用了
2010-06-02
打赏
举报
回复
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
打赏
举报
回复
按理说效果一样啊,什么错误?发来看看。
JDBC
连接各种数据代码.doc
或
D
river
Manager
.re
gis
ter
D
river
(
new
com
.
mysql
.
jdbc
.
D
river
()); con =
D
river
Manager
.getConnection( "
jdbc
:
mysql
://localhost:3306/test2","root","root"); 连接oracle classes12.jar Class.forName( ...
java _连接_oracle
mysql
的jar包
D
river
Manager
.re
gis
ter
D
river
(
com
.
mysql
.
jdbc
.
D
river
); 会造成
D
river
Manager
中产生两个一样的驱动,并会对具体的驱动类产生依赖。 System.setProperty(“
jdbc
.
d
river
s”, “
d
river
1:
d
river
2”); 虽然不会对具体的...
java注册
mysql
驱动_Java的
jdbc
中
D
river
Manager
.re
gis
ter
D
river
(
d
river
); //注册驱动 有没有必要写的思考...
加载数据库驱动的时候,有如下部分代码:1 //1) 注册驱动程序2 //给java.sql.
D
river
接口的引用赋值
com
.
mysql
.
jdbc
.
D
river
实现类对象3
D
river
d
river
=
new
com
.
mysql
.
jdbc
....4
D
river
Manager
.re
gis
ter
D
river
(d...
D
river
Manager
.re
gis
ter
D
river
(
new
com
.
mysql
.
jdbc
.
D
river
())为什么
D
river
会创建两次
在学习
JDBC
的时候,通常有...
D
river
Manager
.re
gis
ter
D
river
(
new
D
river
()); Class.forName(“
com
.
mysql
.
jdbc
.
D
river
”); 那么这两种方式有什么异同呢?首先我们到
D
river
Manager
中去看一下, Java代码 public static ...
D
river
Manager
.re
gis
ter
D
river
(
new
D
river
());与Class.forName(“
com
.
mysql
.
jdbc
.
D
river
”);的区别
org.postgresql.
D
river
类源码如下,可以看出postgresql是通过单例形式,
new
一个驱动
D
river
,也就是说在连接数据库是只
new
了一个
D
river
static { sharedTimer =
new
SharedTimer(logger); try { //注册 re
gis
ter...
Java EE
67,513
社区成员
225,879
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章