您好,欢迎访问一九零五行业门户网

Java之DriverManager简单介绍

开心一笑
爱神和月老
甲:“你知道西方国家闹离婚的为什么比中国的多吗?”
乙:“这还不简单,因为西方的爱神丘比特是个娃娃,而中国的是月下老人,经验当然丰富得多!”
提出问题
drivermanager类的简单学习???
解决问题
drivermanager在java.sql这个包里面,管理一组 jdbc 驱动程序的基本服务
[code]package com.evada.de; import java.sql.connection; import java.sql.driver; import java.sql.drivermanager; import java.util.enumeration; /** * 用静态工厂方法管理一个唯一的可重用的连接 * created by ay on 2016/5/1. */ public class connutils{ private connutils(){} private static connection con; //在静态代码块中创建与数据库的连接 static{ try{ //postgresql驱动名称 class.forname("org.postgresql.driver"); //数据库连接路径 string url = "jdbc:postgresql://127.0.0.1:5432/postgres"; //用户名和密码 con = drivermanager.getconnection(url, "postgres", "888888"); }catch(exception e){ throw new runtimeexception(e.getmessage(),e); } } //使用一个静态方法-静态工厂方法,返回connection实例 public static connection getcon(){ return con; } //main函数测试用 public static void main(string[] args) { //获取所有的数据库驱动 enumeration<driver> driverenum = drivermanager.getdrivers(); //打印出所有驱动信息 while(driverenum.hasmoreelements()){ system.out.println(driverenum.nextelement()); } } }
运行结果:
[code]org.mariadb.jdbc.driver@7cef4e59 com.alibaba.druid.proxy.druiddriver@3ada9e37 com.alibaba.druid.mock.mockdriver@4ec6a292 org.postgresql.driver@71c7db30
解释,因为我们的项目包里有如下图片的数据库驱动,所以会打印下面信息
这两者的区别:
drivermanager.registerdriver(new driver()); class.forname(“com.mysql.jdbc.driver”);
org.postgresql.driver类源码如下,可以看出postgresql是通过单例形式,new一个驱动driver,也就是说在连接数据库是只new了一个driver
[code]static { sharedtimer = new sharedtimer(logger); try { //注册 register(); } catch (sqlexception var1) { throw new exceptionininitializererror(var1); } protocols = new string[]{"jdbc", "postgresql"}; } public static void register() throws sqlexception { if(isregistered()) { throw new illegalstateexception("driver is already registered......); } else { driver registereddriver = new driver(); drivermanager.registerdriver(registereddriver); registereddriver = registereddriver; } }
再来看看drivermanager的源码,它会把driver包装到driverinfo中,
[code]// public static synchronized void registerdriver(java.sql.driver driver, driveraction da) throws sqlexception { /* register the driver if it has not already been added to our list */ if(driver != null) { //将驱动包装到driverinfo中 registereddrivers.addifabsent(new driverinfo(driver, da)); } else { // this is for compatibility with the original drivermanager throw new nullpointerexception(); } println("registerdriver: " + driver); }
class.forname(“com.mysql.jdbc.driver”);
结论:drivermanager.registerdriver(new driver()); 多new一个driver浪费;而class.forname(“com.mysql.jdbc.driver”); 单例形式,更推荐……
以上就是java之drivermanager简单介绍的内容。
其它类似信息

推荐信息