Java Web應用開發技術課件 3-1應用JDBC實現新聞信息添加-知識準備_第1頁
Java Web應用開發技術課件 3-1應用JDBC實現新聞信息添加-知識準備_第2頁
Java Web應用開發技術課件 3-1應用JDBC實現新聞信息添加-知識準備_第3頁
Java Web應用開發技術課件 3-1應用JDBC實現新聞信息添加-知識準備_第4頁
Java Web應用開發技術課件 3-1應用JDBC實現新聞信息添加-知識準備_第5頁
已閱讀5頁,還剩32頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

任務三:新聞發布系統訪問數據庫JavaWeb應用開發技術01應用JDBC實現新聞信息添加任務描述本任務先介紹JDBC工作原理、JDBC常用類和應用程序接口(ApplicationProgramInterface,API)及其功能,然后應用JDBC技術連接MySQL數據庫,實現將新聞信息保存到數據庫表的操作。JDBC(JavaDataBaseConnectivity)是Java數據庫連接技術的簡稱。JDBC是Java數據庫連接規范,由一組使用Java語言編寫的類和接口組成,稱為JDBCAPI,位于java.sql以及javax.sql包中。JDBCAPI為Java開發人員操作數據庫提供了一個標準,可以為多種關系數據庫提供統一訪問。JDBC概念項目開發中,使用JDBC可以實現應用程序與數據庫之間的數據通信,簡單來說,JDBC的作用有以下3點。1.建立應用程序與數據庫之間的訪問連接2.將編寫好的SQL語句發送到數據庫執行(增、刪、改、查)3.對數據庫返回的結果進行處理JDBC的作用JDBC工作原理JDBC定義了一組標準接口,使得開發者可以使用相同的代碼結構來連接和操作不同的數據庫,而不需要關心底層數據庫的具體實現。JDBC通過驅動程序與數據庫進行通信。不同的數據庫廠商提供了不同的JDBC驅動程序,這些驅動程序實現了JDBCAPI,并與特定數據庫的底層通信協議相對應。JDBC使用DriverManager類來管理數據庫連接。開發者可以通過提供數據庫的URL、用戶名和密碼來獲取數據庫連接。獲取連接后,就可以通過JDBC的JavaAPI進行SQL語句執行數據的增、刪、改、查等操作。JDBC的工作原理Java應用程序SqlServerOracleJDBCDriverManagerSqlServerJDBC

驅動程序JDBCAPI

MySQLOracleJDBC

驅動程序MySQLJDBC

驅動程序不同數據庫廠商有不同的JDBC驅動,不同的JDBC驅動實現與不同數據庫的連接;不同數據庫廠商的JDBC驅動均有JDBCAPI中的DriverManager類來統一管理。小結JDBC是Java數據庫連接規范,各個數據庫廠商在遵循JDBC規范的基礎上提供訪問自己公司數據庫服務器的驅動才能保證應用程序與數據庫之間數據通信,所以遵循一定的規范和標準非常重要!在數據庫訪問中,保障數據的安全性非常重要!遵守職業規范與標準增強信息安全意識!交流與討論通過交流討論對問題進行深入的探索:回憶課程的要點,思考一下幾個問題:JDBC是什么?主要作用是什么?JDBC的工作原理是什么?開始加載并注冊驅動程序創建一個Connection對象創建一個Statement對象執行語句關閉ResultSet對象關閉Statement對象關閉連接結束使用ResultSet對象12345876添加JDBC驅動jar包1個準備天龍八步JDBC程序訪問數據庫的步驟Class.forName(JDBC驅動類);//

mySQL數據庫驅動類:com.mysql.jdbc.Driver//sqlserver數據庫驅動類:"com.microsoft.sqlserver.jdbc.SQLServerDriver"

