我有一个单例类,如下所示,用于访问数据库连接
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时
SeperateClass
我在这里收到黄色警告
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;
}
}
答案 0 :(得分:2)
因为它是静态的,所以你应该直接在类上调用方法,而不是在类的实例上调用:
DBConnection.getDBConnection()
虽然有可能,但在实例上调用方法是没有意义的。
答案 1 :(得分:1)
正如@Berger所提到的,你将方法定义为静态,所以你必须像他提到的那样调用它。
如果您不希望它是静态的,您可以通过从getDBConnection方法中删除静态来修改代码并将其命名为:
DBConnection.getInstance().getDBConnection()
上面的代码在fetchGlobalIndicesData方法中已经正确。
只是为了它:
public static Connection getDBConnection()
变为:
public Connection getDBConnection()
这样,getInstance将初始化一个DBConnection实例,并且应该触发用于初始化数据源的静态初始化程序块。然后当你调用getDBConnection时,你的代码应该可以正常工作。
答案 2 :(得分:0)
这是一种静态方法,您可以删除getDBConnection()
签名的静态关键字或使用DBConnection.getDBConnection()