jdbc驱动jar_Javagt; 连接数据库时,JDBC和Mybatis的区别
?搭建好了Java的Springboot架構后,如果需要連接數據庫,我們應該怎么處理呢?
?? 舉個例子,我們在做線上監控時,需要從數據庫中將接口運行的結果拿出來,處理好數據后顯示給前端。怎么從數據庫中將數據取出來呢?這時候就有很多選擇了,我們今天主要講下JDBC和Mybatis兩種方法
什么是JDBC:
JDBC的全稱為 Java Database Connectity ?JDBC可以通過載入不同的數據庫的"驅動程序"而與不同的數據庫進行連接。
JDBC的優點:
使用的驅動不同,即可連接不同的數據庫。
使用同一套操作來操作不同的數據庫
如果每一個數據庫java都制定一套連接方式,那么當不同的數據庫進行更新的時候,java也需要更新自己的代碼。使用JDBC后,使用同一套代碼來操作,使用不同的驅動程序(驅動程序由數據庫廠商提供)來連接,這使得可以連接不同的數據庫。目前我們使用比較多的是 MySQL和MongoDB數據庫。
導入對應數據庫的驅動類:
在對應的數據庫廠商網站獲取對應的jar包
將對應的jar包添加到引用
先下載好jar包,然后導入到 idea中,怎么導入呢。在 https://dev.mysql.com/downloads/connector/j/? 選擇如下
下載好文件后,在 idea中點擊 File->File structure 選擇 Modules 目前高亮的項目就是你需要添加的項目。很多資料都說點擊左上角的加號,mac的需要點擊左下角的加號并選擇下載好的 jar包 詳情見圖
然后在External Libraries里,可以看到有 mysql-connector-java-5.1.39-bin.jar 包,這時候就可以使用JDBC了。我們來看下代碼:
public class JdbcMysqlDemo {
??? // MySQL 8.0 以下版本 - JDBC 驅動名及數據庫 URL
??? static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
??? static final String DB_Url = "jdbc:mysql://localhost:3306/Hello";
??? //數據庫的用戶名和密碼,需要根據自己的設置
??? static final String USER = "root";
??? static final String PASS = "123456";
??? public static void main(String[] args){
??????? Connection conn = null;
??????? Statement stmt = null;
??????? try {
??????????? //注冊JDBC驅動
??????????? Class.forName(JDBC_DRIVER);
??????????? //打開鏈接
??????????? System.out.println("連接數據庫...");
??????????? conn = DriverManager.getConnection(DB_Url,USER,PASS);
??????????? //執行查詢
??????????? System.out.println("實例化Statement對象...");
??????????? stmt = conn.createStatement();
??????????? //數據庫
??????????? String sql;
??????????? sql = "select * from cool";
??????????? ResultSet rs = stmt.executeQuery(sql);
??????????? //展開結果集數據庫
??????????? while(rs.next()){
??????????????? //通過字段檢索
??????????????? int id = rs.getInt("id");
??????????????? String name = rs.getString("name");
??????????????? int score = rs.getInt("score");
??????????????? //輸入數據
??????????????? System.out.println("ID: " + id);
??????????????? System.out.println("NAME: " + name);
??????????????? System.out.println("SCORE: " + score);
??????????????? //完成后關閉
??????????????? rs.close();
??????????????? stmt.close();
??????????????? conn.close();
??????????? }
??????? }catch (Exception se){
??????????? //處理JDBC的錯誤
??????????? se.printStackTrace();
??????? }finally{
??????????? //關閉資源
??????????? try{
??????????????? if (stmt != null) stmt.close();
??????????? }catch (Exception se2){
??????????? }//什么都不做
??????????? try{
??????????????? if (conn != null) conn.close();
??????????? }catch (Exception se){
??????????????? se.printStackTrace();
??????????? }
??????? }
??? System.out.println("Goodbye!");
??? }
}
來運行下,看下結果:
連接數據庫...
Thu Oct 01 22:25:00 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.
實例化Statement對象...
ID: 1
NAME: QQ
SCORE: 78
java.sql.SQLException: Operation not allowed after ResultSet closed
?? ?at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963)
?? ?at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896)
?? ?at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885)
?? ?at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
?? ?at com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl.java:743)
?? ?at com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:6313)
?? ?at BasicFunction.JdbcMysqlDemo.main(JdbcMysqlDemo.java:36)
Goodbye!
可以看出來,打印的東西已經都打印了。但是提示了安裝的mysql版本需要ssh設置,那我們就來設置下,按照 mysql server 8.0以上版本的設置
??? static final String DB_Url = "jdbc:mysql://localhost:3306/Hello?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
運行后還是報錯,仔細看了下代碼,發現有2處錯誤
public class JdbcMysqlDemo {
??? // MySQL 8.0 以下版本 - JDBC 驅動名及數據庫 URL
??? static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
??? static final String DB_Url = "jdbc:mysql://localhost:3306/Hello?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
??? //數據庫的用戶名和密碼,需要根據自己的設置
??? static final String USER = "root";
??? static final String PASS = "123456";
??? public static void main(String[] args){
??????? Connection conn = null;
??????? Statement stmt = null;
??????? try {
??????????? //注冊JDBC驅動
??????????? Class.forName(JDBC_DRIVER);
??????????? //打開鏈接
??????????? System.out.println("連接數據庫...");
??????????? conn = DriverManager.getConnection(DB_Url,USER,PASS);
??????????? //執行查詢
??????????? System.out.println("實例化Statement對象...");
??????????? stmt = conn.createStatement();
??????????? //數據庫
??????????? String sql;
??????????? sql = "select * from cool";
??????????? ResultSet rs = stmt.executeQuery(sql);
??????????? //展開結果集數據庫
??????????? while(rs.next()){
??????????????? //通過字段檢索
??????????????? int id = rs.getInt("id");
??????????????? String name = rs.getString("name");
??????????????? int score = rs.getInt("score");
??????????????? //輸入數據
??????????????? System.out.println("ID: " + id);
??????????????? System.out.println("NAME: " + name);
??????????????? System.out.println("SCORE: " + score);
??????????????? //完成后關閉
??????????? }
??????????? rs.close();
??????????? stmt.close();
??????????? conn.close();
??????? }catch (SQLException se){
??????????? //處理JDBC的錯誤
??????????? se.printStackTrace();
??????? }catch (Exception e){
??????????? e.printStackTrace();
??????? } finally{
??????????? //關閉資源
??????????? try{
??????????????? if (stmt != null) {
??????????????????? stmt.close();
??????????????? }
??????????? }catch (Exception se2){
??????????? }//什么都不做
??????????? try{
??????????????? if (conn != null) {
??????????????????? conn.close();
??????????????? }
??????????? }catch (Exception se){
??????????????? se.printStackTrace();
??????????? }
??????? }
??? System.out.println("Goodbye!");
??? }
}
一個是代碼位置,一個是多了一條語句
看下運行結果:
連接數據庫...
實例化Statement對象...
ID: 1
NAME: QQ
SCORE: 78
ID: 2
NAME: 李大志
SCORE: 88
ID: 3
NAME: 葫蘆
SCORE: 77
ID: 4
NAME: 王五子
SCORE: 77
ID: 5
NAME: 11
SCORE: 66
ID: 6
NAME: 100
SCORE: 100
ID: 7
NAME: 糊涂
SCORE: 88
Goodbye!
Process finished with exit code 0
和數據庫中的數據進行對比:
mysql> select * from cool;
+----+-----------+------------+-------+-----------+
| id | name????? | time?????? | score | country?? |
+----+-----------+------------+-------+-----------+
|? 1 | QQ??????? | NULL?????? |??? 78 | 中國????? |
|? 2 | 李大志??? | NULL?????? |??? 88 | 俄羅斯??? |
|? 3 | 葫蘆????? | NULL?????? |??? 77 | 英國????? |
|? 4 | 王五子??? | NULL?????? |??? 77 | 挪威????? |
|? 5 | 11??????? | NULL?????? |??? 66 | NULL????? |
|? 6 | 100?????? | 2020-07-06 |?? 100 | 阿根廷??? |
|? 7 | 糊涂????? | 2020-07-23 |??? 88 | USA?????? |
+----+-----------+------------+-------+-----------+
7 rows in set (0.08 sec)
數據終于對了!
好的,今天就先到這里了
總結
以上是生活随笔為你收集整理的jdbc驱动jar_Javagt; 连接数据库时,JDBC和Mybatis的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python如何导入turtle_cen
- 下一篇: c++中的引用和python中的引用_对