我正在尝试将JEE应用连接到MySQL数据库。关于此主题有很多文档和类似的问题,但是到目前为止,我发现的解决方案都没有一个可行的(尽管如此,我可能特别想念一个解决方案,所以随时提出)。
服务器名称为db
,数据库名称为joinmyparty
这是我要连接的Java代码:
public class MySqlConnection {
private static Connection conn;
public static Connection getConn() {
try {
Context initContext = new InitialContext() ;
Context envContext = (Context)initContext.lookup("java:/comp/env") ;
DataSource ds = (DataSource) envContext.lookup("jdbc/joinmyparty") ;
conn = ds.getConnection();
} catch (NamingException e) {
System.out.println("Cannot get connection: " + e);
} catch (SQLException e) {
System.out.println("Cannot get connection: " + e);
}
return conn;
}
每次调用DAO时,我都会使用getConn()
方法来打开连接,并在finally块中将其关闭。
我将此写到了/tomcat/conf/context.xml file
中:
<?xml version="1.0" encoding="UTF-8"?>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<Resource url="jdbc:mysql://db:3306/joinmyparty"
driverClassName="com.mysql.jdbc.Driver" password="mypassword"
username="myusername" maxWait="10000" maxIdle="30"
maxActive="100" type="javax.sql.DataSource" auth="Container"
name="jdbc/joinmyparty" validationQuery="select 1" testOnBorrow="true"/>
</Context>
我试图将mysql-connector .jar放入/tomcat/lib
或/WEB-INF/lib
中,并放入构建路径中。我还尝试了多种版本的连接器(一次只能连接一个),尤其是使连接器的版本与MySQL数据库相同。
当我调用需要连接数据库的servlet时,我的空白页具有POST()方法,错误5OO具有GET()方法。 这是日志错误(由于我不是英语母语人士,我尽力翻译了一下):
description : this server has encountered an internal error which prevents it from fulfilling your request
exception
java.lang.NullPointerException
com.picco.user.dao.UserDao.findByEmail(UserDao.java:40)
com.picco.user.servlet.Index.doGet(Index.java:56)
javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
这是相关代码的一部分(但正如我所说,所有使用DAO的代码都存在相同的问题)。
try {
UserDao udao = new UserDao();
User u = udao.findByEmail(myCookieVal);
SongDao sdao = new SongDao();
ArrayList<Song> list = sdao.getAllSongs(u.getId());
Random rd = new Random();
int count = udao.count();
request.setAttribute("currentSong", list.get(rd.nextInt(list.size())));
request.setAttribute("songList", list);
request.setAttribute("partyCount", count);
this.getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
} catch(SQLException e) {
e.printStackTrace();
} finally {
HsqlConnection.closeInstance();
}
如果我对问题的描述还不够,请随时询问我详细信息。
答案 0 :(得分:0)
也许问题是您在实例化设置为null的连接之前尝试获取资源User。
答案 1 :(得分:0)
MySQL JDBC JAR属于Tomcat /lib
文件夹。您希望Tomcat类加载器首先找到它。
您的DAO无法连接吗?我将其添加到构造函数中。