返回空值的单例java类
我创建了一个返回DB连接对象的java类。但它在调用方方法处返回空值。当我在调试模式下运行代码时,它不会转到方法本身。我需要建议返回空值的单例java类,java,singleton,Java,Singleton,我创建了一个返回DB连接对象的java类。但它在调用方方法处返回空值。当我在调试模式下运行代码时,它不会转到方法本身。我需要建议 package com.cisco.installbase.hiveconnector; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Connection; public class CreateConnection { private stat
package com.cisco.installbase.hiveconnector;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
public class CreateConnection {
private static Connection instance = null;
static final String drivername = "org.apache.hive.jdbc.HiveDriver";
private CreateConnection() {
try {
Class.forName(drivername);
// instance =
// DriverManager.getConnection("jdbc:hive2://hddev-c01-edge-01:20000/",
// "phodisvc", "B1GD4T4dev");
// for hive 1 use this ------> instance =
// DriverManager.getConnection("thrift://hddev-c01-edge-02:9083");
instance = DriverManager.getConnection("thrift://hddev-c01-edge-02:9083");
System.out.println("get instance"+instance);
Constants.setFlag(true);
} catch (ClassNotFoundException e) {
e.printStackTrace();
Constants.setFlag(false);
} catch (SQLException e) {
e.printStackTrace();
Constants.setFlag(false);
}
}
public static Connection getInstance() {
Constants.setFlag(true);
return instance;
}
}
下面是调用getInstance()方法的代码
你对西格尔顿的实施是错误的。 你从不调用构造函数。这是实现单例的正确方法
public static Connection getInstance() {
if (instance==null){
instance = new CreateConnection();
}
Constants.setFlag(true);
return instance;
}
您从未调用构造函数
CreateConnection()
(此外,它无论如何都不应该是构造函数,而是返回连接的实用方法)。您的singleton模式实现是错误的,它不是真正的singleton模式,因为您有一个CreateConnection
类(您从未真正创建或关心过它的实例),但在getInstance()
中返回一个连接
对象。。。
public static Connection getInstance() {
if (instance==null){
instance = new CreateConnection();
}
Constants.setFlag(true);
return instance;
}
private static Connection instance = null;
static final String drivername = "org.apache.hive.jdbc.HiveDriver";
public static Connection getInstance() {
if(instance==null){
try {
Class.forName(drivername);
instance = DriverManager.getConnection("thrift://hddev-c01-edge-02:9083");
Constants.setFlag(true);
} catch (ClassNotFoundException e) {
e.printStackTrace();
Constants.setFlag(false);
} catch (SQLException e) {
e.printStackTrace();
Constants.setFlag(false);
}
}
return instance;
}