《java程序設計(人工智能方向)》課件-項目6Java數據庫與集合類_第1頁
《java程序設計(人工智能方向)》課件-項目6Java數據庫與集合類_第2頁
《java程序設計(人工智能方向)》課件-項目6Java數據庫與集合類_第3頁
《java程序設計(人工智能方向)》課件-項目6Java數據庫與集合類_第4頁
《java程序設計(人工智能方向)》課件-項目6Java數據庫與集合類_第5頁
已閱讀5頁,還剩177頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Java數據庫與集合類項目6目錄CONTENT-泛型與集合類應用24Java數據庫操作-13項目導讀JDBC技術是Java語言中被廣泛使用的一種操作數據庫的技術,在數據庫開發中占有重要的地位,使用JDBC和數據庫建立連接,就可以使用JDBC的API操作數據庫。在Java中還提供了不同的集合類,這些類具有不同的存儲對象方式,并提供了相應的方法方便對集合進行遍歷、添加、刪除以及查找指定對象。本項目主要介紹數據庫的操作和Java中的各種集合類。學習目標技能目標知識目標●掌握數據庫的基礎知識。●了解JDBC技術的概念?!裾莆認DBC中常用的類和接口定義、使用方法。●掌握數據庫的增、刪、改、查語句命令動詞及基本語法。●理解泛型?!衲芾肑DBC實現數據庫連接?!衲茉贘ava語句中完成數據庫數據的增、刪、改、查操作?!衲苁炀殤肔ist、Set、Map集合類。學習目標素質目標●培養學生的愛國情懷,提高學生獨立自主的技術發展意識和民族自豪感?!衽囵B學生與時俱進的學習態度,鼓勵學生探索新技術、新方法、新思路。●培養學生認真負責的工作態度、一絲不茍的工匠精神和求真務實的科學精神。●引導學生防范數據泄露、保證數據安全,樹立正確的職業道德和職業操守。●以人為本,注重基礎培養和前瞻培養,提高學生綜合素質,讓學生能更好適應未來社會和技術的發展。任務1Java數據庫操作CurriculumDevelopmentTechnology1任務1

Java數據庫操作購物管理系統需要使用JDBC技術對會員信息進行管理,小明需要利用MySQL完成數據庫的定義、創建,然后通過連接訪問和操作數據庫,完成對會員信息的添加、刪除、信息的更新和輸出。完成后的部分效果如圖6-1-1所示。任務描述常用的數據庫種類很多,主要根據數據庫管理系統(DBMS)的類型來分類。以下是一些常見的數據庫類型和它們的代表性數據庫:1.關系型數據庫(RDBMS)MySQL:開源的關系型數據庫管理系統,廣泛應用于Web應用程序中。PostgreSQL:一個強大的開源對象關系型數據庫系統,支持復雜查詢和高級功能。OracleDatabase:由OracleCorporation開發的關系型數據庫管理系統,用于企業級應用。2.NoSQL數據庫MongoDB:非關系型數據庫,使用文檔存儲模型,適用于大數據和實時Web應用。Redis:內存中的數據結構存儲系統,常用作緩存、消息隊列等。拓展—常用的數據庫有哪些?任務1

Java數據庫操作在本次任務中,要實現通過數據庫的定義、創建、連接訪問和數據庫的操作完成對會員信息的添加、刪除、信息的更新和輸出,需要掌握如下技能:●通過配置JDBC連接,掌握Java連接數據庫的方法和步驟?!裢ㄟ^配置Driver和Connection,掌握JDBC的常用接口和類?!裢ㄟ^編寫SQL增、刪、改、查語句,掌握數據庫基本應用、SQL語句的基本語法和使用方法?!裢ㄟ^在Java中調用SQL語句,進一步掌握Java調用執行SQL的過程和方法。●通過Java處理數據,掌握Java常用數據處理方法。技術分析任務1

Java數據庫操作步驟1:創建數據表(1)安裝好MySQL與Navicate軟件之后,啟動NavicatforMySQL。如果MySQL沒有啟動,從控制面板的管理工具中選擇服務,啟動MySQL,如圖6-1-2所示。任務實施Navicat是一個數據庫管理工具,提供了圖形化界面和便捷的操作方式,使得數據庫的管理、開發和維護更加高效和方便。使用Navicat來創建數據庫和表有以下幾個優點:可視化操作:Navicat提供了直觀的圖形化界面,用戶可以通過界面上的操作按鈕和工具欄來創建數據庫、表和其他數據庫對象,無需手動編寫SQL語句。這對于不熟悉SQL語法或者想要快速進行操作的開發者來說非常友好??缙脚_支持:Navicat支持多種主流數據庫系統(如MySQL、PostgreSQL、Oracle等),并且可跨平臺使用,適用于Windows、Mac和Linux系統。這使得開發者可以在不同的操作系統上統一使用一個工具進行數據庫管理,提高了開發效率。數據庫對象管理:除了創建數據庫和表,Navicat還可以管理數據庫對象(如視圖、存儲過程、觸發器等),進行數據導入導出、備份恢復等操作。這些功能對于數據庫的日常維護和管理非常有幫助。拓展—用Navicate來創建數據庫和表的優點。任務1

Java數據庫操作(2)創建連接,選擇MySQL,在出現的對話框中輸入連接名和密碼(密碼為自己設置的數據庫的密碼),如圖6-1-3所示。創建數據表-k53ms5任務1

Java數據庫操作(3)單擊“確定”按鈕,在連接界面出現cust連接,雙擊cust進行連接,效果如圖6-1-4所示。任務1

