Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 静态全局对象_Java_Field_Global - Fatal编程技术网

Java 静态全局对象

Java 静态全局对象,java,field,global,Java,Field,Global,我有一个静态方法的类 建立联系 该方法返回用于进一步JDBC操作的连接对象。是否有可能创建一个全局连接字段,并使用此方法的结果“return”?我想在我需要的任何地方使用这个领域 public class Connection { public static Connection makeConnection() throws IOException, SQLException { try { Class.forName

我有一个静态方法的类

建立联系

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

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;
        }    
    }
}
您可以这样做:

class Foo {

    public static Connection conn = bar();

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

这就是你想要的吗?

这是可能的,但是连接工厂比连接好。 但是,静态变量对于连接的生命周期控制不是一个好主意

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

这不是处理连接的方法。。。但它可能会让您了解如何解决类似的问题:

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

    private static Wombat theWombat= null;
}

可以在静态初始值设定项块中初始化静态变量:

class Foo {
   public static Connection conn;

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

你的意思是像
类Foo{static Connection conn=bar();static Connection bar(){…}}
?如果全局是指类的静态,那么是的。我必须指出,这是一个非常糟糕的设计,JDBC连接对象并不是以这种方式构建的。这很好,但编译器返回错误,因为未保护的异常符合conn声明。我是否遗漏了什么,或者这是死圈之王?如果您有
bar()
捕获异常并返回
null
或抛出运行时异常以停止程序,这将起作用。