java - 我正在使用 JNDI 连接到 mysql 数据库,但在执行时最终会抛出异常

标签 java mysql mysql-workbench jndi

这些是我面临的异常(exception)

java.sql.SQLException:无法创建 PoolableConnectionFactory(不允许公钥检索)

由以下原因引起:java.sql.SQLNonTransientConnectionException:不允许公钥检索

这是 context.xml

<Context>

  <Resource name="jdbc/project" 
            auth="Container" type="javax.sql.DataSource"
               maxActive="25" maxIdle="5" maxWait="10000"
               username="Shubham" password="1234abc" 
               driverClassName="com.mysql.cj.jdbc.Driver"
               url="jdbc:mysql://127.0.0.1:3306/studyeasy_db?useSSL=false"/>

</Context>

这是servlet Demo2.java

package org.studyeasy;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

/**
 * Servlet implementation class Demo2
 */
@WebServlet("/Demo2")
public class Demo2 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Resource(name="jdbc/project")
    private DataSource dataSource;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        Connection connect = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            connect = dataSource.getConnection();
            String query = "Select * from users";
            stmt = connect.createStatement();

            rs = stmt.executeQuery(query);

            while(rs.next()) {
                out.print(rs.getString("email"));
            }

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}


java.sql.SQLException: Cannot create PoolableConnectionFactory (Public Key Retrieval is not allowed)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:669)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:544)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:753)
    at org.studyeasy.Demo.doGet(Demo.java:41)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1594)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)
    at org.apache.tomcat.dbcp.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:55)
    at org.apache.tomcat.dbcp.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:355)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:115)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:665)
    ... 27 more


我是初学者,请帮助我!

最佳答案

我很高兴您加入堆栈溢出。该错误与您的 Java 代码无关。错误代码显示:

java.sql.SQLException: Cannot create PoolableConnectionFactory (Public Key Retrieval is not allowed)

您所需要做的就是设置用户名和密码来连接到数据库。

关于java - 我正在使用 JNDI 连接到 mysql 数据库,但在执行时最终会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61015950/

相关文章:

java - 当我点击注册 btn 时,我的 android 应用程序崩溃了

java - 确定 Java 泛型的运行时类型

jquery - PHP JQuery 复选框 - 如果预先选中复选框,则在未选中时不会删除 'checked' 属性

mysql - 错误111,组函数使用无效

mysql - 带层的数据库产品表

mysql - 初学者 : Can't Order my WHERE Statements Properly with Subselect MIN?

java - 在字符串中使用 new 运算符创建两个对象有什么好处

java - 创建仅内容动态更改的 Wicket 页眉/页脚/内容布局

mysql - 计算出某个值在 mysql 数据库中存在了多长时间

mysql - 使用一个值作为另一个表的标题——这是不好的做法吗?