java - 如何将 JEE 应用程序连接到 MySQL 数据库?

标签 java mysql jakarta-ee

我正在尝试将 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 block 中将其关闭。

我将其写入我的 /tomcat/conf/context.xml 文件:

<?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() 方法的空白页和带有 GET() 方法的错误 5OO。 这是日志错误(我尽力翻译它,因为我不是英语母语):

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();
        }

如果我没有描述足够的问题,请随时向我询问详细信息。

最佳答案

也许问题是您在实例化设置为 null 的连接之前尝试获取资源 User。

关于java - 如何将 JEE 应用程序连接到 MySQL 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55187200/

相关文章:

java - Hadoop 2.7.2 HA群集无法启动备用名称节点

php - 从 mysql 获取不同的查询

php 脚本行为怪异,即使记录不存在也会显示记录

java - 内存利用率

java - 为什么 JPA 对于 @ManyToOne 关系默认使用 FetchType EAGER

java - 如何在java中创建这些方法?

mysql - 自联表 SQL

java - struts2 中的paramsPrepareParamsStack 拦截器?

java - JAX-RS Web 应用程序中的 Apache CXF OAuthDataProvider

java - 当我创建事件时,实现 ApplicationListener 接口(interface)的类不会启动