java - 使用 JDBC 连接 JAVA 和 MySql

标签 java mysql jdbc connector

这是我尝试过的代码。但每次都会显示错误:无法创建与数据库服务器的连接。代码中的错误是什么?url语法是否正确?

import java.sql.*;
public class Second {
    public static void main(String[] args) {
        Connection con = null;
        try {
            String url = "jdbc:mysql://localhost:3306/sakila";
            String user = "root";
            String password = "1234";
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection(url, user, password); 
            System.out.println("Connection is established.");
            con.close();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
}

我已在此处发布了 StackTrace。我收到的空指针异常是什么?

Wed May 13 09:19:35 IST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.Util.getInstance(Util.java:387)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.SQLError.createSQLException(SQLError.java:917)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2332)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2085)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:795)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:400)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:327)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
    at JDBC.Second.main(Second.java:12)
Caused by: java.lang.NullPointerException
    at mysql.connector.java@5.1.38/com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:3005)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1916)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1845)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1215)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2255)
    at mysql.connector.java@5.1.38/com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2286)
    ... 14 more

最佳答案

您的连接网址应该是 jdbc:mysql://localhost:3306/sakila?autoReconnect=true&useSSL=false

关于java - 使用 JDBC 连接 JAVA 和 MySql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61765885/

相关文章:

java - 如何从请求Spring Boot转换dataTable

MySql : SUM/COUNT on three level of related tables

java.lang.unsupportedoperationexception 应用程序必须提供 JDBC 连接

连接到 Cloud SQL 的 java.lang.NullPointerException

Java:如何使用不同的 equals 定义执行列表操作?

java - 多列的 PrimeFaces DataExporter 到 XLS 无法正常工作

php - 日期之间的MySQL日期

mysql - jruby jdbcmysql 适配器不适用于 ssl?

java - 线程安全的多生产者问题

mysql - Rails 4 Active Record uniq 通过一列查询