db.properties - 空指针异常

时间:2014-08-29 11:47:51

标签: java web-applications jdbc datasource tomcat6

我为相关问题尝试了很多可用的答案,但没有一个是成功的。

这是我的问题,

我有一个动态Web应用程序,它使用oracle数据库来检索数据。为了使它更好我使用db.properties配置文件并创建数据源,

这是dataFactory.class的代码:

public DataSource getDatasource() {
    Properties props = new Properties();
    FileInputStream fis = null;
    InputStream in = null;
    OracleDataSource oracleDS = null;
    try {
        fis = new FileInputStream("db.properties");
        props.load(fis);
        oracleDS = new OracleDataSource();
        oracleDS.setURL(props.getProperty("url"));
        oracleDS.setUser(props.getProperty("user"));
        oracleDS.setPassword(props.getProperty("password"));
    } catch (IOException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return oracleDS;
}

并建立一个我在EmployeeDao.class中使用它的连接,

 DataSource ds;
 EmpDatasourceFactory empDs = new EmpDatasourceFactory();
 Connection conn;

public boolean insertRecord(Employee emp) {

    boolean status = false;
    ds = empDs.getDatasource();


    try {
        conn = ds.getConnection(); //Getting the null point exception
    }
}

注意:请注意我已根据需要提供所有其他代码。

问题,当我制作一个java文件并制作一些方法并使用它来建立连接时,它运行正常,我的意思是当它作为一个Java应用程序运行时。

但是当使用employeeDao.java并使用apache tomcat服务器运行它时,它会给我一个错误。请帮忙。!!!

2 个答案:

答案 0 :(得分:1)

在@joop Eggen的帮助下,我能够修复此错误,最后我的方法看起来像

public static  DataSource geDataSource() throws ResourceResolverException{
    ResourceBundle props = ResourceBundle.getBundle("db");
    OracleDataSource oracleDS = null;
    try {
        oracleDS = new OracleDataSource();
        oracleDS.setURL(props.getString("url"));
        oracleDS.setUser(props.getString("user"));
        oracleDS.setPassword(props.getString("password"));
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return oracleDS;
}

我必须处理所有“ResourceResolverException”。之后它运作得很好。

快乐编码.. !!!并使它成为Java:)

答案 1 :(得分:0)

<。> .war(像.jar这样的zip文件)是部署Web应用程序的常用方法。在zip中,不能使用File来检索zip条目。

要走的路,就是从课程路径中读取“资源”。 ResourceBundle在这里是合适的。

ResourceBundle props = ResourceBundle.getBundle("db");
OracleDataSource oracleDS = null;
try {
    oracleDS = new OracleDataSource();
    oracleDS.setURL(props.getString("url"));
    oracleDS.setUser(props.getString("user"));
    oracleDS.setPassword(props.getString("password"));
} catch (ResourceNotFoundException e) {
    e.printStackTrace();
} catch (SQLException e) {
    e.printStackTrace();
}
return oracleDS;

其他做法是在Web容器中定义.war之外的此类应用程序资源。每个Java EE应用程序服务器稍有不同,但例如允许为不同的服务器使用不同的数据源。