《Java軟件項目(BS架構(gòu))開發(fā)》6JDBC、JSP與用戶注冊處理_第1頁
《Java軟件項目(BS架構(gòu))開發(fā)》6JDBC、JSP與用戶注冊處理_第2頁
《Java軟件項目(BS架構(gòu))開發(fā)》6JDBC、JSP與用戶注冊處理_第3頁
《Java軟件項目(BS架構(gòu))開發(fā)》6JDBC、JSP與用戶注冊處理_第4頁
《Java軟件項目(BS架構(gòu))開發(fā)》6JDBC、JSP與用戶注冊處理_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第6章JDBC、JSP與用戶注冊處理

第1講JDBC學(xué)習(xí)目標掌握完本錢工程需要的JDBC和JSP的知識,包括JDBC的根本概念如何使用JDBC-ODBC訪問數(shù)據(jù)庫用戶注冊處理效勞器端的技術(shù)獲得用戶在注冊界面的輸入與數(shù)據(jù)庫保存的信息做比較根據(jù)比較結(jié)果返回不同頁面需要訪問數(shù)據(jù)庫的技術(shù)JDBCJava數(shù)據(jù)庫連接〔JavaDatabaseConnectivity〕技術(shù)的簡稱定義Java程序如何與數(shù)據(jù)庫交互使程序的開發(fā)獨立于數(shù)據(jù)庫產(chǎn)品的選擇JDBCAPIJava程序調(diào)用JDBCAPI中類和接口的方法來編寫訪問數(shù)據(jù)庫的代碼包java.sql中定義的JDBC類和接口構(gòu)成了JDBCAPIJava程序訪問數(shù)據(jù)庫的過程如下:JDBC驅(qū)動程序分為4種類型JDBC-ODBC橋接器本機API/局部Java驅(qū)動程序網(wǎng)絡(luò)協(xié)議/全Java驅(qū)動程序本機協(xié)議/全Java驅(qū)動程序JDBC-ODBC橋接器驅(qū)動程序

java.sql包

java.sql包

java.sql包中定義了很多重要的類和接口,以方便Java應(yīng)用程序開發(fā)者編寫訪問數(shù)據(jù)庫的程序java.sql中重要的類和接口包括:

類接口接口接口接口接口

使用JDBC-ODBC訪問SQLServer使用JDBC-ODBC訪問SQLServer的過程分為以下幾個步驟:建立數(shù)據(jù)庫和表創(chuàng)立DSN數(shù)據(jù)源編寫數(shù)據(jù)庫訪問程序建立數(shù)據(jù)庫和表使用SQLSever的EnterpriseManager,在SQLServer中建立一個數(shù)據(jù)庫test在test中建立表AccountInfo保存銀行客戶的賬戶信息創(chuàng)立DSN數(shù)據(jù)源翻開“控制面板〞-“管理工具〞-“數(shù)據(jù)源〞〔ODBC〕創(chuàng)立對應(yīng)數(shù)據(jù)庫test的DSN數(shù)據(jù)源test

編寫數(shù)據(jù)庫訪問程序?qū)DBC驅(qū)動程序裝載到JVM中");建立數(shù)據(jù)庫連接

Connectionconn=DriverManager.getConnection("jdbc:odbc:test");執(zhí)行SQL語句Statementstmt=conn.createStatement();StringstrQuery="select*fromAccountInfowhereaccountNo='A00001'"; ResultSetrs=stmt.executeQuery(strQuery);或1.

Statementstmt=conn.createStatement(); StringstrInsert="INSERTINTOAccountInfoVALUES('A00001','Mike',10000,'儲蓄帳戶','深圳深圳市紅嶺中路1011號

','82133846','mike@nonexisted')"; introws=stmt.executeUpdate(strInsert);處理結(jié)果配合結(jié)果集〔RecordSet〕對象的next()方法和setXXX〔或getXXX〕方法操作結(jié)果集訪問數(shù)據(jù)庫的語句需包含在try語句塊中執(zhí)行完后要注意關(guān)閉數(shù)據(jù)庫連接案例6-1:在數(shù)據(jù)庫test中的表AccountInfo中插入一行案例6-2:使用PreparedStatement對象實現(xiàn)在數(shù)據(jù)庫test中的表AccountInfo中插入一行,關(guān)鍵語句如下:"); Connectionconn=DriverManager.getConnection("jdbc:odbc:test"); PreparedStatementstmt=conn.prepareStatement("INSERTINTOAccountInfoVALUES

