日期:2014-05-20  浏览次数:20744 次

jdbc的小问疑惑
我今天突然发现,不进行任何驱动程序注册的时候,打印
DriverManager.getDrivers()竟然有输出。。值为
sun.jdbc.odbc.JdbcOdbcDriver@3aa450bb

这是为什么?

难道是myeclipse干得?

------解决方案--------------------
探讨
我今天突然发现,不进行任何驱动程序注册的时候,打印
DriverManager.getDrivers()竟然有输出。。值为
sun.jdbc.odbc.JdbcOdbcDriver@3aa450bb

这是为什么?

难道是myeclipse干得?

------解决方案--------------------
专门测了下 我这边显示的是java.util.Vector$1@a62fc3 
这个正好跟源码里面的java.util.Vector<Driver> result = new java.util.Vector<Driver>()吻合

------解决方案--------------------
默认的这个应该是JDBC-ODBC桥接的驱动程序,如果你配置ODBC源,使用ODBC桥接的话 可以不用显式加载sun.jdbc.odbc.JdbcOdbcDriver 这个驱动
但是如果你用纯JDBC连接其他数据库,应该还是要执行Class.forName等的一般过程
------解决方案--------------------
貌似符合逻辑,默认提供odbc的jdbc驱动
至于是不是默认就有可以看看sun.jdbc.odbc.JdbcOdbcDriver的实现是不是默认就被jvm加载了
是不是在jre就提供了
------解决方案--------------------
DriverManager.loadInitialDrivers() {}
这个方法会去加载sun.jdbc.odbc.JdbcOdbcDriver

这个方法在调用getConnection()时会仅且加载一次