由于某种原因我无法连接到数据库,因此出现错误: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;
}
}
答案 0 :(得分:2)
字符串java:comp/env/jdbc/oracleInstance
是JNDI名称。 Class.forName
需要Java类的全限定名称(大概是实现JDBC驱动程序接口的类)。
如果您使用的是Tomcat或其他应用程序服务器,则无需自己使用Class.forName
。相反,可以将容器配置为提供一个数据库连接池,您可以使用JNDI查找该数据库连接池:
https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html
如果您使用的是独立Java应用程序,则无法使用JNDI,并且需要自己进行驱动程序外观和数据库连接:
https://docs.oracle.com/javase/tutorial/jdbc/basics/index.html
看起来您也正在使用Spring,它具有自己的JDBC抽象和实用程序,可以帮助您建立数据库连接: