package org.wdj.db.search;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class SearchDB {
 
private static Connection con = null;
public SearchDB(String dbClassName) {
try {
Class.forName(dbClassName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static synchronized  Connection getConnection(String dbUrl,String dbUserName,String dbUserPass){
if(con==null){
try {
con=DriverManager.getConnection(dbUrl,dbUserName,dbUserPass);
} catch (SQLException e) {
e.printStackTrace();
}
}
return con;
}
 
}

解决方案 »

  1.   

    是吧,不过楼主有没有想过SearchDB的构造方法在什么时候调用来进行驱动的加载呢?
      

  2.   

    public SearchDB(String dbClassName) 
    ================================
    有public的构造器,怎么肯能是单态?只不过是提供了一个获取数据库连接的静态方法而已
      

  3.   

    乍一看,算是个单态。不过有点别扭的就是那个构造方法,而且还是个有参的构造方法。
    用起来就会出现类似于下面的用法:
    ...
    SearchDB loSD = new SearchDB("×××");
    SearchDB.getConnection(dbUrl,dbUserName,dbUserPass);
    ...这样就不伦不类了
      

  4.   

    public 的构造器,这点就知道不是单态模式了。
      

  5.   

    不管是不是单件
    代码是不严格的甚至错误的
    数据库链接connection是不适合用单件或缓存的
    上一个用户开了个connection开始事务结果异常中断了还忘关connection了(你这里还必须设置connection=null)那么下一个用户还是用这个链接。
      

  6.   

    力争成为中国最大的架构师群联盟,架构师1群:43545919已满,2群:59048426的招募也近尾声,现3群:17303696正式开放,各群内容基本相同,高手也经过群主进行了调整,希望大家不必重复加入!培训经过筛选才会进行,请大家不必着急!!!已经上传的顶级软件产品的架构分析,本群资料仅供研究学习,不得商用!!!
    google 、
    eBay、
    Youtube、
    淘宝等
    ......
    技术文章包括:
    《自己动手写操作系统》
    《搜索引擎-原理、技术与系统》
    《企业应用架构模式》
    ......
    重要的RUP实例
    设计模式精解
    ......
    资料陆续上传中
      

  7.   

    不能单态.
    因为你的构造函数没有 私有化, 也就意味这 
    外部可以 new 出这个类的实例 . 那没 就可以通过这个实例调用你的.
    getConnection 方法 .所以就单不了态了。
      

  8.   

    有PUBLIC 构造构造函数,就一定不是单例吗,不见得吧,难道我用个静态变量来控制实例个数,不可以吗!?