【Java】JDBC詳解
JDBC
JDBC概念
概念:Java Database Connectivity Java資料庫連線 ,Java語言運算元據庫
JDBC本質:是官方定義的一套操作所有關係型資料庫的規則,即介面。各個資料庫廠商去實現這套介面,提供資料庫驅動jar
包。我們可以使用這套介面程式設計,真正執行的程式碼是驅動jar
包中的實現類。
使用步驟
匯入jar包詳細步驟
- 將需要匯入的Jar包複製新增進Project下的libs資料夾中
- 選中jar包檔案,新增為libs
- 選擇Add As Libraries
物件詳解
實際運用
判斷是否有資料,看結果集下一行是否存在。
結果集ResultSet
寫工具類獲取路徑URL和String值
工具類
工具類實現
練習
需求分析改進
練習實現程式碼
注意問題
SQL隱碼攻擊問題
在使用一些SQL語句的時候,會因為一些語句注入不符合開發者原意,繞過SQL驗證的機制,產生安全隱患的問題。
需要使用到PreparedStatement,預編譯的SQL語句。
步驟如下:
JDBC處理事務
簡單邏輯的事務管理
但是這些程式碼在執行的時候,如果出現錯誤,可能導致事務並沒有完全執行。體現在實際的場景中的時候,可能是張三的餘額減掉了而李四的錢卻沒有加上,導致出現安全事故。
這個時候需要做出更加安全有效的措施。
執行的操作是需要加上**【事務回滾】**,在抓取異常的部分【catch】中,抓取所有可能發生的異常,用Exception e
接受異常,在異常抓取塊中,進行事務回滾的判斷【若執行物件不為null
,則進行事務回滾】,並同時抓取事務回滾可能產生的異常【SQLException e1
】,異常中簡單處理,輸出e1.printStackTrace();
改進之後的程式碼【部分】
- 出現異常,抓取事務
- 抓取異常,異常處理
事務管理
資料庫連線池
為了簡化程式碼,方便開發,我們需要引入資料庫連線池和**【Spring JDBC Template】**。
根據之前的邏輯進行開發的話,申請的物件頻繁使用後釋放,會造成運算資源等的浪費,也會造成程式碼的繁冗(但是優點是不會造成記憶體的長期佔用),導致開發難度加大。
在這種情況下,我們引進資料庫連線池的概念。
資料庫連線池就是相當於一個容器,將可能會用到的資料庫連線物件存放在這個容器中,稱之為資料庫連線池。
使用完連線物件之後,將物件歸還到資料庫連線池中,不會被釋放掉。同時申請使用物件的時候也簡化了很多。使用資料庫連線池的優點是:
- 訪問速度變快
- 節約系統資源
- 連線利用率提高
檢視標準開發文件中的資料,DataSource【位於javax.sql中】的詳細介紹。
知識點
資料庫連線池的實現
C3P0—資料庫連線池的實現
注意事項
- 配置檔名字為指定的值時,會自動載入配置檔案
- 不要忘記匯入資料庫驅動jar包
- 通過建立核心物件——資料庫連線物件來使用(區別於後面的Druid資料庫連線池)
Druid—資料庫連線池的實現
使用步驟
注意事項
- 使用的時候不需要指定配置檔名,需要自己手動載入使用
- 配置檔案是properties形式的檔案
- 在src檔案下new一個file,命名為XXX.properties
- 在source格式下新增名值對的方式注意事項:
- 名用大寫比較規範
- 【=】符號兩邊別打空格
- 名值對寫完後別加分號
- 使用時候需要建立資料庫連線池物件,通過工廠【DruidDataSourceFactory】來獲取
部分實現程式碼
其中,InputStream
是用來接收配置檔案的輸入字元。
建立Druid連線池的工具類
為了方便Druid的資料庫連線池的使用,建立工具類物件。
實現程式碼
釋放資源的時候需要進行過載,但是發現程式碼塊中有重複的部分。可以在引數少的方法中直接返回多個引數的方法,並將沒有的引數賦值為空,if判斷不滿足,跳過即可。
這樣的編碼大大精簡了程式碼的長度。
具體的體現就是將這個方法中的rs傳值null,返回給上面少引數的方法當成返回值。但要注意編碼的順序。
表現為這段程式碼,直接呼叫三引數的方法,將第一個引數賦值為空,結果作為返回值即可。
最後一個階段,獲取連線池方法。
Druid工具類呼叫
實現程式碼
Spring JdbcTemplate
概念 Spring JDBC
是Spring
框架對於JDBC
實現的一個封裝。
使用步驟
使用前準備
匯入jar包:
IOC需要的jar包:
commons-logging-1.1.3.jar
spring-aop-4.0.0.RELEASE.jar //註解會使用到的包
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
MySQL驅動包、c3p0jar包:
c3p0-0.9.1.2.jar
mysql-connector-java-5.1.37-bin.jar
JdbcTemplate需要的jar包:
spring-jdbc-4.0.0.RELEASE.jar
spring-orm-4.0.0.RELEASE.jar
spring-tx-4.0.0.RELEASE.jar
注:上面的可能因為版本差異,有所區別,教學視訊中以下為準。
實際上應用時匯入的jar包有:
實現程式碼
實際上使用JDBC temple時,只需要呼叫template之後就可以了,其餘的操作(歸還連線物件,釋放物件,異常處理等)不需要我們再手動完成,封裝的包會自己完成這些操作,大大簡化了使用的步驟。
練習內容
實現步驟
用單元測試程式碼,實時測試是否執行成功這些語句。
實現程式碼
上面這段是正確的程式碼,如果
上面的程式碼,
如果要查詢多條記錄並返回,應該返回的是List集合,程式碼如下。
這次的返回時候,是將
下面的程式碼是原來的老方法,並沒有直接呼叫Spring框架中提供的方法,程式碼冗餘度高。
下面的程式碼呼叫了Spring框架中的封裝的方法,程式碼比較簡答,但是在進行傳參的時候,需要將原始碼複製過來,修改其中的封裝的方法中的
private 返回值型別
全部改成對應的實現類,如將 int 改成 Integer ,double 改成 Double;之後更改Getter和Setter方法,重新返回的toString方法。
最後一個階段,返回查詢總記錄數。
Spring JdbcTemplate中使用的方法
根據B站視訊學習總結過來,如有紕漏,敬請指出。
相關文章
- JDBC詳解JDBC
- jdbc詳解(一)JDBC
- JDBC學習1:詳解JDBC使用JDBC
- JDBC 連線詳解JDBC
- Jmeter JDBC Request 使用詳解JMeterJDBC
- Jmeter系列(30)- 詳解 JDBC RequestJMeterJDBC
- JDBC-MySql基礎操作詳解JDBCMySql
- Sharding-JDBC分片策略詳解(二)JDBC
- Oracle Universal Connection Pool(UCP) for JDBC 詳解OracleJDBC
- Java 之 JDBCJavaJDBC
- Java之JDBCJavaJDBC
- java-jdbcJavaJDBC
- Java之JDBC①JavaJDBC
- jdbc:oracle:thin:@192.168.3.98:1521:orcl(詳解)JDBCOracle
- Java註解詳解Java
- Java 註解詳解Java
- JDBC 詳細介紹JDBC
- Java 之 JDBC(二)JavaJDBC
- java反射詳解Java反射
- Java Stream 詳解Java
- Java 反射詳解Java反射
- Java SPI詳解Java
- 詳解 Java NIOJava
- Java鎖詳解Java
- java CountDownLatch 詳解JavaCountDownLatch
- Java RMI詳解Java
- JAVA ANNOTATION詳解Java
- Java容器詳解Java
- java方法詳解Java
- Hive學習之六 《Hive進階— —hive jdbc》 詳解HiveJDBC
- Java註解(Annotation)詳解Java
- Java註解最全詳解(超級詳細)Java
- Java JDBC連線MYsqlJavaJDBCMySql
- Java String 詳解Java
- Java CAS 原理詳解Java
- Java ThreadPoolExecutor詳解Javathread
- Java 泛型詳解Java泛型
- Java集合詳解(二)Java