jdbc连接数据库的困惑

1>public class DBmanager{
private finale static string classname="com.mysql.jdbc.Driver";
private finale static conStr="jdbc:microsoft:sqlserver://localhost:3306/test";
private finale static String dbUser="root";
private finale static String dbPass="root";
private Connection con;
private preparedStatement ps;
private Connection getConnection() throws Exception{
Class.forName(className);
con=DriverManager.getConnection(constr,dbUser,dbPass);
return con;
}
}
2>
public class DBmanager{
private static Connection con=null;
public static Connection getInstance()
{

    try {
        Class.forName("com.mysql.jdbc.Driver");
        con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test",
            "root", "root");
    } catch (Exception e) {

    }
    return con;
}

}
请问这两种jdbc连接数据库的方法哪个比较好?为什么好?请问还有什么好的写法不?

LZ提供的写法只是得到了Connection对象,数据库访问类应该提供访问数据库的全套功能,如连接、释放数据库,执行SQL语句,更加顾全的还需要实现事务管理。
当然,但从获取Conn对象这点来看,LZ第二种方法或许更节省资源,因为每次载入类时不会像第一种方法那样载入如此多的static字段。
以下提供一种数据库访问类,仅供参考:
[code="java"]public class JdbcUtil {
private final String driver = "com.mysql.jdbc.Driver";
private final String url="jdbc:mysql://localhost:3306/ehr?autoReconnect=true&useUnicode=true&characterEncoding=utf-8";
private final String user = "root";
private final String pwd = "ideal";
private Connection conn = null;
private Statement st = null;

public void openConn(){
    try{
        Class.forName(driver);
        conn = DriverManager.getConnection(url,user,pwd);
        conn.setAutoCommit(true);
    }catch(SQLException e){
        e.printStackTrace();
        System.out.println("数据库连接失败!");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}
public boolean executeUpdate(String sql)throws SQLException{ 
    try {
        /*判断必需的属性是否为空*/  
        if(conn==null || sql == null||sql.equals("")){   
            return true;   
        }
        st = conn.createStatement();
        int i = st.executeUpdate(sql); 
        System.out.println(i+"行受影响");
        return true;
    } catch (SQLException e) { 
        e.printStackTrace();
        System.out.println("更新失败!");
        return false;
    } 
} 

public ResultSet executeQuery(String sql){ 
    ResultSet rs = null;
    try { 
        st = conn.createStatement();
        rs = st.executeQuery(sql);
    } catch (SQLException e) { 
        e.printStackTrace(); 
        System.out.println("查询数据失败.未获得ResultSet!");
    }
    return rs;
} 

public void closeConn() { 
    try { 
        st.close(); 
        conn.close(); 
    } catch (Exception e) { 
        e.printStackTrace(); 
        System.out.println("关闭数据库连接失败!");
    } 
} 

}[/code]

其实这两种写法是一样,如果要选的话就第1种啦
第1种把字符串定义为变量,这样更好一点,其实差别不大

因为写成第二种,数据库的用户名密码就定死了,要修改就要改源文件了。一般的项目都可以支持几种数据库,用户名密码这些东西是放在XML配置文件里的,要修改就修改配置文件就OK了。所以一般在项目是用的是第一种,如果只是想测试下时候连接数据库成功,用第二种就完全OK了。