關於jdk11.0.5和數據庫Mysql8.0的連接出現的問題和連接方法,我做了一下整理(項目是Javaweb項目用的是maven配置外包)

先說錯誤和出現的問題再說連接的方法

首先咱們的數據庫是Mysql的,這個應該是你們下載好了的,然後jdk也是下載好了的,我用的軟件是IDEA,看一下是不是軟件不是我說的這兩種,如果不是就不用往下看了,開個玩笑,其實也可以用我會介紹別的版本的區別。
數據庫Mysql8.0
這是項目裏看的jdk版本
藉助項目來說,這個項目首先是maven的配置外包驅動,不是maven的項目的,可以百度搜一下你們的數據庫連接驅動的jar包(一般報名叫),導入項目中,可以問一下老師,或百度都有看圖。數據庫連接的jar包
然後我們說maven的數據庫連接驅動的導入方法,找到maven的配置文件,然後如圖,(這裏回答一下上面對於版本的問題,數據庫是8.0就用這個代碼,不是8.0就百度一下數據庫8.0的連接驅動maven配置代碼配置代碼就好,這一步很簡單):
在這裏插入圖片描述
代碼粘貼進去之後有一個下載時間要等待,然後下載完了就是這樣!
在這裏插入圖片描述
接下來會迎來第一個錯,如果你的數據庫連接的驅動在maven中配置的和數據庫不合適就會包這個錯

"D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=57172:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\權限管理系統\target\classes;D:\Alibabayunku\mysql\mysql-connector-java\5.0.2\mysql-connector-java-5.0.2.jar com.pm.util.DbUtil
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:315)
	at com.pm.util.DbUtil.main(DbUtil.java:33)

在這裏插入圖片描述
所以要是報的這個錯就是應該是上面說的原因,接下來我們進入下一個錯誤
項目中呢要有一個對這個數據庫配置文件進行操作的類,其中有一句加載數據庫驅動的代碼容易寫錯

 Class.forName("com.mysql.cj.jdbc.Driver");//這句話容易寫成Mysql5.3等之前的版本的,這裏咱們8.0就是這麼寫

這是報錯信息

"D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=57535:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\權限管理系統\target\classes;D:\Alibabayunku\mysql\mysql-connector-java\8.0.11\mysql-connector-java-8.0.11.jar;D:\Alibabayunku\com\google\protobuf\protobuf-java\2.6.0\protobuf-java-2.6.0.jar com.pm.util.DbUtil
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

進程已結束,退出代碼 0

看圖:在這裏插入圖片描述
如果這是是對的,還報錯就要看是不是下面的錯誤了,先看錯誤代碼

"D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=57693:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\權限管理系統\target\classes;D:\Alibabayunku\mysql\mysql-connector-java\8.0.11\mysql-connector-java-8.0.11.jar;D:\Alibabayunku\com\google\protobuf\protobuf-java\2.6.0\protobuf-java-2.6.0.jar com.pm.util.DbUtil
Fri Mar 27 20:14:28 CST 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.
java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:87)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:61)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:71)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862)
	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
	at com.pm.util.DbUtil.main(DbUtil.java:37)
Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
	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.newInstance(Constructor.java:490)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:59)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:83)
	at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:128)
	at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2201)
	at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2225)
	at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1391)
	at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:993)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:852)
	... 6 more

進程已結束,退出代碼 0

在這裏插入圖片描述
這個錯誤的原因呢是因爲下面的代碼沒寫全(代碼中的參數root是下載數據庫時候設置的名字,不是數據庫名啊,一般都是root,第三個參數是你的Mysql的密碼)

//        獲取鏈接
 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_pm?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT","root","1215");

上面的錯誤就很不好找的了,再說幾個好找的錯誤(數據庫名稱不對,數據庫密碼不對,sql語句中的字段不對和數量類型不匹配的問題)
數據庫名稱不對

"D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=57950:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\權限管理系統\target\classes;D:\Alibabayunku\mysql\mysql-connector-java\8.0.11\mysql-connector-java-8.0.11.jar;D:\Alibabayunku\com\google\protobuf\protobuf-java\2.6.0\protobuf-java-2.6.0.jar com.pm.util.DbUtil
java.sql.SQLSyntaxErrorException: Unknown database 'dbpm'
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:118)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862)
	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
	at com.pm.util.DbUtil.main(DbUtil.java:36)

進程已結束,退出代碼 0

在這裏插入圖片描述
數據庫密碼不對

"D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=57964:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\權限管理系統\target\classes;D:\Alibabayunku\mysql\mysql-connector-java\8.0.11\mysql-connector-java-8.0.11.jar;D:\Alibabayunku\com\google\protobuf\protobuf-java\2.6.0\protobuf-java-2.6.0.jar com.pm.util.DbUtil
java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:108)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862)
	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
	at com.pm.util.DbUtil.main(DbUtil.java:36)

進程已結束,退出代碼 0

在這裏插入圖片描述
sql語句中的字段不對和數量類型不匹配的問題

"D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=57993:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\權限管理系統\target\classes;D:\Alibabayunku\mysql\mysql-connector-java\8.0.11\mysql-connector-java-8.0.11.jar;D:\Alibabayunku\com\google\protobuf\protobuf-java\2.6.0\protobuf-java-2.6.0.jar com.pm.util.DbUtil
java.sql.SQLSyntaxErrorException: Unknown column 'addrs' in 'field list'
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:118)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:960)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1116)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1066)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1396)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1051)
	at com.pm.util.DbUtil.main(DbUtil.java:50)

進程已結束,退出代碼 0

在這裏插入圖片描述
還有好的錯誤,就不都說了,主要的jdk11.0.5和Mysql8.0就是這幾個錯誤,
然後,說一下數據庫連接代碼咋寫

package com.pm.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.UUID;

public class DbUtil  {
    public static void main(String[] args) {
        Connection conn=null;
        PreparedStatement ps=null;
        try {
//        加載驅動
         Class.forName("com.mysql.cj.jdbc.Driver");
//        獲取鏈接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/你的數據庫名?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT","root","你的數據庫密碼");
//        執行sql
//插入條數據,sql語句要會寫,然後括號代表要插入的數據,先用?來代表
            String sql="insert into user(username,password,name,age) values(?,?,?,?)";
//        獲取執行sql的對象
            ps=conn.prepareStatement(sql);
//        給?賦值,按照順序賦值,要和數據庫表中的字段相對應
            ps.setString(1,"小明");
            //隨機生成字符串來當作密碼
            String pwd= UUID.randomUUID().toString();
            ps.setString(2,pwd);
            ps.setString(3,"小明");
            ps.setInt(4,25);
//        如果有查詢的話,返回結果
            ps.executeUpdate();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
//        釋放連接
            if (ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

還有贈送一個jdbc驅動程序類是否加載成功的代碼:

 try{
            //加載MySql的驅動類
            Class.forName("com.mysql.cj.jdbc.Driver") ;
        }catch(ClassNotFoundException e){
            System.out.println("找不到驅動程序類 ,加載驅動失敗!");
            e.printStackTrace() ;
        }

還有一個是否能連接上的測試代碼

        //連接MySql數據庫,用戶名和密碼都是root
       String url = "jdbc:mysql://localhost:3306/db_pm?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT" ;
        String username = "root" ;
        String password = "1215" ;
        try{
            Connection con =
                   DriverManager.getConnection(url , username , password ) ;
       }catch(SQLException se){
          System.out.println("數據庫連接失敗!");
           se.printStackTrace() ;
       }

如果對你有幫助,點贊一下唄,挺不容易的哈哈哈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章