Java數據庫操作(4)右擊cust連接,并選擇“創建數據庫”選項,在“新建數據庫”對話框中輸入數據庫名為cust,字符集選擇utf8,輸入完成后單擊“確定”按鈕,cust數據庫就創建成功了,效果如圖6-1-5所示。選擇MySQL的字符集(如UTF-8)是非常重要的,特別是在多語言和國際化的應用中。以下是一些選擇合適字符集的重要原因:支持多語言:UTF-8是一種能夠表示幾乎所有國家的文字的字符集,它支持全球范圍內的多種語言,包括中文、日文、阿拉伯文、西班牙文等。如果不選擇UTF-8,可能會導致無法存儲或正確顯示某些語言的文本。數據一致性:選擇適當的字符集有助于確保數據庫中存儲的數據保持一致性和準確性。如果數據庫中的字符集不兼容或不正確選擇,可能會導致數據存儲問題,如亂碼或數據丟失。應用兼容性:現代應用程序通常是跨平臺和國際化的,因此需要確保數據庫的字符集能夠與應用程序的字符集兼容。UTF-8是一種廣泛支持的字符集,能夠最大限度地提高應用程序的兼容性。數據交換和集成:如果數據庫中的數據需要與其他系統或服務進行交換或集成,選擇通用的字符集如UTF-8能夠簡化數據轉換和傳輸過程,減少由于字符集不匹配而引起的問題。拓展—為什么Mysql的字符集要選擇utf8任務1

Java數據庫操作(5)雙擊數據庫cust,打開數據庫,選擇cust下面的“表”,單擊右側的“新建表”按鈕,如圖6-1-6所示。進入表設計界面,進行表的設計,第一列為類型成員的名稱,第二列為類型,第三列為長度,通過創建欄位的方式添加行內容。最終添加效果如圖6-1-7所示。想一想各種數據庫的連接工具的驅動都一樣嗎?任務1

Java數據庫操作(6)單擊“保存”按鈕,出現“表名”對話框,在對話框中輸入表的名稱t_cust,單擊“確定”按鈕。這樣在cust數據庫下面的表中就多了一個t_cust表,如圖6-1-8和圖6-1-9所示。任務1

Java數據庫操作(7)雙擊表名,進入數據庫表的編輯界面,按照要求為數據庫表添加內容即可,填充完成后的效果如圖6-1-10所示。任務1

Java數據庫操作步驟2:創建連接MySQL數據庫驅動(1)下載MySQL的連接驅動mysql-connector-java-5.1.7-bin.jar,打開SuperMarketManager項目,在項目下新建1個名為lib的包,將下載好的jar包復制到lib包中,如圖6-1-11所示。添加數據庫jar包-4nirl0任務1

Java數據庫操作(2)右擊項目,并選擇“BuildPath”→“ConfigureBuildPath”選項,打開“JavaBuildPath”界面,如圖6-1-12所示。任務1

Java數據庫操作(3)選擇“Libraries”選項卡,單擊“AddJARs”按鈕,選擇項目中的lib包下面的jar包(如果為外部路徑,則選擇單擊“AddExternalJARs”按鈕),如圖6-1-13所示。單擊“OK”按鈕完成驅動的加載。小提示添加JAR包(AddJARs)是將JAR包放在項目中已經存在的構建路徑中。添加外部JAR包(AddExternalJARs)是指JAR包在Eclipse項目工作區文件夾的外部,只能被鏈接或復制。添加JAR包(AddJARs)是將JAR包放在項目中已經存在的構建路徑中。添加外部JAR包(AddExternalJARs)是指JAR包在Eclipse項目工作區文件夾的外部,只能被鏈接或復制。拓展—添加JAR包任務1

Java數據庫操作步驟3:創建數據庫連接的BaseDao類(1)在SuperMarketManager項目下面的data包中創建一個BaseDao類,如圖6-1-14所示。連接數據庫-ywcntn任務1

Java數據庫操作(2)在BaseDao類中輸入數據庫連接代碼,代碼如下:MySQL5.0版本的驅動為com.mysql.jdbc.Driver,MySQL8.0及以上版本的驅動為com.mysq1.cj.jdbc.Driver。拓展—MySQL的驅動任務1

Java數據庫操作在創建數據庫連接時,通常會定義以下幾個變量:url(或者稱為jdbcUrl):這是一個字符串變量,用于指定數據庫的連接地址。具體的url格式取決于所使用的數據庫類型和驅動程序。它通常包括數據庫的協議、主機地址、端口號(如果需要)、數據庫名稱等信息。dbUser:這是用于連接數據庫的用戶名。在大多數數據庫系統中,連接數據庫需要提供合法的用戶名和密碼來驗證連接請求的合法性。這個用戶名通常是在數據庫創建用戶時指定的,具有特定的權限和訪問范圍。dbPwd:這是連接數據庫所需的密碼。密碼用于驗證連接時提供的用戶名的合法性,并確保只有授權的用戶可以訪問數據庫。拓展—創建數據庫連接,定義url、dbUser、dbPwd變量的作用是什么?任務1

Java數據庫操作步驟4:新建一個CustOperation類,完成會員信息數據庫中會員信息的增、刪、改、查方法(1)打開SuperMarketManager項目,在src包下面的view包中創建一個會員信息操作類,類名為CustOperation,導入所需要的類和包,創建會員類對象,代碼如下:任務1

Java數據庫操作(2)在CustOperation類中創建會員信息的數據庫的添加方法。任務1

Java數據庫操作數據庫的添加方法-nyac3o小提示定義sql語句,?為通配符,和數據庫中的字段一一對應。任務1

Java數據庫操作任務1

Java數據庫操作(3)在CustOperation類中創建會員信息的數據庫的刪除方法。數據庫的刪除方法-3puk0l任務1

