記錄第一次使用JDBC
阿新 • • 發佈:2020-07-24
使用的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 **