(?,?,?,?,?,?,?,?,?)"); //在表的各個字段插入數(shù)據(jù)stmt.setString(1,"A00001");stmt.setString(2,"Mike");stmt.setInt(3,10000);stmt.setString(4,"儲蓄帳戶");stmt.setString(5,"深圳");stmt.setString(7,"深圳市紅嶺中路1011號");stmt.setString(8,"82133846");stmt.setString(9,"mike@nonexisted");//執(zhí)行修改,row返回0操作失敗,大于0成功introws=stmt.executeUpdate();StringacNo="A00001";"); Connectionconn=DriverManager.getConnection("jdbc:odbc:test"); Statementstmt=conn.createStatement(); StringstrQuery="select*fromAccountInfowhereaccountNo='"+acNo+"'"; ResultSetrs=stmt.executeQuery(strQuery);案例6-3:實現(xiàn)查詢并顯示表AccountInfo中的賬號為A00001賬戶信息。關(guān)鍵代碼如下:while(rs.next()) {//從結(jié)果集中獲得各字段的值并顯示 Stringname=rs.getString("ownerName"); floatbalance=rs.getFloat("balance"); StringacType=rs.getString("accountType"); Stringbranch=rs.getString("branch"); StringID=rs.getString("idNo"); Stringaddr=rs.getString("address");StringwPhone=rs.getString("phone"); Stringemail=rs.getString("email");……}練習(xí)在Sqlserver中建一個student數(shù)據(jù)庫在student中建一個表score,包含字段學(xué)號id,姓名name,和總分totalScore,創(chuàng)立對應(yīng)數(shù)據(jù)庫student的ODBC數(shù)據(jù)源,可以隨便命名,如stu等。編寫java程序往表中插入2行20040201王紅67020040202李明598再編寫java程序,查詢學(xué)號是20040201的同學(xué)的總分.案例6-4:刪除表AccountInfo中的賬號為“A00001〞的賬戶信息,關(guān)鍵代碼如下:");Connectionconn=DriverManager.getConnection("jdbc:odbc:test");Statementstmt=conn.createStatement();StringstrUpdate="DELETEaccountInfoWHEREaccountNo='A00001'";introws=stmt.executeUpdate(strUpdate);

再考慮“歡送頁面〞的實現(xiàn)將訪問次數(shù)保存到數(shù)據(jù)庫中每翻開歡送頁面1次,就修改訪問次數(shù)的值,使其加1如果用Servlet〔繼承HttpServlet〕實現(xiàn)歡送頁面,那么每請求一次這個Servlet,就會調(diào)用這個Servlet的doGet()方法一次。也就是在doGet()方法中,修改數(shù)據(jù)庫,將訪問次數(shù)加1修改數(shù)據(jù)庫的SQL語句UPDATE表名SET字段名=值WHERE條件訪問次數(shù)保存在表ViewNum中,該表只有一個字段num,只需要一個記錄來保存訪問次數(shù),所以SQL語句為UPDATEViewNumsetnum=num+1案例6-5:改寫案例4-5,改用數(shù)據(jù)庫保存計數(shù)器的值重寫init()方法,從數(shù)據(jù)庫中讀出計數(shù)器的值重寫destroy()方法,將計數(shù)器的值保存到數(shù)據(jù)庫中歡送頁面的實現(xiàn)用Servlet和JDBC實現(xiàn)歡送頁面主要內(nèi)容歡送頁面的需求JDBC相關(guān)知識Servlet相關(guān)知識歡送頁面的實現(xiàn)歡送頁面歡送頁面是一個動態(tài)頁面大局部顯示信息都是固定不變的,用文本、超連接、圖片、表格〔定位〕、滾動文字等就可以完成但每次請求歡送頁面,顯示的網(wǎng)頁訪問次數(shù)都會改變“該網(wǎng)頁已經(jīng)被訪問XX次〞問題:如何實現(xiàn)這個動態(tài)網(wǎng)頁?實現(xiàn)思路需要保存訪問次數(shù)并能及時更新訪問次數(shù):用數(shù)據(jù)庫保存訪問次數(shù)自定義一個Servlet實現(xiàn)對每次請求修改數(shù)據(jù)庫使訪問次數(shù)加1,然后讀出并顯示對數(shù)據(jù)庫的訪問〔修改和讀出訪問次數(shù)〕用JDBCJDBC相關(guān)知識SQL語句使用SQL語句訪問數(shù)據(jù)庫的舉例JDBC編寫Java程序,使用JDBC訪問數(shù)據(jù)庫舉例SQL語句SQL語句是訪問數(shù)據(jù)庫的語句,主要有在表中插入一行,語法:

INSERTINTO表名VALUES(第一個字段的值,第二個字段的值,…)

查詢表中滿足條件的行,語法:

SELECT*FROM表名WHERE條件

修改表中滿足條件的行,語法:

UPDATE表SET字段名=字段的新值WHERE條件

刪除表中滿足條件的行,語法:

DELETE表名WHERE條件用SQL語句訪問數(shù)據(jù)庫舉例

數(shù)據(jù)庫test,表Runtimes(numinteger),在num字段保存程序運行的次數(shù)INSERTINTORuntimesvalue(0)SELECT*FROMRuntimesUPDATERuntimessetnum=num+1DELETERuntimesJDBC可以使用JDBC〔即包java.sql〕編寫java程序訪問數(shù)據(jù)庫,具體就是通過加載數(shù)據(jù)庫驅(qū)動器建立數(shù)據(jù)庫連接對象通過數(shù)據(jù)庫連接對象創(chuàng)立語句對象通過語句對象的方法executeQuery()和executeUpdate()向數(shù)據(jù)庫發(fā)送SQL語句操作數(shù)據(jù)庫可以給出程序被運行多少次的Java程序?qū)⒊绦蜻\行次數(shù)保存到數(shù)據(jù)庫的表Runtimes中,初始化其值為0每次運行程序時都將數(shù)據(jù)庫中的運行次數(shù)加1然后讀出并顯示classRunTimes{ publicstaticvoidmain(String[]s){ intcounter=0; try{ //加載或注冊驅(qū)動〞);//創(chuàng)立數(shù)據(jù)庫連接Connection對象 conn=("jdbc:odbc:test","sa","");

//通過數(shù)據(jù)庫連接對象創(chuàng)立語句Statement對象 stmt=conn.createStatement();

//通過語句對象執(zhí)行修改SQL語句,將運行次數(shù)加1 introws=stmt.executeUpdate("UPDATEruntimessetnum=num+1");//通過語句對象執(zhí)行查詢SQL語句并將結(jié)果//返回給結(jié)果集ResultSet對象rs=stmt.executeQuery("SELECT*FROMruntimes");//while循環(huán)逐行處理結(jié)果集,其實只有一行,讀出這行的num字段的值到//counter while(rs.next()){counter=rs.getInt("num");} }catch(Exceptione){System.out.println(e);} ("你運行了本程序"+counter+"次!"); }}Servlet復(fù)習(xí)Servlet是特殊的Java類跟Servlet生命周期相關(guān)的3個方法Servlet是特殊的Java類繼承javax.servlet.GenericServlet或javax.servelt..HttpServlet或?qū)崿F(xiàn)接口,如圖示不能獨立運行,需要效勞器加載只在第一次被請求時〔如第一個訪問歡送頁面的用戶的請求〕加載,以后常駐在效勞器中,不用加載即可處理以后的請求〔如其他用戶訪問歡送頁面的請求〕直到被卸載自定義Servlet及其父類之間的繼承關(guān)系

返回Servlet中已經(jīng)聲明了init(),service()和destroy()方法HttpServlet中已經(jīng)聲明了doGet()和doPost()方法

YourOwnServletHttpServletGenericServletServlet與Servlet生命周期相關(guān)的方法與Servlet生命周期〔從加載到卸載之間〕相關(guān)的特殊的3個方法init():被效勞器加載時調(diào)用service():每次被請求時都調(diào)用這個方法。Service()方法會根據(jù)是get還是post請求自動調(diào)用doGet()或doPost()方法。需要Servlet完成的工作〔如將計數(shù)器加1〕在這些方法中實現(xiàn)destroy():被效勞器卸載時調(diào)用輸出靜態(tài)網(wǎng)頁的Servletimport.*;importjava.io.*;//繼承類publicclassHTMLServletextendsHttpServlet{//重定義doGet()方法完本錢Servlet的功能:返回輸出“你好〞的網(wǎng)頁 publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{//設(shè)置字符集,使中文正確顯示 response.setContentType("text/html;charset=GB2312");//獲得返回到客戶端的輸出流對象out PrintWriterout=response.getWriter();//往客戶端輸出<html>標記 out.println("<html>");

//以下語句輸出網(wǎng)頁的其他標記及網(wǎng)頁內(nèi)容“你好!〞out.println("<head><title>helloWorldServlet</title></head>");out.println("<body>");out.println("你好!");out.println("</body>");out.println("</html>");}}歡送頁面的實現(xiàn)自定義一個繼承HttpServlet的Servlet來實現(xiàn)借鑒顯示程序運行次數(shù)的方法來實現(xiàn)創(chuàng)立表ViewNum(numinteger)保存訪問頁面的次數(shù),初始化其值為0在doGet()方法中,將保存在數(shù)據(jù)庫中的頁面訪問次數(shù)加1,并讀出顯示。靜態(tài)內(nèi)容用out.print()語句輸出。實現(xiàn)歡送頁面用SQLServer的“企業(yè)管理器〞創(chuàng)立數(shù)據(jù)庫和表,用“控制面板〞-“管理工具〞-“ODBC數(shù)據(jù)源〞創(chuàng)立對應(yīng)數(shù)據(jù)庫的數(shù)據(jù)源welcome.java給出了實現(xiàn)歡送頁面的框架代碼,補充并完成參照教材102頁實訓(xùn)步驟〔3〕到〔9〕部署并調(diào)試JSP學(xué)習(xí)目標掌握JSP的標記和內(nèi)建對象JSP如何獲得用戶在客戶端錄入的信息,如何向客戶端輸出,如何轉(zhuǎn)向其他頁面及如何傳遞參數(shù)和其他信息,如何進行錯誤處理完成效勞器端的用戶注冊處理用戶注冊處理效勞器端的技術(shù)獲得用戶在注冊界面的輸入與數(shù)據(jù)庫保存的信息做比較根據(jù)比較結(jié)果返回不同頁面需要訪問數(shù)據(jù)庫的技術(shù)JSP

JSP〔JavaServerPages〕是Sun公司推出的另一項創(chuàng)立動態(tài)網(wǎng)頁的技術(shù)JSP網(wǎng)頁就是嵌入Java代碼的HTML文檔JSP轉(zhuǎn)換成一個ServletJSP與Servlet

JSP編程相比照較容易JSP創(chuàng)立的動態(tài)網(wǎng)頁,用HTML描述靜態(tài)局部,用Java代碼產(chǎn)生動態(tài)內(nèi)容JSP是自動編譯的,調(diào)試比較方便案例6-6用jsp實現(xiàn)案例4-2類似的功能,只需要嵌入2行java語句,可直接運行response.setContentType("text/html;GB2312");out.println(request.getParameter("name"));JSP的標記

使用“<%〞與“%>〞標注JSP中需要執(zhí)行的Java代碼案例6-7:嵌入java代碼對時間進行判斷,輸出不同的歡送信息用“<%!〞與“%>〞聲明變量和方法<%!intctrl=0;%>用“<%=〞與“%>〞顯示表達式的值<%=new()%>案例6-8:使用聲明標記和表達式標記修改案例6-7命令標記

使用命令標記設(shè)置JSP頁面的屬性〔page命令〕在JSP頁面引入其他的文件〔include命令〕導(dǎo)入標記庫〔taglib命令〕動作標記JSP的動作標記使得JSP可與其他效勞器端組件交互使用JavaBeanjsp:useBeanjsp:setPropertyjsp:getProperty動態(tài)加載Servlet或其他JSPjsp:includejsp:param

案例6-9:引用其他頁面的同時傳遞一個參數(shù)值跳轉(zhuǎn)到Servlet或其他JSPjsp:forwardjsp:param案例6-10:從一個JSP跳轉(zhuǎn)到另一個JSP并傳遞參數(shù)與Java插件相互作用jsp:plugin注釋標記JSP文檔中有3類注釋標記:HTML的“<!--〞標記和“-->〞標記java的“//〞或“/*〞與“*/〞組合注釋標記JSP注釋標記“<%--〞和“--%>〞JSP的內(nèi)建對象requestresponseoutsessionexceptionpageContextapplicationpageconfig

request對象類的一個對象包含請求信息,可通過方法獲得請求的信息,如getParameterNames()得到所有參數(shù)的名稱getParameter()和getParameterValues()得到參數(shù)值,案例6-9中已經(jīng)使用參數(shù)包括:表單域中傳遞過來的參數(shù)地址欄傳遞過來的參數(shù)jsp:param傳遞過來的參數(shù)

getParameter()只是適用于只有一個值的請求參數(shù)請求參數(shù)重名時,如復(fù)選框,使用getParameterValues()更方便,案例6

溫馨提示

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

評論

0/150

提交評論