1. 程式人生 > 實用技巧 >記錄第一次使用JDBC

記錄第一次使用JDBC

使用的MySQL 8.0版本 ,首先匯入JAR包 右鍵new一個libs的packdge ,把下載好的mysql-connector-java-8.0.13.jar貼上到libs包中,右鍵Build Path選擇的Add buildpath 就會在下面生成referenced libs ,同理刪除jar包右鍵Build Path,選擇Configure Build path選擇romove即可。

第一種錯誤:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.


這個錯誤是由驅動和資料庫版本不一致造成的
我的資料庫是mysql8.0但是使用了mysql-connector-java-5.1.38.jar這個驅動。所以會報這個錯誤。
解決方法:
將驅動替換為相應mysql8.0版本的驅動。
我的驅動是mysql-connector-java-8.0.13.jar 將它替換掉原來的驅動即可。
從這個連線裡面下載8.X的驅動即可https://blog.csdn.net/weixin_41804049/article/details/87719574

然後還需修改第二個地方:
將com.mysql.jdbc.Driver改為com.mysql.cj.jdbc.Driver即可

第二種錯誤:java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more than one time

提示系統時區出現錯誤,可以在mysql中執行命令:
set global time_zone=’+8:00’
或者在url 中新增 serverTimezone=UTC
如果只是第一個引數,應寫成
url = “jdbc:mysql://localhost:3306/qlgydx?serverTimezone=GMT”

package jdbc;

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

public class DjbcDemo1 {

    
public static void main(String[] args) throws Exception { // TODO Auto-generated method stub //1.匯入驅動jar包 //2.註冊驅動 Class.forName("com.mysql.cj.jdbc.Driver"); System.out.println("資料庫驅動載入成功!"); //3.獲取資料庫的連線物件 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3?serverTimezone=GMT", "root", "123456"); System.out.println("資料庫連線成功!"); //4.定義sql語句 String sql ="update stu set balance =1000 where id =1"; //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
Fri Jul 24 16:17:54 CST 2020 WARN: Caught while disconnecting...

EXCEPTION STACK TRACE:



** BEGIN NESTED EXCEPTION ** 

javax.net.ssl.SSLException
MESSAGE: closing inbound before receiving peer's close_notify

STACKTRACE:

javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:133)
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:311)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:267)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:258)
    at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:801)
    at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:780)
    at com.mysql.cj.protocol.a.NativeProtocol.quit(NativeProtocol.java:1312)
    at com.mysql.cj.NativeSession.quit(NativeSession.java:182)
    at com.mysql.cj.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:1750)
    at com.mysql.cj.jdbc.ConnectionImpl.close(ConnectionImpl.java:720)
    at jdbc.DjbcDemo1.main(DjbcDemo1.java:28)


** END NESTED EXCEPTION **