静态全局对象

时间:2012-01-12 02:07:04

标签: java field global

我上课时有一个静态方法

  

的makeConnection

该方法返回Connection对象以进行进一步的JDBC操作。是否有可能创建一个全局连接字段,此方法的结果是“返回”?我想在任何需要的地方使用这个字段。

public class Connection 
{
    public static Connection makeConnection() throws IOException, SQLException
    {
        try 
        {
            Class.forName("org.postgresql.Driver");

            Properties props = new Properties();
            FileInputStream in = new FileInputStream("dataBase.properties");
            props.load(in);
            in.close();

            String drivers = props.getProperty("jdbc.drivers");
            if(drivers != null) System.setProperty("jdbc.drivers", drivers);
            String url = props.getProperty("jdbc.url");
            String username = props.getProperty("jdbc.username");
            String password = props.getProperty("jdbc.password");

            return DriverManager.getConnection(url, username,password);
        }
        catch (ClassNotFoundException e) 
        {
        return null;
    }
        catch(IOException e)
        {
            return null;
        }  
        catch(SQLException e)
        {
            return null;
        }    
    }
}

4 个答案:

答案 0 :(得分:1)

有可能,但连接工厂比连接更好。 但是,静态变量不是连接生命周期控制的好主意。

良好的连接池会为您解决许多问题,例如并发访问,超时检测,回收活动连接,自动清除死连接。

答案 1 :(得分:0)

你可以这样做:

class Foo {

    public static Connection conn = bar();

    private static Connection bar() {
        ...
    }
}

这就是你想要的吗?

答案 2 :(得分:0)

处理连接的方式......但它可能会让您知道如何解决类似的问题:

public class Wombat
{
    public static Wombat getWombat () 
    {
      if (theWombat == null)
        theWombat = new Wombat ();
      return theWombat;
    }

    private static Wombat theWombat= null;
}

答案 3 :(得分:0)

您可以在静态初始化程序块中初始化静态变量:

class Foo {
   public static Connection conn;

   static {
      try {
         conn = makeConnection();
      } catch(...) {
         ...
      }
   }
}