第一步:加載并注冊驅動程序Connectioncon=DriverManager.getConnection(JDBCURL,數據庫用戶名,密碼);JDBCURL連接字符串是固定格式:jdbc:<子協議>:<子名稱>以下為mySQL的JDBCURL示例:jdbc:mysql://localhost:3306/news第二步:創建與數據庫連接Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery("SELECTa,b,cFROMTable1");第三、四步:創建一個Statement對象并執行SQL語句使用Connection對象創建Statement對象,并執行SQL語句以返回一個ResultSet對象,它包含執行查詢后所產生的結果集“localhost”代表本機;其它機器用機器名稱或IP地址數據庫名稱發送并執行SQL語句的步驟:數據庫端口號JDBCURL用來標識數據庫JDBC程序訪問數據庫的步驟—連接數據庫JDBC程序訪問數據庫的步驟while(rs.next()){intx=rs.getInt("a");Strings=rs.getString("b");floatf=rs.getFloat("c");}第五步:處理結果rs.close();stmt.close();con.close();第六、七、八步:關閉結果集、查詢語句及與數據庫的連接,釋放數據庫資源注意關閉的順序先ResultSet再Statement最后為Connection使用ResultSet對象的next()方法循環遍歷結果集釋放數據庫資源的步驟:方法getXXX提供了獲取當前行中某列值的途徑JDBC程序訪問數據庫的步驟---處理數據集JDBCAPI作用:供程序員調用的接口與類,集成在java.sql和javax.sql包中,核心類與接口:DriverManager類Connection接口Statement接口ResultSet接口ResultSetMetaData接口PreparedStatement接口CallableStatement接口JDBC常用類和接口Java應用程序數據庫JDBCAPI

DriverManager作用:載入各種不同的JDBC驅動,獲取Connection對象,與數據庫連接Connection作用:與數據庫通信,Connection最為重要的一個方法就是用來獲取Statement對象;Statement作用:用來向數據庫發送SQL語句ResultSet作用:獲取查詢結果集ResultSetMetaData接口:存放結果集元數據信息,有關從數據庫查詢返回的結果集對象和與數據庫相關的額外信息,由ResultSetMetaData對象提供PreparedStatement接口:擴展了Statement接口,提供方法使SQL語句提前編譯好,提高執行效率。CallableStatement接口:為所有的數據庫管理系統提供了一種以標準形式調用存儲過程的方法。JDBC常用類和接口DriverManager類常用方法:(1)DriverManager.registerDriver(newDriver())registerDriver()方法用于注冊驅動,但是在實際開發中并不推薦采用registerDriver()方法注冊驅動。在實際開發中推薦使用Class.forName("驅動包名.類名")加載驅動。MySQL5.x加載驅動類的代碼:Class.forName("com.mysql.jdbc.Driver")。MySQL8加載驅動類的代碼:Class.forName("com.mysql.cj.jdbc.Driver")。Oracle數據庫加載驅動類的代碼:Class.forName("oracle.jdbc.driver.OracleDriver")。JDBC常用類和接口(2)DriverManager.getConnection(StringURL,Stringuser,Stringpassword)getConnection()方法用來與數據庫建立連接。方法的第一個參數用于標識一個被注冊的驅動程序。JDBCURL的標準由以下3部分組成,各部分間用冒號分隔。<協議>:<子協議>:<子名稱>協議:JDBCURL中的協議總是jdbc。子協議:用于標識數據庫驅動程序子名稱:標識數據庫的方法。例如:對于MySQL數據庫連接,JDBCURL采用如下形式(sid表示數據庫名稱)。jdbc:mysql://localhost:3306/sidJDBC常用類和接口Connection接口常用方法(1)createStatement():創建向數據庫發送SQL語句的Statement對象。(2)prepareStatement(sql):創建向數據庫發送預編譯SQL語句的PrepareSatement對象。(3)prepareCall(sql):創建執行存儲過程的CallableStatement對象。(4)setAutoCommit(BooleanautoCommit):設置是否自動提交事務。(5)commit():提交對數據庫的改動并釋放當前連接持有的數據庫的鎖。(6)rollback():回滾當前事務中的所有改動并釋放當前連接持有的數據庫的鎖。JDBC常用類和接口例3-1使用JDBCAPI連接MySQL數據庫案例技能點:JDBC工作原理,數據庫訪問步驟,DriverManager類、Connection接口的應用。實現步驟如下。①在MySQL數據庫中做好準備,執行SQL命令createdatabasenews,新建新聞數據庫news。②打開IntelliJIDEA,創建一個新的JavaWeb項目,項目命名為newspro,在項目的src/main/java目錄下新建包和類:cn.sdcet.utils.BaseDao。③在IDEA中單擊項目架構ProjectStructure,選擇庫文件Libraries,單擊按鈕,將MySQL的驅動JAR包添加到項目依賴庫中。④在BaseDao類中編寫連接數據庫news的代碼。⑤編寫main()方法,運行Java應用程序,測試連接效果例3-1使用JDBCAPI連接MySQL數據庫packagecn.sdcet.util;importjava.sql.*;publicclassBaseDao{privatestaticfinalStringDRIVER="com.mysql.jdbc.Driver";privatestaticfinalStringURL="jdbc:mysql://localhost:3306/news?characterEncoding=UTF-8";//連接字符串privatestaticfinalStringUNAME="root";//MySQL用戶名privatestaticfinalStringUPWD="123456";//密碼protectedConnectioncon;protectedConnectiongetConnection()throwsException{//連接數據庫//加載并注冊驅動程序Class.forName(DRIVER);//創建數據庫連接對象con=DriverManager.getConnection(URL,UNAME,UPWD);returncon;}//釋放對象protectedvoidcloseAll(){try{if(con!=null){con.close();}}catch(SQLExceptione){e.printStackTrace();}}

