3

次の問題があります。ファイルの情報を読み取るためにJavaプロパティを使用していますが、呼び出すprop.getProperty("var")null. 私はアイデアを使い果たしました。これが私が持っているコードです。

static final Properties prop = new Properties();
public JConnection(){
    try{
        prop.load(new FileInputStream("db.properties"));
    }catch(Exception e){
        logger.info("file not found.");
        e.printStackTrace();
    }
}

「ファイルが見つかりません」というエラーメッセージは表示されません。

 public static Connection getConnection(String conType) {
    Connection conn;
    try {
        Class.forName("oracle.jdbc.driver.OracleDriver"); 
        if(model == "client"){
             conn = DriverManager.getConnection(prop.getProperty("url"),prop.getProperty("usr"),prop.getProperty("pass"));  
        }else{
            conn = DriverManager.getConnection(prop.getProperty("url1"),prop.getProperty("usr1"),prop.getProperty("pass1")); 
        }
    } catch (Exception ex) {            
        ex.printStackTrace();
        conn = null;
    }

DBに接続しようとすると、見つからないのでgetProperty戻ってきます。nullそれが何であるか、または私が間違っていることについてのアイデアはありますか?

4

2 に答える 2

6

prop別のワイルドな推測:変数とそこから読み取っているメソッドの両方が であることに気付きstaticました。クラスのインスタンスを作成せずに、これをある種の静的ユーティリティ クラスとして使用している可能性がありますか? この場合、コンストラクターを呼び出したり、プロパティ ファイルを実際にロードしたりすることはありません。代わりに、これを試すことができます:

static final Properties prop = new Properties();
static {
    try{
        prop.load(new FileInputStream("db.properties"));
    }catch(Exception e){
        logger.info("file not found.");
        e.printStackTrace();
    }
}
于 2013-10-02T12:47:14.447 に答える
3

静的フィールド (prop) がありますが、コンストラクターで初期化します。これは、JConnection のオブジェクトを作成する前に prop オブジェクトを参照すると、prop が初期化されないことを意味します。

次のようなことを試すことができます:

public class JConecction {
    static final Properties prop = new Properties();

    static {
        try {
            prop.load(new FileInputStream("db.properties"));
        } catch(Exception e) {
            logger.info("file not found.");
            e.printStackTrace();
        }
    }
}
于 2013-10-02T12:40:05.413 に答える