JDBC筆記-李偉杰版

JDBC 03

2019/8/1 9:51:41


筆記網站

全球加速:   http://zaixianke.com
北京節點:   http://itdage.cn

JDBC 事務 ***

在dos命令行操作oracle時 , 執行DML , 需要結束事務 (commit提交 或 rollback回退)
在JDBC中, 事務是自動提交的, 每執行一條DML語句, 事務就自動提交一次. 

我們可以通過JDBC的事務API , 開始事務的手動提交, 將多條DML語句看作一個整體, 要么一起成功, 要么一起失敗.

JDBC事務操作格式:

注意: 開啟事務的手動提交 ,是通過連接對象完成的. 某個數據連接對象的事務開啟手動提交后, 這個連接對象的事務需要手動控制.  其他連接對象不受影響.

操作方法:
1. 開始事務的手動提交:
conn.setAutoCommit(boolean flag);
參數含義: true表示自動提交 . false表示手動提交.

2.  提交事務:conn.commit();3.  回退事務:rollback();

事務案例:

    public class Demo {public static void main(String[] args) throws Exception {//1.    加載數據庫的驅動Class.forName("oracle.jdbc.OracleDriver");//2.    獲取數據庫連接對象Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "system", "123");//2.1   設置連接對象的事務 為 手動提交conn.setAutoCommit(false);//3.    開始描述邏輯System.out.println("金剛: 轉賬中...");//3.1   減少金剛賬戶的余額 500 | 3.1.1   預編譯SQL執行環境PreparedStatement state = conn.prepareStatement("update user33 set money=500 where id=2");//3.1.2 執行SQL語句boolean success = state.executeUpdate()>0?true:false;if(success) {System.out.println("后臺邏輯: 金剛余額減少完畢.");if(1==2) {conn.rollback();throw new RuntimeException("后臺服務器... 停電了");}//3.2   增加豪杰賬戶的余額 500 //3.2.1 預編譯SQL執行環境PreparedStatement state2 = conn.prepareStatement("update user33 set money=600 where id=1");//3.2.2 執行SQ語句boolean success2 = state2.executeUpdate()>0?true:false;if(success2) {System.out.println("后臺邏輯: 豪杰余額增加完畢");conn.commit();}state2.close();}state.close();}
}

批處理 了解

將多條SQL語句 放到一起批量處理.

批處理將多次對于數據庫的操作次數 , 減少到了一次 ! 提高了大量SQL語句一起執行時的性能.

使用步驟:

批處理使用Statement類操作步驟1.    將一條SQ語句加入到批處理中statement.addBatch(String sql);步驟2.    執行批處理中的所有語句statement.executeBatch();

批處理案例:

    //1.    加載數據庫的驅動Class.forName("oracle.jdbc.OracleDriver");//2.    獲取數據庫連接對象Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "system", "123");//3.    創建SQL的執行環境Statement state = conn.createStatement();//4.    加入SQL語句 到批處理中for(int i=0;i<1000;i++) {state.addBatch("insert into user33 values(SEQ_USER33_ID.NEXTVAL,'name"+i+"',1000)");}//5.    執行批處理state.executeBatch();state.close();conn.close();System.out.println("執行完畢");

連接池 *

概述 熟悉

由連接池創建連接, 維護連接 
我們需要使用連接時, 從連接池中獲取連接. 
如果池中存在空閑連接, 則拿去使用. 
如果不存在空閑連接, 且池未滿 , 則在連接池中創建新的連接使用.
如果不存在空閑連接, 且池已滿 , 則排隊等待空閑連接.

Properties 文件 與 類 熟悉

properties文件 常用于Java中的配置文件.
因為Properties文件 可以快速的 與 Properties類 進行轉換.    

文件:
注釋: #開頭表示注釋行
鍵值對: 鍵與值之間使用等號連接, 多個鍵值對之間使用換行分割

如何將一個Properties文件, 轉換為java中的Map集合對象:

步驟:1.  創建Properties對象Properties ppt = new Properties();          2.  得到Properties文件的字節輸入流InputStream is = //可以通過new FileInputStream , 也可以通過ClassLoader 等等3.  將流加載到Properties對象ppt.load(is);

使用步驟: *

1.  引入相關的jar文件-   dbcp    :   連接池的代碼-   poll    :   連接池的依賴庫
  1. 創建一個properties文件, 描述連接池的配置 , 內容如下:
    #數據庫連接地址
    url=jdbc:oracle:thin:@localhost:1521:XE
    #數據庫驅動地址
    driverClassName=oracle.jdbc.OracleDriver
    #數據庫帳號
    username=system
    #數據庫密碼
    password=123

    #擴展配置:
    #初始化連接池時, 創建的連接數量:
    initialSize=5
    #最大允許存在的連接數量
    maxActive=200
    #空閑時允許保留的最大連接數量
    maxIdle=10
    #空閑時允許保留的最小連接數量
    minIdle=5
    #排隊等候的超時時間
    maxWait=20000

  2. 將properties文件, 轉換為Properties對象.
    Properties ppt = new Properties();
    ppt.load(文件輸入流);

  3. 通過連接池工廠類(BasicDataSourceFactory) , 創建連接池對象 (一次程序啟動, 創建一個連接池就夠了.)
    DataSource ds = BasicDataSourceFactory.createDataSource(ppt);

  4. 通過連接池對象, 獲取池中的連接
    Connection conn = ds.getConnection();

  5. 正常JDBC操作

連接池案例:*

    //3.    將properties文件 轉換為Properties對象Properties ppt = new Properties();//4.    加載文件的輸入流InputStream is = Demo.class.getClassLoader().getResourceAsStream("dbcp.properties");//空指針異常ppt.load(is);//5.    通過工廠類, 創建連接池DataSource ds = BasicDataSourceFactory.createDataSource(ppt);//6.    通過連接池, 獲取其中的連接 , 并使用Connection conn = ds.getConnection();//正常的JDBC操作PreparedStatement state = conn.prepareStatement("insert into user33 values(seq_user33_id.nextval,'嘿嘿嘿',188)");int count = state.executeUpdate();System.out.println(count>0?"數據插入成功":"數據插入失敗");

DBCPUtil工具類 *

public class DBCPUtil {
private static DataSource dataSource;static {//在類加載時, 讀取配置文件, 配置連接池//1.    創建Properites對象Properties ppt = new Properties();//2.    讀取配置文件, InputStream is = DBCPUtil.class.getClassLoader().getResourceAsStream(&quot;dbcp.properties&quot;);//3.    將配置文件 加載到Properties對象中try {ppt.load(is);//4.    通過連接池工廠類, 創建連接池dataSource = BasicDataSourceFactory.createDataSource(ppt);} catch (Exception e) {e.printStackTrace();}
}/*** 用于從連接池中 獲取一個連接對象* @return 連接對象 , 如果獲取失敗返回null*/
public static Connection getConnection() {try {return dataSource.getConnection();} catch (Exception e) {e.printStackTrace();return null;}
}
/*** 用于釋放資源* @param conn  連接對象* @param state 執行環境* @param result 結果集*/
public static void close(Connection conn , Statement state ,ResultSet result) {if(result!=null) {try {result.close();} catch (SQLException e) {e.printStackTrace();}}if(state!=null) {try {state.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(conn!=null) {try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

}

數據庫優化 *

1.  在進行表格查詢時 , where子句中的條件執行順序是從左至右 , 清除數據量較大的條件應該放在左邊.(特別注意: 笛卡爾積消除條件必須放在最左邊)
  1. 在進行表格查詢時 , 列名列表應避免使用號 ! 數據庫在執行查詢操作時, 會先將號展開, 轉換為所有的列名, 再進行查詢.

  2. 在進行表格查詢時 , 能使用where條件篩選的數據, 應盡量避免使用having子句來篩選. 因為where條件執行在having之前 , 在早期篩選掉大量數據, 可以讓程序執行的更順暢.

  3. 在進行多表查詢時 , 查詢的表順序是從右至左的. 應把表中數據量最少的表放在查詢的最右邊.

  4. 在進行多表查詢時 , 應盡可能的給所有的表添加別名, 能明確的區分有沖突的列.

  5. 在使用事務時 , 應盡量多的commit , 盡量早的commit ! 原因是: 事務在未提交時, 數據庫會耗費大量的內存 , 來緩存未提交的SQL結果 !

  6. 盡可能多的使用函數 來提高SQL執行的效率.

  7. SQL語句編寫時, 除字符串以外 , 應使用大寫字母 ! 因為SQL語句執行時, 會先將小寫字母 轉換為 大寫字母, 再執行.

  8. 應盡可能少的訪問數據庫 (多次數據訪問的結果可能相同, 如果緩存起來 ,可以提高程序的執行效率)

  9. 在索引列上 , 盡可能避免使用not來判斷. not關鍵字如果判斷了索引列 , 會導致此次查詢索引失效 , 轉而使用全表掃描的方式查詢.

  10. 在索引列上, 不能使用算數運算 , 算數運算也會導致索引列使用, 使用全表掃描的方式進行查詢.

  11. 在查詢數據時, 如果需要使用>或<的條件, 應替換為>= 或 <= !
    原因是>和<符號 , 查詢時, 是按照>= 和 <= 進行查詢, 然后在撇去=的結果.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455345.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455345.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455345.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

局域網網絡風暴檢測工具_【思唯網絡學院】從原理到配置,最全的VLAN說明就在這了!...

有關VLAN的技術標準IEEE 802.1Q早在1999年6月份就由IEEE委員正式頒布實施了&#xff0c;而且最早的VLNA技術早在1996年Cisco(思科)公司就提出了。隨著幾年來的發展&#xff0c;VLAN技術得到廣泛的支持&#xff0c;在大大小小的企業網絡中廣泛應用&#xff0c;成為當前最為熱門的…

SQL server 基本語句

--查詢數據庫是否存在 if exists ( select * from sysdatabases where [name]TestDB) print Yes, the DB exists else print No, need a new one? --新建一個數據庫 create database TestDB on ( name TestData, filename G:\DBS\KeyTest.mdf, size 3, filegrowth 2 ) log…

pythonselenium模擬登陸爬取信息_python3 使用selenium模擬登陸天眼查抓取數據

由于之前用Scrapy 抓了一些公司的名稱&#xff0c;但是沒有準確的聯系方式&#xff0c;所以就自己就學習了一下使用selenium自動化工具&#xff0c;速度比較慢&#xff0c;網上也有很多這方面的代碼&#xff0c;但是大部分的網頁解析部分都出錯了&#xff0c;可能是這種網站定時…

mp4格式

下面的軟件下載地址&#xff1a;http://download.csdn.net/source/2607382 ftyp: 這是一個筐&#xff0c;可以裝mdat等其他Box。 例&#xff1a;00 00 00 14 66 74 79 70 69 73 6F 6D 00 00 02 00 6D 70 34 31 語義為&#xff1a;ftyp: Major brand: isom Minor version: 5…

PyQt5案例匯總(簡潔版)

01菜單欄 import sys from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication from PyQt5.QtGui import QIconclass Example(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):exitAct QAction(QIcon(exit.png), &Exit,…

個人關于浮動的理解

浮動帶來的影響&#xff1a; ①. 能夠讓浮動之后的元素布局產生混亂 &#xff08;元素浮動后脫離了標準文檔流&#xff0c;它的布局也就不再遵循標準文檔流的規則&#xff0c;多個浮動元素在一起的時候就會隨著窗口的變化而變化&#xff0c;也就失去了穩定的布局&#xff09; ②…

接口測試 rest-assured 使用指南

轉載&#xff1a;https://testerhome.com/topics/7060 原文&#xff1a;https://github.com/rest-assured/rest-assured/wiki/Usage本文github地址&#xff1a;https://github.com/RookieTester/rest-assured-doc 注意&#xff0c;如果您正在使用1.9.0或者更早的版本請參考舊文…

python中格式化字符串的作用_python中字符串格式化的意義(化妝)

格式 描述%%百分號標記 #就是輸出一個%%c字符及其ASCII碼%s字符串%d有符號整數(十進制)%u無符號整數(十進制)%o無符號整數(八進制)%x無符號整數(十六進制)%X無符號整數(十六進制大寫字符)%e浮點數字(科學計數法)%E浮點數字(科學計數法&#xff0c;用E代替e)%f浮點數字(用小數點…

MongoDB的快速手動安裝

就是關于MongoDB主從庫的安裝配置和啟動。網上關于MongoDB的安裝有大量的文章供大家學習。我這里提供一個Windows環境下MongoDB主從庫的快速手動安裝的方法&#xff0c;只需要三步即可。 先下載的安裝包&#xff0c;解壓縮后找到bin文件夾&#xff0c;將bin文件夾拷貝至你自己的…

MP4音頻解碼信息

文章轉載自&#xff1a;http://blog.csdn.net/flyingqr/archive/2010/02/02/5282600.aspx 版權歸原作者&#xff0c;編輯&#xff1a;小乙哥 MP4文件格式分為頭部和數據兩部分&#xff0c;頭部是由許多被稱作Atom的結構單元嵌套或排列而成&#xff0c;數據部分則完全為實際數據…

時序圖 分支_UML用例圖

UML用例圖用例圖有以下東東:用例參與者關聯系統邊界用例使用橢圓來表示&#xff0c;橢圓里邊寫上用例的名稱:這里的用例可以理解為一個動作或行為,或者一個對象。參與者用一個小人兒,在小人兒下面寫上參與者名稱,例如學生:關聯用一條線表示:把很多個用例放到一個大的矩形框里。…

Python腳本實現漢子轉拼音

起步 中華文化博大精深&#xff0c;是中華民族的財富&#xff0c;吸收和繼承發揚中 華文化&#xff0c;是現代每個炎黃子孫無可推卸的天職。 今天小編就交大家用python寫一個腳本,實現漢子和拼音之間的轉換 pinyin.py 漢字轉拼音,With Python Example: from pinyin impor…

MySQL innodb_table_stats表不存在的解決方法

在做實驗時&#xff0c;使用mysqldump命令報錯[rootlinux-mysql02 3306]# mysqldump -uroot -p123456 -S /u02/data/3306/mysql.sock -A -B --events | gzip > /opt/rep.sql.gzmysqldump: Got error: 1146: Table mysql.innodb_index_stats doesnt exist when using LOCK TA…

自定義封裝 banner 組件

1. 效果圖預覽 2.基本功能 一個簡單方便的輪播圖組件&#xff0c;基于viewpager 基礎上進行的封裝。可設置 項目中圖片&#xff0c;網絡圖片&#xff0c; View&#xff1b;支持循環自動播放&#xff0c;手勢滑動切換&#xff0c;item點擊事件,可設置 點點的樣式寬高、顏色、大小…

vb.net服務器啟動后cpu占用了70_記一次服務器被異常程序占用的解決過程(懷疑黑客攻擊)...

最近在跑實驗&#xff0c;但是突然發現程序運行變慢&#xff0c;然后top命令查看程序運行情況&#xff0c;發現有異常進程&#xff0c;名字叫 bash&#xff0c;占用 2400% CPU計算資源。剛開始懷疑是挖礦程序&#xff0c;因實驗室網絡IP為教育網公網&#xff0c;懷疑被攻擊&…

3gp文件格式研究 (轉windcao的專欄)

序言 06我開始做3gp文件的播放器,但是關于3gp的文檔太少了也很難找,在網友luxh的幫助下,我終于有了第一份關于3gp文件格式的文檔《ISO/IEC 14496-12&#xff0c;ISO媒體文件格式》.在此真心感謝luxh的貢獻.當然了是英文版的,有文檔就不錯了.為了便于查閱和理解,我把之后陸續找…

Android開發必用工具及其進階途徑

三百六十行&#xff0c;行行出狀元&#xff0c;怎么樣才能在Android行業中當個狀元了&#xff0c;開發過程中的高效、自我能力的提升顯得至關重要&#xff0c;步入IT行業更是要時時刻刻學習&#xff0c;新技術更新快&#xff0c;今天將介紹一下Android開發中必用工具及其進階途…

MySQL遇到check the manual that corresponds to your MySQL server version for the right syntax錯誤

原來是MySQL表中不能包含關鍵字 轉載于:https://www.cnblogs.com/flycoding/p/7088465.html

Python腳本實現圖片加水印

起步 圖片是指由圖形、圖像等構成的平面媒體,有形式的事物&#xff0c;我們看到的&#xff0c;是圖畫、照片、拓片等的統稱。 為了保護一些原創圖片的版權,某些時候我們需要在圖片上面,加上水印,當然你可以用Photoshop來做,只不過如果圖片數量過多,亦或者圖片的動態生成的時候…

yarn 怎么查看有多個job在跑_flink on yarn 模式下提示yarn資源不足問題分析

背景在實時計算平臺上通過YarnClient向yarn上提交flink任務時一直卡在那里&#xff0c;并在client端一直輸出如下日志&#xff1a;(YarnClusterDescriptor.java:1036)- Deployment took more than 60 seconds. Please check if the requested resources are available in the Y…