publicstaticvoidmain(String[]args)throwsException{Connectioncon=newBaseDao().getConnection();if(con!=null){System.out.println("連接數據庫成功!");}}}JDBC常用類和接口文件運行結果如圖所示,控制臺中輸出了“連接數據庫成功!”,說明成功連接上了MySQL數據庫。Statement接口的常用方法:(1)executeQuery(Stringsql):用于向數據庫發送查詢語句,返回代表查詢結果的ResultSet對象。(2)executeUpdate(Stringsql):用于向數據庫發送INSERT、UPDATE或DELETE語句,返回一個整數(用于表示操作導致數據庫幾行數據發生了變化)。(3)execute(Stringsql):用于向數據庫發送任意SQL語句。(4)addBatch(Stringsql):把多條SQL語句放到一個批處理中。(5)executeBatch():發送一批SQL語句到數據庫并執行。JDBC常用類和接口ResultSet接口的常用方法:(1)獲取任意類型的數據的方法。getObject(intindex):通過下標獲取任意類型的數據。getObject(stringcolumnName):通過列名獲取任意類型的數據。(2)獲取指定類型的數據的方法。getString(intindex)、getString(StringcolumnName):獲取String類型的數據。getInt(intindex)、getInt(StringcolumnName):獲取Int類型的數據。(3)遍歷查詢結果集的方法。next():獲取下一行數據。JDBC常用類和接口JDBC常用類和接口遍歷查詢結果集的過程如圖所示。ResultSetMetaData接口常用方法如下:intgetColumnCount():返回ResultSet對象中的列數。JDBC常用類和接口PreparedStatement接口:(1)創建PreparedStatement對象以下代碼段(其中con是Connection對象)用于創建包含帶兩個IN參數占位符的SQL語句的PreparedStatement對象。PreparedStatementpstmt=con.prepareStatement("UPDATEtable4SETm=?WHEREx=?");pstmt對象包含語句UPDATEtable4SETm=?WHEREx=?,該語句已被發送給數據庫管理系統,并為執行做好了準備。(2)使用PreparedStatement對象如果發送的SQL語句中有輸入參數,則在執行PreparedStatement對象之前必須設置每個?的值。這可通過調用setXXX()方法來完成。例如,以下代碼將第一個參數設為123456789,第二個參數設為100000000。pstmt.setLong(1,123456789);pstmt.setLong(2,100000000);JDBC常用類和接口JDBC常用類和接口PreparedStatement接口與Statement接口的比較如表所示比較點PreparedStatementStatement關系子接口,繼承了Statement接口的所有功能,并添加了一系列設置占位符參數值的方法父接口SQL注入問題可以避免SQL注入問題存在SQL注入隱患執行效率可對SQL進行預編譯,提高SQL執行效率會使數據庫頻繁編譯SQL,可能造成數據庫緩沖溢出例3-2使用JDBC實現將新聞類別信息添加到新聞類別表案例技能點:JDBC工作原理,數據庫訪問步驟,JDBCAPI綜合應用。實現步驟如下。①在MySQL數據庫中做好數據準備,依據工作單元1中的數據庫設計,在news數據庫中新建新聞類別表NRC_TYPE(t_id,t_name,t_memo)。②打開IntelliJIDEA,基于項目newspro,在項目的src/main/java目錄下新建包和類:cn.sdcet.entity.Type。例3-2使用JDBC實現將新聞類別信息添加到新聞類別表③

