Java连接MySQL数据库

引言:

最近在复习javaweb相关内容,用到了数据库相关知识。

过程中,遇到了一些问题,防止日后忘记,在这里记录一下,有需要的小伙伴也可以作为参考。
 


问题描述:

在跑通代码时,遇到以下错误。Could not create connection to database server.

Exception in thread "main" 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:78)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
    at com.mysql.jdbc.Util.getInstance(Util.java:387)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:862)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2331)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2084)
    at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:795)
    at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:44)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:78)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:400)
    at 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 lxb1.jdbc_test.main(jdbc_test.java:13)
Caused by: java.lang.NullPointerException: Cannot invoke "java.util.Map.get(Object)" because "this.serverVariables" is null
    at com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:3004)
    at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1908)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1837)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1207)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2254)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2285)
    ... 14 more

原因分析:

在检查SQL代码无误后,发现是因为MySQL版本(我的是8.0.17)和数据库驱动版本不符合造成。


解决方案:

在网上查了一些资料,发现有些写的不够细致,所以在这里详细记录下。

---------------------------------------------------------------------------------------------------

1、到官网下载和自己MySQL版本一致的驱动。

下载网址:https://downloads.mysql.com/archives/c-j/(8.0.17)

如何知道自己的MySQL版本呢------------

在Dos或者Navicat中输入    select version() from dual;

 2、傻瓜式安装得到如下:

Java连接MySQL数据库_第1张图片

 3、将jar文件导入到项目路径中

       在工程目录下新建一个文件夹,将jar文件复制粘贴进去。

Java连接MySQL数据库_第2张图片

  右键jar文件,点击Add As Library

Java连接MySQL数据库_第3张图片

 4、测试配置是否成功

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class jdbc_test {
    public static void main(String[] args) throws Exception{
        //2.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //3.获取数据库连接对象
        Connection conn = DriverManager.getConnection("jdbc:mysql://主机名:端口号(默认3306)/数据库名称?serverTimezone=UTC", "用户名", "密码");
        //4.定义sql语句
        String sql = "sql语句";
        //5.获取执行sql的对象 Statement
        Statement stmt = conn.createStatement();
        //6.执行sql
        int count = stmt.executeUpdate(sql);
        //7.处理结果
        System.out.println(count);
        //8.释放资源
        stmt.close();
        conn.close();
    }

}

测试结果为1,测试成功。

Java连接MySQL数据库_第4张图片

 

---------------------------------------------------------------------------------------------------

注意:

1、注册驱动这句代码可以省略,因为驱动中的服务文件已经默认配置好了。(8.0版本之前是com.mysql.jdbc.Driver)

Java连接MySQL数据库_第5张图片

 2、在获取数据库连接对象时,需要在数据库名称的最后加上时间,否则会报错。

?serverTimezone=UTC  

 

 

你可能感兴趣的:(Java,MySQL,java,mysql,idea)