【发布时间】:2016-11-09 12:12:27
【问题描述】:
我在 Neon Eclipse 中有企业应用解决方案,它封装了 EJB 和 Servlet 项目并部署到 Wildfly 10 服务器。
Servlet 调用 EJB 来访问 DB。
如果我将 JDBC 驱动程序放在 Servlet 项目的 WEB-INF 文件夹中,一切顺利,但如果我将代码移动到 EJB 并将驱动程序链接为外部 JAR(见截图),我会收到错误:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver from [Module "deployment.NeoflexBank.ear.Neoflex.jar:main" from Service Module Loader]
这是我用来访问数据库的代码:
public String test() {
String output = "";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (Exception e) {
e.printStackTrace();
}
String url="jdbc:mysql://localhost:3306/neoflex";
String username="root";
String password="";
String query="select * from clients";
Connection conn;
try {
conn = (Connection) DriverManager.getConnection(url, username, password);
Statement stmt = (Statement) conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
while(rs.next())
{
output += rs.getInt("id");
output += rs.getString("username");
output += rs.getString("birth_date");
output += rs.getString("name");
output += rs.getString("surename");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
return e.toString();
}
return output;
}
【问题讨论】:
-
是的,因为我将代码移动到EJB项目,它没有看到servlet项目的WEB-INF。但我解决了。我把驱动放在企业应用项目(NeoflexBank)的EarContent中。
-
这与问题无关,但由于一些硬编码的内置 SQL 语句(INSERT和更新)。考虑将所有内容移至准备好的语句或可调用的语句。顺便说一下,从性能的角度来看,它也更好。