应以静态方式访问类型DBConnection的静态方法getDBConnection()



我有一个如下所示的单例类,用于作为访问数据库连接

public class DBConnection {
    private static volatile DBConnection instance;
    private static DataSource dataSource;
    private DBConnection(){ 
    }
    public static synchronized DBConnection getInstance() {
        if (instance == null) {
            instance = new DBConnection();
        }
        return instance;
    }
    static {
        try {
            dataSource = (DataSource) new InitialContext()
                    .lookup("java:comp/env/jdbc/MySQLDataSource");
        } catch (NamingException e) {
            e.printStackTrace();
            try {
                throw new Exception("'jndifordbconc' not found in JNDI", e);
            } catch (Exception e1) {
                logger.error("Error description", e);
            }
        }
    }
    public static Connection getDBConnection() {
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
            logger.error("Error description", e);
            return null;
        }
    }
}

当我试图以这种方式访问DBConnection时,

分离类别

我收到黄色警告

  public String fetchGlobalIndicesData(@QueryParam("region_name") String region_name )
    {
       Connection dbConnection = null;
        String selectsql = "";
        try
        {
            dbConnection = DBConnection.getInstance().getDBConnection();
            selectpstmt = dbConnection.prepareStatement(selectsql);
            selectpstmt.setString(1, region_name);
            selectRset = selectpstmt.executeQuery();
        }
        catch (Exception e)
        {
            logger.error("Error description",e);
        }
    }

Eclipse IDE给我一个黄色警告,上面写着

The static method getDBConnection() from the type DBConnection should be accessed in a static way

你能告诉我做这件事的正确方法是什么吗??

我将代码修改为

public static Connection getDBConnection() {
    try {
        return getInstance().dataSource.getConnection();
    } catch (SQLException e) {
        e.printStackTrace();
        logger.error("Error description", e);
        return null;
    }
}

因为它是静态的,所以应该直接在类上调用方法,而不是在类的实例上:

DBConnection.getDBConnection()

在实例上调用该方法是没有意义的,尽管这是可能的。

正如@Berger所提到的,您将该方法定义为static,因此您必须按照他所提到的那样调用它。

如果您不希望它是静态的,您可以通过从getDBConnection方法中删除static来修改代码,并将其调用为:

DBConnection.getInstance().getDBConnection()

上面的代码在fetchGlobalIndiceData方法中已经是正确的。

只是为了它:

public static Connection getDBConnection()

成为:

public Connection getDBConnection()

这样,getInstance将初始化DBConnection实例,并且初始化数据源的静态初始化器块应该被激发。然后,当您调用getDBConnection时,您的代码应该可以正常工作。

这是一种静态方法,您可以删除getDBConnection()签名的static关键字或使用DBConnection.getDBConnection()

最新更新