2012-01-12 99 views
0

我有類返回進一步JDBC操作Connection對象。是否有可能創建一個全局連接字段,並且此方法的結果爲「返回」?我希望在任何需要的地方使用此字段。靜態全局對象

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; 
     }  
    } 
} 
+0

你的意思就像'class Foo {static Connection conn = bar();靜態連接欄(){...}}'? – 2012-01-12 02:09:25

+0

如果按全球範圍來說,你的意思是指你的班級是靜態的,那麼是的。我必須指出,這是一個非常糟糕的設計,但JDBC連接對象不是以這種方式使用的。 – Perception 2012-01-12 02:11:25

回答

0

你可以這樣做:

class Foo { 

    public static Connection conn = bar(); 

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

這是你想要的嗎?

+0

這樣可以,但由於符合conn聲明的未引發異常,編譯器會返回錯誤。我錯過了什麼,或者這是死循環的一些國王? – 2012-01-12 02:31:34

+0

如果你有'bar()'捕獲異常並且返回'null'或者拋出一個運行異常來停止程序,這將會起作用。 – 2012-01-12 02:51:05

1

這是可能的,但連接工廠比連接好。 但是,靜態變量不是連接生命週期控制的好主意。

一個好的連接池會爲你處理很多問題,比如併發訪問,超時檢測,回收活動連接,自動清除死連接。

0

這是處理連接的方式......但它可能給你一個想法如何解決問題的相似類型:

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

    private static Wombat theWombat= null; 
} 
0

您可以在靜態初始化塊初始化靜態變量:

class Foo { 
    public static Connection conn; 

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