开心一笑
爱神和月老
甲:“你知道西方国家闹离婚的为什么比中国的多吗?”
乙:“这还不简单,因为西方的爱神丘比特是个娃娃,而中国的是月下老人,经验当然丰富得多!”
提出问题
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简单介绍的内容。