我有一个如下所示的单例类,用于作为访问数据库连接
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()