這篇文章跟讀者們介紹Java語言如何鏈接到MySQL數據庫相關操做,及FAQ(Frequently Asked Questions)介紹。java
IDE:Eclipsemysql
數據庫:使用的是MySQL 8.0sql
驅動程序包:mysql-connector-java-8.0.12.jar數據庫
驅動程序類名:com.mysql.cj.jdbc.Driver服務器
提早準備工做:筆者使用MySQL Workbench 工具來進行數據庫CRUD各類操做,在數據庫中創建了一個test數據庫,接着在test數據庫中創建teacher表格和往向表格中增長數據。app
而且已經往表中插入了6項數據。ide
在Eclipse中創建一個數據庫操做的Java project。而且在project裏面引入(配置)驅動程序jar包工具
1.導入所須要的包ui
2.註冊JDBC驅動加密
3.創建鏈接到數據庫
4.執行 CRUD 操做
5.處理獲得的結果
6.關閉資源,釋放鏈接
提供源代碼參考:
1 //STEP 1:導入包 2 //大多數狀況下,使用import java.sql.*;就足夠了。 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 public class DBConnettion { 10 11 //不一樣版本的數據庫驅動,名字會不相同同。 12 //數據庫驅動 mysql-connector-java 6.0以上的版本, 驅動名是:"com.mysql.cj.jdbc.Driver" 13 //舊版本驅動名是:"com.mysql.jdbc.Driver" 14 private static final String JDBC_DEIVER = "com.mysql.cj.jdbc.Driver"; 15 //筆者查看本機數據庫進程,默認使用3306端口,你們根據本身數據庫進程端口號來相應修改。 16 //好比我要訪問MySQL的test數據庫, 主機ip:端口號/數據庫名稱 數據庫URL格式:---"jdbc:mysql://localhost:3306/test 17 private static final String DB_URL = "jdbc:mysql://localhost:3306/test?useSSL=false";//?useUnicode=true&characterEncoding=utf8&useSSL=false 18 private static final String USER = "****"; //"****"替換成本身的數據庫用戶名 19 private static final String PASS = "****"; //"****"替換成本身的數據庫密碼 20 21 public static void main(String[] args) { 22 Connection conn = null; 23 Statement stmt = null; 24 25 try { 26 //STEP 2:註冊 JDBC 驅動 27 Class.forName(JDBC_DEIVER); 28 29 //STEP 3:創建鏈接到數據庫 30 System.out.println("正在鏈接數據庫......"); 31 conn = DriverManager.getConnection(DB_URL, USER, PASS); 32 stmt = conn.createStatement(); 33 34 //STEP 4:執行 CRUD 操做 35 System.out.println("正在查詢數據:"); 36 String sql = "select * from teacher;"; 37 ResultSet rs = stmt.executeQuery(sql); 38 39 //STEP 5:處理獲得結果 40 System.out.println("Department ID Name"); 41 while (rs.next()) { 42 int id = rs.getInt("id"); 43 String name = rs.getString("name"); 44 if (!rs.isLast()) 45 System.out.println("\t " + id + " " + name); 46 else 47 System.out.println( " " + id + " " + name); 48 } 49 50 //STEP 6:關閉資源,釋放鏈接。 51 rs.close(); 52 stmt.close(); 53 conn.close(); 54 } catch (ClassNotFoundException e) { 55 e.printStackTrace(); 56 } catch (SQLException e) { 57 e.printStackTrace(); 58 } finally { 59 try { 60 if (stmt != null) 61 stmt.close(); 62 if (conn != null) 63 conn.close(); 64 } catch (SQLException e) { 65 // TODO Auto-generated catch block 66 e.printStackTrace(); 67 } 68 } 69 System.out.println("釋放數據庫鏈接......"); 70 } 71 }
運行結果:
出現問題:
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.
解析:
從錯誤提示可知道是時區的錯誤,所以只要將數據庫系統的時區設置爲你當前系統時區便可。
解決方法:
所以使用root用戶登陸mysql,按照以下圖所示操做便可。
查看數MySQL據庫系統的時區設置
show variables like '%time_zone%';
筆者電腦系統時區設置爲GMT+8:北京時間。而數據庫系統時區默認爲GMT+0(格林尼治時間),所以修改數據庫系統時區跟個人系統時區相互一致。
set global time_zone = '+8:00';
對數據庫系統時區變量作修改,不會當即發生改變。退出本次黑窗命令行(客戶端)後
從新登陸數據庫,再次進行數據庫系統時區查詢,發現已經作出更改。
show variables like '%time_zone%';
出現問題:
Sat May 04 19:01:08 CST 2019 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.
解析:
從MySQL數據庫 5.5.45+ 之後,對數據庫的訪問都要求創建SSL加密鏈接。咱們只是作一個簡單的數據庫訪問實例,所以訪問數據庫不進行SSL加密鏈接。
解決方法:
能夠在數據庫URL鏈接語句末尾加上"?useSSL=false"來取消數據庫的警告。
或者能夠給數據庫服務器提供證書驗證的信任庫,進行SSL加密鏈接。