由于某些原因,我无法连接到我的数据库,所以我收到了一个错误:java.lang.ClassNotFoundException: java:comp/env/jdbc/oracleInstance和我有一个DataUtility类,我可以毫无问题地连接到那里。但在我下面的方法中,从Class.forName开始是错误的开始。有人能帮我解决这个问题吗?谢谢!
下面是我的代码:
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:
@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;
}
}发布于 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://stackoverflow.com/questions/53600289
复制相似问题