Java數據庫操作(4)在CustOperation類中創建會員信息的數據庫的查詢方法。數據庫的查詢方法-v53iqx任務1

Java數據庫操作想一想如何獲取數據庫中的數據?任務1

Java數據庫操作(5)在CustOperation類中創建會員信息的數據庫的修改方法。數據庫的修改方法-4m124f任務1

Java數據庫操作在Java中,使用in.next()方法和直接賦值有明顯的區別,特別是在處理用戶輸入時。1.in.next()方法in.next()是Scanner類的方法,用于從標準輸入(通常是鍵盤)讀取下一個完整的單詞(以空格作為分隔符),并返回該單詞作為字符串。例如,如果用戶輸入了"HelloWorld",in.next()將返回"Hello",而不是整個"HelloWorld"。這個方法適合讀取和處理以空格分隔的輸入,例如一行中的單詞或者簡單的數據項。2.直接賦值直接賦值是指通過代碼中的賦值語句將一個值分配給變量,例如Stringinput="HelloWorld";。這種方式不涉及用戶輸入,而是在程序中顯式地將一個值賦予變量。拓展—利用in.next()輸入的數據與直接賦值有什么區別?任務1

Java數據庫操作(6)在CustOperation類中創建會員信息的數據庫的顯示方法。任務1

Java數據庫操作(7)在CustOperation類中創建loginshow方法,用來顯示主界面。任務1

Java數據庫操作(8)在CustOperation類中創建supermainshow方法,用來顯示登錄主界面。任務1

Java數據庫操作(9)在CustOperation類中創建custinformationmanagershow方法,用來顯示會員信息管理界面。任務1

Java數據庫操作想一想in.nextInt()與in.next()的區別是什么?任務1

Java數據庫操作(10)在CustOperation類中創建main()方法,創建類對象進行測試。任務1

Java數據庫操作步驟5:運行測試結果運行測試類,效果如圖6-1-1所示。任務1

Java數據庫操作知識點1:SQLSQL(structurequerylanguage,結構化查詢語言)被廣泛地應用于大多數數據庫中,使用SQL可以方便地查詢、操作、定義和控制數據庫中的數據。SQL主要分為以下幾類:DDL——數據定義語言(CREATE、ALTER、DROP、DECLARE);DML——數據操縱語言(SELECT、DELETE、UPDATE、INSERT);DCL——數據控制語言(GRANT、REVOKE、COMMIT、ROLLBACK)。在應用程序中,使用最多的就是數據操縱語言,它也是最常用的核心SQL。下面對操縱語言進行簡單的介紹。必備知識任務1

Java數據庫操作(1)select語句。數據庫中提供一種可以將表中的數據查詢出來的技術,稱為select查詢。語法格式如下:數據庫基礎知識-fqs1ow任務1

Java數據庫操作例如,查詢student表中所有的數據,代碼如下:查詢student表中的某些列,代碼如下:小提示*和列名只能二選一,不能同時出現任務1

Java數據庫操作查詢所有性別為女的學生的所有信息,代碼如下:(2)insert語句。insert語句用來向表中插入新數據。語法格式如下:任務1

Java數據庫操作SQL語言與JDBC_x0002_atpdwe任務1

Java數據庫操作例如,向student表(包含字段學生學號、姓名、性別、入校分數)中插入數據“20180023,張麗,女,560”,代碼如下:(3)update語句。update語句用來修改表的數據,使用where子句來選擇更新特定的記錄。語法格式如下:明德樹人OceanBase自主研發數據庫是目前阿里業務的重要基石,支撐著阿里的業務平穩地撐過了雙十一的嚴峻考驗,一次次地向世界證明國產數據庫的能力。目前國產企業正在更多地采取自研這條技術路線,打破技術封鎖。我們要樹立為國為家的責任感和擔當意識,將職業生涯、職業發展與國家的發展融合起來。任務1

Java數據庫操作例如,修改表student中學號為20182003的學生的年齡為20,代碼如下:(4)delete語句。delete語句可刪除表中的一行或多行,在SQLselect語句中可以使用的任何條件都可以在delect語句的where子句中使用。語法格式如下:任務1

Java數據庫操作例如,刪除表student中的所有數據,代碼如下:刪除表student中學號為20182003的所有數據,代碼如下:任務1

Java數據庫操作知識點2:JDBC概述JDBC是一種可用于執行SQL語句的JavaAPI,是連接數據庫和Java應用程序的紐帶。運行Java連接數據庫分為如下三個步驟:(1)加載數據訪問驅動。任務1

