package com;import java.sql.*;public class Demo{
private Connection conn;
static{
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");    
}
catch (SQLException ex) {
ex.printStackTrace();
}
}

public Connection getConnection(){
try {
if(conn == null || conn.isClosed()){
conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databaseName=pubs","sa","");
}    
}
catch (SQLException ex) {
ex.printStackTrace();
}
finally {
return conn;
}
}

public void closeConnection(Connection conn){
if(conn != null && !conn.isClosed()){
try {
     conn.close();
}
catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}上面这段是我自己经常用的,但是今天别人说这种写法不好,不要放在静态块里面,浪费资源,但是我想着只加载一次,总比用获得一次连接就加载一次要好吧???下面是他的写法,到底哪种比效好呢?前辈们帮我看看。。谢谢咯。。package com;import java.sql.*;public class Demo{
public Connection getConnection(){
Connection conn = null;
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");//每次获得连接不是都要加载一次类吗?这样不耗资源?
conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databaseName=pubs","sa","");
}
catch (Exception ex) {
ex.printStackTrace();
}
finally {
return conn;
}
}

public void closeConnection(Connection conn){
if(conn != null){
try {
     conn.close();
}
catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【coolhty】截止到2008-07-24 20:08:38的历史汇总数据(不包括此帖):
    发帖的总数量:72                       发帖的总分数:1735                     每贴平均分数:24                       
    回帖的总数量:147                      得分贴总数量:37                       回帖的得分率:25%                      
    结贴的总数量:72                       结贴的总分数:1735                     
    无满意结贴数:2                        无满意结贴分:40                       
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:2.78  %               无满意结分率:2.31  %                  
    敬礼!
      

  2.   

    其实两种写法都可以,第二种写法,虽然调用了forname,但是程序会检测,如果加载了驱动的,不会再次加载了,所以连续调用没有关系。
      

  3.   

    其实Class.forName()就是执行
    java.sql.DriverManager.registerDriver(new Driver());
    而且这句代码是在Driver类的static block里面,和你方案1的Class.forName()位置一样,所以只会执行一次我觉得这两种方案还是1好点,不过差别不大