2013-10-02 3 views
2

У меня возникла следующая проблема. Я использую свойства Java для чтения некоторой информации о файле, но когда я звоню prop.getProperty("var"), он возвращает null. У меня кончились идеи. Вот код, который у меня есть.Свойства getProperty return 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; 
    } 

Когда он пытается подключиться к БД, getProperty возвращается null, как он не найден. Любые идеи о том, что это может быть или что я делаю неправильно?

+3

Какое содержимое вашего файла свойств? – berry120

+0

Где находится файл вашей недвижимости? Это в классе? –

+0

В конструкторе не выбрасывается исключение? – DaveH

ответ

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(); 
    } 
} 
+0

Это сработало, я удалил свой конструктор и добавил код выше. Но правильно ли это сделать? выглядит как исправление. – elcharrua

+0

Ну, вы также можете сделать его объектом [Singleton] (https://en.wikipedia.org/wiki/Singleton_pattern), но я думаю, что все в порядке. –

3

У вас есть статическое поле (prop), но вы инициализируете его в конструкторе. Это означает, что если вы проконсультируетесь с вашим объектом prop перед тем, как построить какой-либо объект JConnection, поддержка не будет инициализирована.

Вы можете попробовать что-то вроде этого:

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(); 
     } 
    } 
} 
+0

О, извините, вы правы. Проблема заключается в содержании файла –

+0

@BlackSlash, я отредактировал свой комментарий, чтобы не создавать путаницу. Благодаря! –

+0

Итак, вы отредактировали это в основном то же самое, что я ответил раньше? –