0

I'd like to preface: I am using the MySQL Java Connector v. 8.0.23, so an outdated connector is not the problem. It is added to the classpath of my project and is also added in the Maven dependencies.

I've removed the connection information for privacy's sake. This is on a TomCat server running MySQL 8.

Error

I receive the following exception every time I try to connect to my database (an RDS AWS database hosted online).

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:400)
    at com.mysql.jdbc.Util.getInstance(Util.java:383)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:958)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:937)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:872)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2326)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2079)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:794)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:400)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:270)
    at com.personal.personal_website.DatabaseConnect.getRemoteConnection(DatabaseConnect.java:24)
    at org.apache.jsp.courses_jsp._jspService(courses_jsp.java:122)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    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:52)
    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:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:544)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:698)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:353)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:616)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:831)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1629)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
    at com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:2999)
    at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1885)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1814)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1207)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2249)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2280)
    ... 42 more
23-Feb-2021 16:17:36.401 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [C:\Program Files\apache-tomcat-8.5.63\webapps\manager]
23-Feb-2021 16:17:36.465 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [C:\Program Files\apache-tomcat-8.5.63\webapps\manager] has finished in [62] ms

Maven Dependency

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>
        </dependency>

Connection Class

public class DatabaseConnect {
    Connection con = null;

    public Connection getRemoteConnection() {
        try {
            // Find driver
            Class.forName("com.mysql.jdbc.Driver");
            String dbName = "";
            String userName = "";
            String password = "";
            String hostname = "";
            String port = "3306";
            String jdbcUrl = "jdbc:mysql://" + hostname + ":" + port + "/" + dbName + "?user=" + userName + "&password=" + password;

            // Make Connection
            System.out.println("Getting remote connection with connection string.");
            con = DriverManager.getConnection(jdbcUrl);
            System.out.println("Remote connection successful.");
        } catch (ClassNotFoundException | SQLException e) { e.printStackTrace();}

        return con;
    }
}
EMcCrary
  • 39
  • 7
  • 1
    Does this answer your question? [MySQLNonTransientConnectionException Could not create connection to database server. Caused by: java.lang.NullPointerException](https://stackoverflow.com/questions/50382824/mysqlnontransientconnectionexception-could-not-create-connection-to-database-ser) – Dren Feb 23 '21 at 21:19
  • No, I prefaced my question with "an outdated connector is not the problem." – EMcCrary Feb 23 '21 at 21:21
  • Are all the strings supposed to be empty? – Thorbjørn Ravn Andersen Feb 23 '21 at 21:31
  • I only removed the content of the strings for privacy purposes. I said this in the question. – EMcCrary Feb 23 '21 at 21:37
  • I "think" the driver class name changed with mysql 8. See this link: https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-driver-name.html – Doyle B Feb 24 '21 at 03:46
  • Try adding useUnicode=true&characterEncoding=UTF-8 to connection url – Marcin Kunert Feb 24 '21 at 09:10

1 Answers1

0

Doyle in the comments managed to figure it out. The driver class name changed with MySQL 8.

Instead of

Class.forName("com.mysql.jdbc.Driver");

I used

Class.forName("com.mysql.cj.jdbc.Driver");

Source: https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-driver-name.html

EMcCrary
  • 39
  • 7