首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中获取java.lang.ClassNotFoundException: java:comp/env/jdbc/oracleInstance?

问在java中获取java.lang.ClassNotFoundException: java:comp/env/jdbc/oracleInstance?
EN

Stack Overflow用户
提问于 2018-12-04 03:08:27
回答 1查看 145关注 0票数 0

由于某些原因,我无法连接到我的数据库,所以我收到了一个错误:java.lang.ClassNotFoundException: java:comp/env/jdbc/oracleInstance和我有一个DataUtility类,我可以毫无问题地连接到那里。但在我下面的方法中,从Class.forName开始是错误的开始。有人能帮我解决这个问题吗?谢谢!

下面是我的代码:

代码语言:javascript
复制
public void exportExcel() throws SQLException, Exception {

Class.forName("java:comp/env/jdbc/oracleInstance");
Connection connect = DriverManager.getConnection(
    "java:comp/env/jdbc/oracleInstance",
    "root",
    "root"
);


Statement statement = connect.createStatement();
ResultSet resultSet = statement.executeQuery("select * from myBean.va_v_vPay");
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet spreadsheet = workbook.createSheet("test db");

XSSFRow row = spreadsheet.createRow(1);
XSSFCell cell;
cell = row.createCell(1);
cell.setCellValue("CLASS");
cell = row.createCell(2);
cell.setCellValue("GRADE");


int i = 2;

while (resultSet.next()) {
    row = spreadsheet.createRow(i);
    cell = row.createCell(1);
    cell.setCellValue(resultSet.getInt("Class"));
    cell = row.createCell(2);
    cell.setCellValue(resultSet.getString("Grade"));

    i++;
}

FileOutputStream out = new FileOutputStream(new File("all_file.xls"));
workbook.write(out);
out.close();
System.out.println("all_file.xls written successfully");

}

DataUtility:

代码语言:javascript
复制
    @ManagedBean(name = "dataUtility")
@ApplicationScoped
public final class DataUtility {

    private final JdbcTemplate jdbcTemplate;

    public DataUtility() throws NamingException {
        this.jdbcTemplate = new JdbcTemplate(DataUtility.getDataSource());
    }

    private static DataSource getDataSource() throws NamingException {
        Context ctx = new InitialContext();
        DataSource ds;

        try {
            ds = (DataSource) ctx.lookup("java:comp/env/jdbc/oracleInstance");
        } catch (Exception e) {
            System.out.println("FATAL ERROR: " + e.toString());
            throw new NamingException(e.toString());
        }
        return ds;
    }

    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-12-04 03:19:03

字符串java:comp/env/jdbc/oracleInstance是一个JNDI名称。Class.forName需要Java类的完全限定名(假设是实现JDBC driver接口的类)。

如果您正在使用Tomcat或其他应用服务器,那么您不应该自己使用Class.forName。相反,可以将容器配置为提供一个DB连接池,您可以使用JNDI查找该连接池:

https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

如果你使用的是一个独立的Java应用程序,那么你就不能使用JNDI,你需要自己做驱动程序的查找和DB连接:

https://docs.oracle.com/javase/tutorial/jdbc/basics/index.html

看起来您也在使用Spring,它有自己的JDBC抽象和实用程序,可以帮助您获得数据库连接:

https://spring.io/guides/gs/relational-data-access/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53600289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档