Java數據庫操作(2)創建數據庫連接。Connectionconn=DriverManager.getConnection(“jdbc:mysql://127.0.0.1:3306/mydb”,“root”,“123456”);或者“jdbc:mysql://localhost:3306/test”(mydb和test是創建數據庫的名字)。DriverManager是驅動管理器類,getConnection(url,數據庫登錄名,密碼)是獲得連接的方法。jdbc:mysql://localhost:3306/mydb中的“localhost:3306”是指本機地址,mydb是指數據庫名稱。小提示若向數據庫表中添加中文,url需改為:jdbc:mysql://127.0.0.1:3306/mydb?characterEncoding=utf-8任務1

Java數據庫操作(3)構建執行SQL命令。任務1

Java數據庫操作知識點3:JDBC中常用的類與接口Java語言提供了豐富的類和接口用于數據庫編程,利用這些類和接口可以方便地進行數據訪問和處理,這些類或接口都在java.sql包中。JDBC中常用的類與接口-eajyij任務1

Java數據庫操作在java.sql包中的類和接口主要針對基本的數據庫編程服務,如生成連接、執行語句以及準備語句和運行批處理查詢等。同時也有一些高級處理,如批處理更新、事務隔離和滾動結果集等。java.sql包中常見的接口如表6-1-1所示。任務1

Java數據庫操作(1)Connection接口。Connection接口與特定數據庫的連接(會話)過程包括所執行的SQL語句和在該連接上所返回的結果。Connection對象的數據庫能夠提供描述其表所支持的SQL語法、存儲過程、連接功能等信息。在配置Connection時,JDBC應用程序應該使用適當的Connection方法,如setAutoCommit(將連接的自動提交模式設置為給定狀態)或setTransactionIsolation(將Connection對象的事務隔離級別更改為給定的級別)。在有可用的JDBC方法時,應用程序不能直接調用SQL命令更改連接的配置。默認情況下,Connection對象處于自動提交模式下,這意味著它在執行每個語句后都會自動提交更改。如果禁用了自動提交模式,那么要提交更改就必須顯式調用commit方法,否則無法保存數據庫更改。小提示Connection接口是java集合的root接口,沒有實現類,只有子接口和實現子接口的各種容器。任務1

Java數據庫操作(2)Statement接口。Statement接口用于執行靜態SQL語句,并返回它所生成結果的對象。在默認情況下,同一時間每個Statement對象只能打開一個ResultSet對象。因此,如果讀取一個ResultSet對象與讀取另一個交叉,則這兩個對象必須是由不同的Statement對象生成的。如果存在某個語句打開當前ResultSet對象,則Statement接口中的所有執行方法都會隱式關閉它。Statement對象用Connection的方法createStatement創建,代碼如下:任務1

Java數據庫操作為了執行Statement對象,被發送到數據庫的SQL語句將被作為參數提供給Statement的方法,代碼如下:Statement對象將由Java垃圾收集程序自動關閉。而作為一種好的編程風格,應在不需要Statement對象時顯式地關閉它們。這將立即釋放DBMS資源,有助于避免潛在的內存問題。任務1

Java數據庫操作(3)PreparedStatement接口。PreparedStatement接口表示預編譯的SQL語句的對象。SQL語句被預編譯并存儲在PreparedStatement對象中。然后可以使用此對象多次高效地執行該語句。包含在PreparedStatement對象中的SQL語句可具有一個或多個IN參數。IN參數的值在SQL語句創建時未被指定。相反地,該語句為每個IN參數保留一個問號(“?”)作為占位符。每個問號的值必須在該語句執行之前,通過適當的方法(setShort、setString、setInt等)來提供。任務1

Java數據庫操作如果需要任意參數類型轉換,使用setObject方法時應該將目標SQL類型作為其參數。在以下設置參數的示例中,con表示一個活動連接,代碼如下:想一想PreparedStatement接口和Statement有什么不同?任務1

Java數據庫操作(4)DriverManager類。DriverManager類是JDBC的管理層,作用于用戶和驅動程序之間。它跟蹤可用的驅動程序,并在數據庫和相應驅動程序之間建立連接。另外,DriverManager類也處理諸如驅動程序登錄時間限制及登錄和跟蹤消息的顯示等事務。對于簡單的應用程序,一般程序員需要在此類中直接使用的唯一方法是DriverManager.getConnection,用于建立與數據庫的連接。JDBC允許用戶調用DriverManager的方法getDriver、getDrivers和registerDriver及Driver的方法connect。DriverManager類包含一列Driver類,它們已通過調用方法DriverManager.registerDriver對自己進行了注冊。所有Driver類都必須包含一個靜態部分。它創建該類的實例,然后在加載該實例時DriverManager類進行注冊。這樣,用戶正常情況下將不會直接調用DriverManager.registerDriver,而是在加載驅動程序時由驅動程序自動調用。任務1

Java數據庫操作加載Driver類,然后自動在DriverManager中注冊的方式有如下兩種:①通過調用方法Class.forName。這將顯式地加載驅動程序類。由于這與外部設置無關,因此推薦使用這種加載驅動程序的方法。例如,“Class.forName(“acme.db.Driver”);”為加載類acme.db.Driver。②通過將驅動程序添加到java.lang.System的屬性jdbc.drivers中。jdbc.drivers是一個由DriverManager類加載的驅動程序類名的列表,由冒號分隔,初始化DriverManager類時,它搜索系統屬性jdbc.drivers,如果用戶已輸入了一個或多個驅動程序,則DriverManager類將試圖加載它們。加載Driver類并在DriverManager類中注冊后,它們即可用來與數據庫建立連接。當調用DriverManager.getConnection方法發出連接請求時,DriverManager將檢查每個驅動程序,查看它是否可以建立連接。小提示getConnection方法需要在程序中指定數據庫連接相關的驅動名、數據庫URL、用戶名和密碼等信息。一旦連接成功建立,該方法將返回一個可用于執行SQL命令和事務處理的Connection對象。任務1

Java數據庫操作例如,用驅動程序建立連接,代碼如下:在上述代碼中,getConnection的主要作用是依據創建的url建立一個連接。在這里url表示一種標識數據庫的方法,可以使相應的驅動程序識別該數據庫并與之建立連接。任務1

Java數據庫操作(5)ResultSet接口。使用Statement對象執行executeQuery方法,會返回一個數據庫的結果集。結果集一般是一個表,其中有查詢所返回的列標題及相應的值。ResultSet記錄集中了包含符合SQL語句中條件的所有行,并且它通過一套get方法(這些get方法可以訪問當前行中的不同列)提供了對這些行中數據的訪問。ResultSet使用next方法移動到ResultSet中的下一行,使下一行成為當前行。ResultSet記錄集對象具有多個方法,其常用方法如表6-1-2所示。在JDBC中有3種執行sql的語句分別是execute,executeQuery和executeUpdate。execute執行增、刪、改、查操作,executeQuery執行查詢操作,executeUpdate執行增、刪、改操作。拓展—在JDBC中有3種執行sql的語句任務1

Java數據庫操作知識點4:數據庫操作要對數據庫進行操作,首先應該建立與數據庫的連接。通過JDBC的API中提供的各種類可以實現對數據表中的數據進行查找、添加、修改、刪除等操作。(1)連接數據庫。要訪問數據庫,首先要加載數據庫的驅動程序(只需要在第一次訪問數據庫的時候加載一次);然后每次訪問數據時創建一個Connection對象,執行操作數據庫的SQL語句;最后在完成數據庫操作后銷毀前面創建的Connection對象,釋放與數據庫的連接。任務1

Java數據庫操作例如,創建類BaseDao,并創建getConnection()方法,獲取與MySQL數據庫的連接,在主方法中調用該方法,代碼如下:任務1

Java數據庫操作任務1

Java數據庫操作通常,將數據庫驅動的jar包放置在Java項目的類路徑(classpath)中是最常見和推薦的做法。類路徑是Java虛擬機(JVM)用來查找類文件的位置之一。你可以將驅動jar包放置在以下幾個地方之一。1.項目的lib目錄下:在大多數Java項目中,可以在項目根目錄下創建一個lib文件夾,并將驅動jar包放在其中。然后在構建項目時,確保這些jar包被包含在類路徑中。2.項目的buildpath中:如果你使用的是集成開發環境(IDE)如Eclipse、IntelliJIDEA等,可以通過將驅動jar包添加到項目的構建路徑(buildpath)中來管理。IDE會自動處理類路徑問題。拓展—Java程序連接數據庫的驅動jar包放哪里?任務1

Java數據庫操作運行結果如圖6-1-15所示。任務1

Java數據庫操作(2)向數據庫發送SQL語句。getConnection方法只是獲取與數據庫的連接,要執行SQL語句首先要獲得Statement類對象,可以通過Connection對象執行createStatement方法獲得Statement對象,代碼如下:任務1

Java數據庫操作(3)處理查詢結果集。有了Statement對象后,可以調用相應的方法實現對數據庫的查詢和修改,并將查詢的結果存放在ResultSet類的對象中。代碼如下:查一查PreparedStatement和Statement有什么關系和區別?任務1

Java數據庫操作(4)預處理語句。statement每次執行SQL語句,相關數據庫都要執行SQL語句的編譯,如果不斷地向數據庫提交SQL語句,肯定會增加數據庫中SQL解釋器的負擔,影響執行的速度。對于JDBC,可以通過Connection對象的prepareStatement(sql)方法對SQL語句進行預處理,生成數據庫底層的內部命令,并將該命令封裝在PreparedStatement對象中,通過調用該對象的響應方法執行底層數據庫命令。這樣不用每次語句都重新進行一次SQL解析和編譯,相較于使用Statement能夠提高程序的性能。任務1

Java數據庫操作使用預處理語句分為下面三個步驟:①對于SQL進行預處理時可以通過使用通配符?來代替任何字段值。例如:小提示通配符?與set方法中的賦值必須一一對應。任務1

Java數據庫操作③設置好值后進行預處理。②在執行預處理語句前,必須用相應方法來設置通配符所表示的值。例如:任務1

Java數據庫操作知識點5:異常一般來說,程序在運行過程中各種情況都有可能發生,出現錯誤是難免的,有些錯誤是不可挽救的,如系統崩潰、電源故障等;而大多數錯誤是可以避免的,如要求的設備沒有準備好、讀取的文件不在指定的目錄中等。程序設計人員應預先估計可能出現錯誤的情況,并針對這些情況在程序中進行相應的處理。這在Java中被稱為異常處理。測試題-yxqcr1任務1

Java數據庫操作(1)異常的概念。任何一個程序,我們都不能說它是絕對安全的、正確無誤的。因為除了那些明顯可能造成的錯誤外,還有輸入錯誤、不可預見的條件錯誤和大量的運行環境所造成的錯誤等。尤其Java是一個網絡編程語言,網絡中可能出現不可預見的情況更多一些。例如,1個用戶、10個用戶、100個用戶訪問一個應用系統可能是正常的,但更多的用戶訪問它就有可能不正常了。要保證程序的質量,就必須在程序中處理可能發生的各種錯誤。所謂異常(exception)又被稱為例外,就是指在程序運行過程中可能會發生的各種各樣的錯誤,如系統類異常、運算類異常[數組下標越界、除數為零、算術溢出(超出了數值的表達范圍)等]、I/O類異常、網絡類異常等。為了處理異常,Java中定義了很多異常類,每個異常類代表了一種運行異常,類中定義了程序中可能遇到的異常條件及異常信息等內容。任務1

Java數據庫操作(2)異常類。Java使用錯誤或異常來指示處理程序時出現錯誤的情況,java.lang包中的Throwable類及其子類定義了Java程序中可能發生的錯誤和異常。其類的層次結構如圖6-1-16所示。想一想在執行程序過程中,常會遇到哪些異常?任務1

Java數據庫操作從上邊類的層次結構可以看出,Throwable類是所有錯誤(Error)和異常(Exception)類的父類。Error及其子類定義了系統或運行環境所產生的錯誤,所謂錯誤,一般都是嚴重的問題。在程序的運行中,它的產生是不可預料的,即便知道錯誤產生了,也沒有辦法去處理它。這是一類在程序中不應該也不能夠捕捉和處理的錯誤。Exception及其子類定義了所有常規的異常,這類異常發生的概率較高。事實上,把它劃分為兩種,一種是Java編譯器在編譯生成類代碼時發生錯誤所產生的異常,另一種是在程序運行過程中發生錯誤而產生的異常。我們在程序中要捕捉和處理的就是這種異常。Java中常見的異常類如表6-1-3所示。任務1

Java數據庫操作想一想程序開發中的異常就是指程序在運行中出現的一些錯誤,那么異常會導致整個程序崩潰嗎?任務1

Java數據庫操作(3)異常處理。Java異常處理主要通過4個關鍵字try、catch、throws、finally進行管理。在Java程序運行過程中如果發生了錯誤,系統就會產生一個與該錯誤相對應的異常類的對象,產生異常類對象的過程被稱為異常的拋出。如果要對異常進行處理,就必須在程序中對拋出的異常進行捕捉并安排相應的代碼處理異常。在程序運行過程中,一旦遇到錯誤就會拋出相應的異常,那么如何在程序中對需要處理的異常進行捕捉處理呢?任務1

Java數據庫操作Java提供了try-catch-finally語句塊結構,對程序中拋出的異常進行捕捉處理。該結構的一般格式如下:小提示try代碼塊中應包含可能引發一個或多個異常的代碼。所希望捕捉的可能會引發異常的語句代碼必須放在該塊中。catch代碼塊包含著用于處理一個由try塊中拋出的某一特定類型異常的代碼段。try塊中可能會拋出多個異常,要捕捉并處理這些異常,就需要對應有多個catch代碼塊。每一個catch代碼塊只能對應處理一類異常。任務1

Java數據庫操作①利用try/catch進行異常處理。例如,數組ArrayIndexOutOfBoundsException異常舉例。任務1

Java數據庫操作運行測試結果會出現異常提示,如圖6-1-17所示。任務1

Java數據庫操作因為數組中一共定義了3個數組元素,結果輸出時需要輸出5個數組元素,則會拋出ArrayIndexOutOfBoundsException異常,需要進行異常捕獲并處理異常,代碼如下:任務1

Java數據庫操作運行測試結果如圖6-1-18所示。小提示在本例中加入異常處理后會發現有提示語句“數組索引越界異常,請返回檢查下標是否正確!”出現,可以引起編寫代碼者的注意,從而達到避免出現問題的效果。任務1

Java數據庫操作②利用throws進行異常處理。一般來說,拋出異常有兩種方式:一是系統自動拋出異常,如系統在運行過程中遇到了異常,如空對象的引用(NullPointerException)、數組元素引用中下標超出邊界(IndexOutOfBoundsException)等,二是程序開發者根據設計要求在程序中主動創建異常對象,通過該對象的拋出告訴方法的調用者遇到了異常。throw語句用于在方法的內部拋出異常對象。其語句的一般格式如下:該語句一般用于自定義異常的拋出。任務1

Java數據庫操作如果知道在一個方法中會產生異常,但并不確切知道如何對異常進行處理或無須對異常進行處理,那么可以在定義方法時聲明可能會引發的異常。定義方法拋出異常的一般格式如下:[訪問限定符][修飾符][類型]方法名(聲明形參列表)throws異常列表在有些情況下,我們只需拋出異常,并不需要去捕獲或處理這些異常。小提示throw語句通常在一定條件下才會拋出異常,應把throw語句放在if語句中,只有當if條件滿足、用戶定義的邏輯錯誤發生時才執行。任務1

Java數據庫操作例如,拋出異常的代碼如下:任務1

Java數據庫操作因為當前類無法解決參數問題,所以通過拋出異常把問題交給調用者去解決。在main()方法中,調用者對象ex通過getMessage捕獲異常,然后進行異常處理。測試題-j5csop每課寄語黨的二十大報告指出:機遇和風險挑戰并存、不確定難預料因素增多的時期,各種“黑天鵝”、“灰犀?!笔录S時可能發生。我們必須增強憂患意識,堅持底線思維,做到居安思危、未雨綢繆,準備經受風高浪急甚至驚濤駭浪的重大考驗。本任務通過學習數據庫的操作,培養學生重視信息泄露和信息安全問題,樹立正確的職業道德和職業操守;樹立課程自信、民族自信的學習理念;培養學生面對突發事件及時反應解決問題的能力,培養在工作中學會靈活解決、臨場掌控問題的方法的能力。任務2泛型與集合類應用CurriculumDevelopmentTechnology1任務2泛型與集合類應用小明同學順利完成了項目中數據庫的操作,組長看過之后,提出程序的簡潔性、執行效率和健壯性方面有提升空間,他讓小明再對代碼進行優化,從而讓程序更加簡潔,執行效率更高,健壯性更好。小明通過集合類中的List集合的方法對任務1的內容進行了優化。完成后的部分效果如圖6-2-1所示。任務描述任務2泛型與集合類應用在本次任務中,要完成泛型與集合類,需要掌握如下技能:●通過整體任務實施,掌握泛型和集合類的意義與特點。●通過具體任務實施,掌握Collection接口,List、Set、Map集合聲明與應用。技術分析想一想對于CustList類的屬性設置,是使用什么方式進行定義的?任務2泛型與集合類應用步驟1:在項目data包中創建CustList類任務實施任務2泛型與集合類應用泛型與集合類應用任務講解-jpdfep任務2泛型與集合類應用步驟2:在data包中創建BaseDao類任務2泛型與集合類應用JDBC是Java標準的一部分,它提供了一種標準的接口來訪問各種關系型數據庫。java.sql.*包含了JDBC標準接口的類和接口定義,例如Connection、Statement、ResultSet等。這些接口定義了數據庫操作的標準方式,使得你的代碼在切換不同的數據庫時能夠保持一致性。為了保持代碼的清晰性、可移植性和標準化,推薦在使用JDBC時僅導入java.sql.*包,并依賴于DriverManager來加載特定數據庫的驅動程序。拓展—JDBC實現java操作數據庫過程中,為什么只導java.sql.*包而不導mysql.jdbc.*包呢?任務2泛型與集合類應用步驟3:在view包中創建CustOperationList類,主要完成增、刪、改、查方法的實現和調用(1)打開SuperMarketManager項目,在src包下面的view包中創建一個CustOperationList類,導入所需要的類和包,代碼如下:想一想是否可以不需要創建BaseDao類而直接創建數據庫的連接?任務2泛型與集合類應用(2)在CustOperationList類中創建會員顯示方法custshow。任務2泛型與集合類應用想一想添加會員信息之后,需要對數據庫進行什么操作?任務2泛型與集合類應用(3)在CustOperationList類中創建插入會員信息的add方法。任務2泛型與集合類應用(4)在CustOperationList類中創建刪除會員信息的del方法。任務2泛型與集合類應用(5)在CustOperationList類中創建修改會員信息的modify方法。想一想modify方法中為什么沒有利用sql語句進行修改呢?任務2泛型與集合類應用(6)在CustOperationList類中創建operationshow方法。任務2泛型與集合類應用(7)在CustOperationList類中創建main()方法。任務2泛型與集合類應用步驟4:運行測試結果如圖6-2-2所示。任務2泛型與集合類應用知識點1:集合類概述為了保存數量不確定的數據,以及保存具有映射關系的數據(也被稱為關聯數組),Java.util包中提供了一個集合類,這些集合類又被稱為容器,可以把多個對象(實際上是對象的引用,但習慣上都稱為對象)“丟進”該容器中。之前的Java集合會丟失容器中所有對象的數據類型,把所有對象都當成Object類型,從JavaSE5增加泛型以后,Java集合可以記住容器中對象的數據類型,從而可以編寫出更簡潔、更健壯的代碼。集合類主要負責保存、盛裝其他數據,因此集合類也被稱為容器類。必備知識任務2泛型與集合類應用集合類和數組不一樣,數組的長度是固定的,數組元素既可以是基本類型的值,也可以是對象(實際上保存的是對象的引用變量),而集合的長度是可變的,并且集合中只能保存對象(保存對象的引用變量)。常用的集合有List集合、Set集合和Map集合。Set代表無序、不可重復的集合,List代表有序、重復的集合,Map代表具有映射關系的集合。Set類似于一個罐子,把一個對象放入Set中時它無法記住放入的順序;List像一個數組,可以記住每次添加元素的順序,而且它的長度可變;Map也像一個罐子,無法記住添加順序,但是它的每個數據項都是由兩個值組成。拓展—Set類與Map類的區別任務2泛型與集合類應用Java的集合類主要由Collection和Map兩個接口派生而出,Collection和Map是Java集合框架的根接口,這兩個接口又包含了一些子接口或實現類。其中,List和Set繼承了Collection接口,各接口還提供了不同的實現類。上述集合類的繼承關系如圖6-2-3所示。任務2泛型與集合類應用知識點2:泛型“泛型”這個術語的意思是“適用于許多類型”,實質上就是使程序員定義安全的類型。在沒有出現泛型之前,Java也提供了對Object的引用“任意化”操作,這種操作就是對Object引用向下轉型或向上轉型操作,但某些強制類型轉換的錯誤也許不被編輯器捕捉,而在運行后出現異常,可見強制轉換存在安全隱患,所以提供了泛型機制。在JavaSE5中增加了泛型機制,實現了參數化類型的概念,使代碼可以應用于多種類型。Java泛型-kbevxm任務2泛型與集合類應用其中,T代表一個類型的名稱。(1)泛型類的定義。泛型類定義的格式如下:任務2泛型與集合類應用(2)舉例:創建一個OverClass類,該類定義了泛型類,代碼如下:小提示可以通過創建泛型類,如Box<T>,來存儲任意類型的對象,然后在創建實例時指定具體的類型,例如Box<Integer>或Box<String>。任務2泛型與集合類應用OverClass類引入了一個類型T,用尖括號<>括起來,并放在類名的后面。這就是泛型類,泛型類在聲明該類對象時可以根據不同的需求指定<T>真正的類型,而在使用類中的方法傳遞或返回數據類型時將不再需要進行類型轉換操作,而是使用在聲明泛型類對象時<>里面設置的數據類型。(3)泛型的常規用法。①定義泛型類時聲明多個類型,格式如下:其中,T1、T2代表可能被定義的類型,這樣在實例化指定類型的對象時就可以指定多個類型。小提示不能實例化泛型類型的數組。任務2泛型與集合類應用②定義泛型類時聲明數組類型。例如,創建一個ArrayClass類,在該類中定義泛型類聲明數組類型,代碼如下:任務2泛型與集合類應用知識點3:Collection接口(1)概述。Collection接口是層次結構中的根接口,構成Collection的單位稱為元素。Collection接口通常不能直接使用,但該接口提供了添加元素、刪除元素、返回Collection集合中的元素個數以及清空整個集合等方法。由于List接口和Set接口都繼承了Collection接口,因此這些方法對List集合和Set集合是通用的,并且Collection實現類都重寫了toString()方法,該方法可以一次性地輸出集合中的所有元素。集合類和Collection接口-ev2zqc任務2泛型與集合類應用Collection的常用方法如表6-2-1所示。小提示Collection接口有兩個重要的子接口List和Set,他們的實現子類都是單列集合(單個的元素)。任務2泛型與集合類應用如何遍歷集合中的所有元素呢?通常遍歷集合都是通過迭代器(iterator)來實現的,Collection接口中的iterator()方法可以返回在此Collection進行迭代的迭代器。當程序調用Iterable的forEach()方法遍歷集合元素時,程序會一次將集合元素傳給Consumer的accept(Tt)方法(該接口中唯一的抽象方法)。(2)舉例:在項目中創建類Test,在主方法中實例化集合對象,并向集合中添加元素,最后將集合中的對象以String形式輸出,代碼如下:小提示forEach方法本質上是調用了for循環,該方法是接口的default方法,是JDK8新增的語法。System.out::println這種語法稱為方法引用。forEach方法提供一個某種類型的Object(具體是什么類型要看Stream類的泛型參數<T>,不過一般就是這個集合提供的那種類型),而System.out.println可以接受一個Object,因此,forEach提供的參數和System.out.println的參數類型是一致的,所以.forEach(element->{System.out.println(element)})就可以簡化為.forEach(System.out::println),即forEach將會使用System.out對象的println方法進行接下來的操作。任務2泛型與集合類應用運行測試結果如圖6-2-4所示。任務2泛型與集合類應用知識點4:List集合List集合包括List接口及List接口的所有實現類。List集合中的元素允許重復,各元素的順序就是對象插入的順序。類似Java數組,用戶可以通過使用索引(元素在集合中的位置)來訪問集合中的元素。(1)List接口。List接口繼承了Collection接口,因此包含Collection中的所有方法。此外,List接口還定義了以下兩個非常重要的方法:get(intindex):獲得指定索引位置的元素。set(intindex,Objectobj):將集合中指定索引位置的對象修改為指定的對象。(2)List接口的實現類。List接口的常用實現類為ArrayList和LinkedList。任務2泛型與集合類應用ArrayList類實現了可變的數組,允許保存所有元素,包括null,并可以根據索引位置對集合進行快速的隨機訪問,缺點是向指定的索引位置插入對象或刪除對象的速度比較慢。LinkedList類采用鏈表結構保存對象。這種結構的優點是便于向集合中插入和刪除對象,需要向集合中插入、刪除對象時,使用LinkedList類實現的List集合的效率較高,但對于隨機訪問集合中的對象,使用LinkedList類實現List集合的效率比較低。任務2泛型與集合類應用(3)實例化List集合。ArrayList類實例化:在上面的代碼中,E可以是合法的Java數據類型。例如,如果集合中的元素為字符串類型,那么E可以修改為String。LinkedList類實例化:任務2泛型與集合類應用(4)舉例:在項目中創建類Test,在主方法中創建集合對象,通過Math類的隨機函數random隨機獲取集合中的某個元素,然后移除數組中索引位置為1的元素,最后遍歷數組輸出,代碼如下:任務2泛型與集合類應用運行測試結果如圖6-2-5所示。小提示集合的索引也是從0開始的。任務2泛型與集合類應用知識點5:Set集合Set集合中的對象不按照特定的方式排序,只是簡單地把對象加入集合中,但Set集合中不能包含重復對象。Set集合由Set接口和Set接口的實現類組成。Set接口繼承了Collection接口,因此包含Collection接口的所有方法。Set的構造方法有一個約束條件,傳入的Collection對象不能有重復值,必須小心操作可變對象。如果一個Set中的可變元素改變了自身狀態,容易出現問題。Set接口常用的實現類有HashSet類和TreeSet類。List集合和Set集合-qr2szg任務2泛型與集合類應用(1)HashSet類。HashSet類實現Set接口,Set集合的優點是能夠快速定位集合中的元素。由HashSet類實現的Set集合中的對象必須是唯一的,因此需要添加到由HashSet類實現的Set集合中的對象需要重新實現equals()方法,從而保證插入集合中對象的標志的唯一性。由HashSet類實現的Set集合按照哈希碼排序,根據對象的哈希碼確定對象的存儲位置,因此需要添加到由HashSet類實現的Set集合中的對象,還需要重新實現hashCode()方法,從而保證插入集合中的對象能夠合理地分布在集合中,以便于快速定位集合中的對象。由于Set集合中的對象是無序的,這里所謂的無序并不是完全無序,只是不像List集合按對象的插入順序保存對象。小提示HashSet可以存放空值,但是只能有一個null,HashSet不能保證元素是有序的(即存放元素和取出元素的順序不一定一致),不能有重復元素和對象。任務2泛型與集合類應用(2)TreeSet類。TreeSet類不僅實現了Set接口,還實現了java.util.SortedSet接口,從而保證在遍歷集合時按照遞增的順序獲得對象。遍歷對象時可能是按照自然順序遞增排列,因此存入用TreeSet類實現的Set集合的對象必須實現Comparable接口;也可能是按照指定比較器遞增排序,即可以通過比較器對用TreeSet類實現的Set集合中的對象進行排序。TreeSet類新增的方法如表6-2-2所示。任務2泛型與集合類應用(3)舉例:創建類TreeSetTest,在主方法中創建集合對象,向TreeSet中添加4個Integer對象,輸出集合中的第1個元素、最后1個元素、小于4的子集、大于5的子集和大于等于-3小于4的子集,代碼如下:小提示TreeSet判斷元素重復的方法和HashSet一樣,但同時它還會保持集合中元素處于有序狀態。任務2泛型與集合類應用運行測試輸出結果如圖6-2-6所示。任務2泛型與集合類應用知識點5:Map集合Map集合沒有繼承Collection接口,其提供的是鍵(key)到值(value)的映射。它是一種依照鍵存儲元素的容器,鍵很像下標,在List中下標是整數,在Map中鍵可以是任意類型的對象。Map中不能有重復的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論