在項目的src/main/java目錄下新建包cn.sdcet.dao,在此包下新建接口TypeDao,在接口中定義添加新聞類別的抽象方法add(),詳細代碼如下。packagecn.sdcet.dao;importcn.sdcet.entity.Type;importjava.util.List;public

interfaceTypeDao{

publicBooleanadd(Typetype);//添加新聞類別

}例3-2使用JDBC實現將新聞類別信息添加到新聞類別表④

在項目源代碼下新建包cn.sdcet.dao.impl,在此包下定義實現類TypeDaoImpl(繼承自BaseDao類),實現接口TypeDao,TypeDaoImpl類的詳細代碼如下。publicclassTypeDaoImplextendsBaseDaoimplementsTypeDao{//繼承自例3-1中的BaseDao類@OverridepublicBooleanadd(Typetype){Booleanflag=false;Stringsql="insertintonrc_type(t_id,t_name)value(?,?)";try{Connectioncon=super.getConnection();PreparedStatementpstm=con.prepareStatement(sql);pstm.setInt(1,type.getT_id());pstm.setString(2,type.getT_name());pstm.executeUpdate();flag=true;}catch(Exceptione){e.printStackTrace();}finally{super.closeAll();if(pstm!=null){try{pstm.close();}catch(SQLExceptionthrowables){throwables.printStackTrace();}}}returnflag;}}例3-2使用JDBC實現將新聞類別信息添加到新聞類別表⑤

在項目的cn.sdcet.dao包下新建測試類TestDao,代碼如下。publicclassTestDao{publicstaticvoidtestAdd(){System.out.println("*******添加新聞類別*******");System.out.println("請輸入新增新聞類別編號:");Scannerscan=newScanner(System.in);intt_id=scan.nextInt();System.out.println("請輸入新增新聞類別名稱:");Stringt_name=scan.next();Typetype=newType(t_id,t_name);booleanflag=newTypeDaoImpl().add(type);if(flag){System.out.println("添加成功!");}else{System.out.println("添加失敗!");}}publicstaticvoidmain(String[]args){testAdd();}}例3-2使用JDBC實現將新聞類別信息添加到新聞類別表運行測試類,運行結果如圖所示。例3-3查詢并輸出新聞類別表信息案例技能點:JDBC工作原理,數據庫訪問步驟,JDBCAPI綜合應用。實現步驟如下。①

在例3-2的項目代碼基礎上完成本案例。打開IntelliJIDEA,在項目的TypeDao接口中添加查詢新聞類別的search()方法,方法體代碼如下。packagecn.sdcet.dao;importcn.sdcet.entity.Type;importjava.util.List;public

interfaceTypeDao{

publicBooleanadd(Typetype);

publicListsearch();//查詢新聞類別}例3-3查詢并輸出新聞類別表信息②

在項目的TypeDaoImpl類中添加測試查詢新聞類別的testSearch()方法,方法體

溫馨提示

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

評論

0/150

提交評論