Я пытаюсь подключить приложение 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 .jar в /tomcat/lib
или в /WEB-INF/lib
и в путь сборки. Я также пробовал несколько версий соединителей (но только по одной за раз), особенно чтобы получить тот же уровень, что и в базе данных MySQL.
Когда я вызываю сервлет, который требует подключения к базе данных, у меня появляется пустая страница с методом 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();
}
Не стесняйтесь спрашивать меня о деталях, если я не описал достаточно проблем.