/************第一种写法******************/
public class DaoUtil {
private static final String DRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String URL="jdbc:sqlserver://localhost:1433;databaseName=newsDB";
private static final String USERNAME="sa";
private static final String PASSWORD="root";
static
{
try{
//加载驱动
Class.forName(DRIVER);
}catch(Exception e){
}
}
public static Connection getConnection(){
try{
Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
return conn;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
}
/************第二种写法******************/
public class DaoUtil {
private static final String DRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String URL="jdbc:sqlserver://localhost:1433;databaseName=newsDB";
private static final String USERNAME="sa";
private static final String PASSWORD="root"; public static Connection getConnection(){
try{
Class.forName(DRIVER); Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
return conn;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
}
public class DaoUtil {
private static final String DRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String URL="jdbc:sqlserver://localhost:1433;databaseName=newsDB";
private static final String USERNAME="sa";
private static final String PASSWORD="root";
static
{
try{
//加载驱动
Class.forName(DRIVER);
}catch(Exception e){
}
}
public static Connection getConnection(){
try{
Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
return conn;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
}
/************第二种写法******************/
public class DaoUtil {
private static final String DRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String URL="jdbc:sqlserver://localhost:1433;databaseName=newsDB";
private static final String USERNAME="sa";
private static final String PASSWORD="root"; public static Connection getConnection(){
try{
Class.forName(DRIVER); Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
return conn;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
}
解决方案 »
- 求解决线程同步问题
- 权限设计问题
- 关于action跳转到另一个action后 属性传递的问题
- 根据WSDL文件生成java文件问题
- myeclipse5.1.0GA+eclipse3.2.1;开发webservice时,为什么不能生成wsdl
- jfreechart在Linux下的问题?
- 初学者向高手请教
- session bean里日期查询如何实现
- 求教 hibernate 执行普通sql的问题
- Spring boot 1.5.1.RELEASE 使用@Controller 注解 和@RequestMapping 出錯
- 想知道 flex 与 Java 结合 开发 技术现在成熟不成熟
- 如何用java代码在本地硬盘里生成一个html页面
而静态方法每次调用都会执行,那么用static关键字修饰他还有什么用呢(除了可以直接也用类名称调用比较方便以外),我一直没搞懂,请指点,
问题1:
看第一种写法,依照您说的,那么在多个用户前后调用这个类的方法时候,是不是除了第一个用户要调用static块代码,其他用户是不是不会再调用静态块了(直接用就是)?问题2:
看第二种写法,依照您说的,静态方法里面加载驱动,又获得连接,调用每次都会重复加载驱动又获得连接,并没有怎么提高程序的效率呀,对么?
看第一种写法,依照您说的,那么在多个用户前后调用这个类的方法时候,是不是除了第一个用户要调用static块代码,其他用户是不是不会再调用静态块了(直接用就是)?问题2:
看第二种写法,依照您说的,静态方法里面加载驱动,又获得连接,调用每次都会重复加载驱动又获得连接,并没有怎么提高程序的效率呀,对么?
第一种,静态程序块,是主动执行的,在该类加载到JVM后,就会执行这段代码,其他程序块是无法调用这段代码的。
第二种,是被动执行,当其他程序块调用该方法时,就会执行一次方法里面的代码。
对于性能孰优孰劣,就不用再明说了吧。
那我写的第一种方法 与那种用单列模式写的 把Class.forName(DRIVER)放在私有的构造方法里的做法相比,谁更好写呢?或者都一样呢?
我知道第一种方法要好了,不过还想问一下:我写的第一种方法 与那种用单列模式写的 把Class.forName(DRIVER)放在私有的构造方法里的做法相比,谁更好写呢?或者都一样呢?
class.forName会判断是否加载了,并不会需要重复加载,差别只是
驱动类在 DaoUtil.class 加载时被加载驱动类在 getCon 第一次调用时被加载推荐非 static 块方式而使用函数,是因为 static 块在异常的处理上非常局限。
并不能被调用者控制异常的处理行为,非常破坏整理设计结果,所以最好不要使用这种写法。
class.forName 最主要的功能是把驱动类在driverManager中注册,这个是jdbc规范,注册是使用static块,将driver的class对象注册到driverManager中。