JDBC與數(shù)據(jù)庫(kù)連接.ppt
《JDBC與數(shù)據(jù)庫(kù)連接.ppt》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《JDBC與數(shù)據(jù)庫(kù)連接.ppt(62頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
JSP與JDBC數(shù)據(jù)庫(kù)連接,深圳職業(yè)技術(shù)學(xué)院范新?tīng)N,,數(shù)據(jù)庫(kù),,JDBC技術(shù),JDBC(JavaDataBaseConnectivity):是一種可用于執(zhí)行SQL語(yǔ)句的API(ApplicationProgrammingInterface,應(yīng)用程序設(shè)計(jì)接口)JDBC是第一個(gè)標(biāo)準(zhǔn)化地把關(guān)系數(shù)據(jù)庫(kù)和Java程序集成到一起的嘗試;JDBC已經(jīng)發(fā)揮了可以集成到Java小程序和應(yīng)用程序中的所有的關(guān)系數(shù)據(jù)庫(kù)的能力。,JDBC的能力,JDBC能實(shí)現(xiàn)的功能:與一個(gè)數(shù)據(jù)庫(kù)建立連接;向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句;處理數(shù)據(jù)庫(kù)返回的結(jié)果。,JDBC兩層模型,,兩層模型中,一個(gè)JavaApplet或者一個(gè)Java應(yīng)用程序直接同數(shù)據(jù)庫(kù)連接;數(shù)據(jù)庫(kù)可以在同一機(jī)器上,也可以在另外一臺(tái)機(jī)器上,通過(guò)網(wǎng)絡(luò)進(jìn)行連接,此即為客戶(hù)機(jī)/服務(wù)器結(jié)構(gòu),用戶(hù)的計(jì)算機(jī)作為客戶(hù)機(jī),運(yùn)行數(shù)據(jù)庫(kù)的計(jì)算機(jī)作為服務(wù)器,JDBC三層模型,使用JDBC-ODBC橋接器訪問(wèn)數(shù)據(jù)庫(kù),利用ODBC驅(qū)動(dòng)程序訪問(wèn)JDBC訪問(wèn);建立這種橋接器后,使得JDBC有能力訪問(wèn)所有類(lèi)型的數(shù)據(jù)庫(kù);必須設(shè)置數(shù)據(jù)源。,課堂練習(xí):數(shù)據(jù)庫(kù)的建立與數(shù)據(jù)源的設(shè)置,建立數(shù)據(jù)庫(kù)“students”(本課采用SQLServer2000數(shù)據(jù)庫(kù));建立表:students;表的字段:學(xué)號(hào)姓名數(shù)學(xué)成績(jī)英語(yǔ)成績(jī)物理成績(jī)?cè)O(shè)置數(shù)據(jù)源:“sun”步驟:控制面板——ODBC數(shù)據(jù)源——系統(tǒng)(用戶(hù))DSN——添加——不同數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序——完成——數(shù)據(jù)源名——選擇數(shù)據(jù)庫(kù)測(cè)試程序:Example5_1.jsp,JDBC-ODBC橋接器,加載橋接器驅(qū)動(dòng)程序:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);Class是包java.lang中的一個(gè)類(lèi),該類(lèi)調(diào)用靜態(tài)方法forName就可以建立橋接器。注意:處理異常。try{Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);catch(ClassNotFoundExceptione){},連接到數(shù)據(jù)庫(kù),使用包java.sql中的Connection類(lèi)聲明一個(gè)對(duì)象;使用類(lèi)DriverManager調(diào)用靜態(tài)方法getConnection創(chuàng)建這個(gè)連接對(duì)象Connectioncon=DriverManager.getConnection(“jdbc:odbc:數(shù)據(jù)源名字”,”loginname”,”password”);,例:與數(shù)據(jù)庫(kù)students建立連接,假設(shè)數(shù)據(jù)庫(kù)students的數(shù)據(jù)源的名稱(chēng)為sun,建立的方法為:try){Connectioncon=DriverManage.getConnection(“jdbc:odbc:sun”,”sa”,””);catch(SQLExceptione){},向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句,首先用Statement聲明一個(gè)SQL語(yǔ)句對(duì)象;調(diào)用連接數(shù)據(jù)庫(kù)的對(duì)象con調(diào)用方法createStartment()創(chuàng)建SQL對(duì)象;try{Statementsql=con.createStatement();}Catch(SQLExceptione){},處理查詢(xún)結(jié)果,利用SQL語(yǔ)句對(duì)象,調(diào)用方法對(duì)表查詢(xún)和修改;查詢(xún)對(duì)象放在一個(gè)ResultSet類(lèi)聲明的對(duì)象中,即返回一個(gè)ResultSet對(duì)象:ResultSetrs=sql.executeQuery(“select*from表名”);ResultSet對(duì)象一次只能看到一個(gè)數(shù)據(jù)行,使用next()方法移到下一數(shù)據(jù)行:rs.next(),取得數(shù)據(jù)表中的數(shù)據(jù),為取得記錄指針當(dāng)前指向記錄的各個(gè)字段的數(shù)據(jù),可以根據(jù)字段的數(shù)據(jù)類(lèi)型使用getXXX方法。語(yǔ)法格式:rs.getXXX(“字段名稱(chēng)”);針對(duì)數(shù)據(jù)庫(kù)中不同字段的數(shù)據(jù)類(lèi)型,取得字段數(shù)據(jù)的getXXX方法。例如:rs.getString(1)rs.getInt(“數(shù)學(xué)成績(jī)”),利用While循環(huán)獲取數(shù)據(jù)表中所有記錄,利用ResultSet對(duì)象在建立時(shí),記錄指針指向第一條記錄之前,結(jié)合ResultSet對(duì)象提供的next方法,在while循環(huán)中移動(dòng)記錄指針,向下逐條地將數(shù)據(jù)庫(kù)中的記錄依次獲取,在移動(dòng)到記錄的最后一條,由next方法返回值false來(lái)結(jié)束循環(huán)。語(yǔ)法結(jié)構(gòu):while(rs.next()){rs.getXXX(“字段名稱(chēng)”);……},練習(xí)拓展,將程序Example.jsp改為在dreamweaver中設(shè)計(jì)頁(yè)面;查詢(xún)英語(yǔ)成績(jī)大于80分的同學(xué),結(jié)果只顯示“姓名”和“英語(yǔ)成績(jī)”;增加“班級(jí)”字段,在頁(yè)面顯示數(shù)據(jù)。,思考,如何在結(jié)果集中前后移動(dòng)?如何按照逆序輸出記錄?如何指定顯示一條記錄?,游動(dòng)查詢(xún)(重點(diǎn)內(nèi)容),Statement對(duì)象的建立:Statementstatement=con.createStatement(inttype,intconcurrency);Type(滾動(dòng)方式)默認(rèn)值:TYPE_FORWARD_ONLYconcurrency(數(shù)據(jù)一致性)默認(rèn)值:COUCUR_READ_ONLY此時(shí),指針只能向前移動(dòng),而且ResultSet對(duì)象中的數(shù)據(jù)只能讀而不能修改;,type的取值,type的取值決定滾動(dòng)方式,取值還可以是:TYPE_SCROLL_SENSITIVE指針能夠向前或向后自由移動(dòng),其他ResultSet對(duì)象變動(dòng)指針時(shí),會(huì)影響指針的位置;TYPE_SCROLL_INSENSITIVE指針能夠向前或向后自由移動(dòng),其他ResultSet對(duì)象變動(dòng)指針時(shí),不會(huì)影響指針的位置。,Concurrency取值,Concurrency取值決定是否可以用數(shù)據(jù)集更新數(shù)據(jù)庫(kù)CONCUR_READ_ONLY:不能用結(jié)果集更新數(shù)據(jù)庫(kù)中的表;CONCUR_UPDATEABLE:ResultSet對(duì)象中的數(shù)據(jù)可以讀也可以修改,不能用結(jié)果集更新數(shù)據(jù)庫(kù)中的表;,ResultSet的一些方法:,previous()、beforeFirst()、afterLast()、first()、last()、isAfterLast()、isBeforeFirst()、isFirst()、isLast()、getRow()、absolute(introw)。注意absolute(introw):如果row取負(fù)值,就是倒數(shù)的行數(shù);absolute(-1)表示移到最后一行,當(dāng)移動(dòng)到第一行前面或最后一行的后面時(shí),該方法返回false。,逆序取得數(shù)據(jù)表中的記錄,順序查找:Statementsql=con.createStatement();逆序查找:Statementsql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);//返回可滾動(dòng)的結(jié)果集,rs的創(chuàng)建方法不改變。,逆序取得數(shù)據(jù)表中的記錄(2),把記錄指針移動(dòng)到數(shù)據(jù)表記錄的最后一條;結(jié)合ResultSet對(duì)象提供的previous方法,在while循環(huán)中移動(dòng)記錄指針,向上逐條地將數(shù)據(jù)庫(kù)中的記錄依次獲?。辉谝苿?dòng)到記錄的最前一條,由previous方法返回值false來(lái)結(jié)束循環(huán)。rs.last();out.print("該表共有"+rs.getRow()+"條記錄");rs.afterlast();while(rs.previous()){rs.getXXX(“字段名稱(chēng)”);……},SQL語(yǔ)言,SQL(StructuredQueryLanguage,結(jié)構(gòu)查詢(xún)語(yǔ)言):是關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的標(biāo)準(zhǔn)語(yǔ)言,主要功能是與各種數(shù)據(jù)庫(kù)進(jìn)行聯(lián)系、通信,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的控制與管理;關(guān)系數(shù)據(jù)庫(kù)系統(tǒng):Oracle、Sybase、MicrosoftSQLServer、Acess等,都采用SQL作為數(shù)據(jù)庫(kù)的操作語(yǔ)言。,DML(DataManipulationLanguage,數(shù)據(jù)操作語(yǔ)言);,用于執(zhí)行數(shù)據(jù)庫(kù)的檢索或者修改數(shù)據(jù),其分為以下幾個(gè)語(yǔ)句:SELECT用于檢索數(shù)據(jù);INSERT用于增加數(shù)據(jù)到數(shù)據(jù)庫(kù);UPDATE用于從數(shù)據(jù)庫(kù)中修改現(xiàn)存的數(shù)據(jù);DELETE用于從數(shù)據(jù)庫(kù)中刪除數(shù)據(jù);,SELECT語(yǔ)句,是SQL的核心,主要用于查詢(xún)數(shù)據(jù)庫(kù)并檢索匹配指定條件的選擇數(shù)據(jù),語(yǔ)法格式為:SELECT字段名稱(chēng)1[,字段名稱(chēng)2,……]FROM數(shù)據(jù)表名1[,數(shù)據(jù)表名2……][GROUPBY”字段名稱(chēng)”][HAVING”分組條件”][ORDERBY”字段名稱(chēng)”[升序(ASC)|降序(DESC)]],練習(xí),數(shù)據(jù)庫(kù):student數(shù)據(jù)源:student程序:sql_select.jsp(數(shù)據(jù)查詢(xún)語(yǔ)句測(cè)試)sql_recordPoint.jsp(數(shù)據(jù)插入、刪除、修改測(cè)試)sql_while.jsp(逆序獲取記錄)sql_iud.jsp(記錄指針)要求:利用4個(gè)jsp程序,練習(xí)sql語(yǔ)句。,SELECT基本語(yǔ)句的應(yīng)用,基本SELECT語(yǔ)句是指將數(shù)據(jù)表中的數(shù)據(jù)在不經(jīng)過(guò)條件提取的情況下提取的全部數(shù)據(jù);格式:SELECT*FROMSTUDENT(表名)例如:SELECTID,NAME,CHINESE,MATHS,PYSICS,CHEMISTRYFROMSTUDENT,WHERE子句的應(yīng)用,可選語(yǔ)句,是對(duì)數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行有條件的查詢(xún);語(yǔ)法結(jié)構(gòu):where“查詢(xún)數(shù)據(jù)滿(mǎn)足的條件”;LIKE運(yùn)算符:滿(mǎn)足與用戶(hù)規(guī)定格式相同的記錄,可與”%”,”_”,”#”配合使用;通配符”%”:用來(lái)代替一個(gè)未知的字符串例如:select*fromstudentwherenamelike‘李%’,查找姓李的所有同學(xué)的數(shù)據(jù),通配符“_”,“_”用來(lái)代替一個(gè)未知的字符例如:select*fromstudentwherenamelike‘李_’語(yǔ)句意義:查找只有兩個(gè)字符,而且第一個(gè)字符必須為“李”的同學(xué)的數(shù)據(jù);,比較運(yùn)算符,運(yùn)用比較運(yùn)算符(1),等于運(yùn)算符(=)語(yǔ)句實(shí)例:select*fromstudentwherechinese=92大于運(yùn)算符:(>)語(yǔ)句實(shí)例:select*fromstudentwherechinese>75小于運(yùn)算符:(<)語(yǔ)句實(shí)例:select*fromstudentwherechinese=)語(yǔ)句實(shí)例:select*fromstudentwherechinese>=75小于等于運(yùn)算符:()語(yǔ)句實(shí)例:select*fromstudentwherechinese75,NOT運(yùn)算符,語(yǔ)法結(jié)構(gòu):wherenot字段名稱(chēng)1like…;或者wherenot字段名稱(chēng)1notlike…;語(yǔ)句實(shí)例:select*fromstudentwherenotnamelike李%;或者:select*fromstudentwherenamenotlike李%;語(yǔ)句意義:查詢(xún)不姓李的同學(xué)的數(shù)據(jù)。,IN運(yùn)算符語(yǔ)法結(jié)構(gòu),語(yǔ)法結(jié)構(gòu):where字段名稱(chēng)in(值1,值2…);語(yǔ)句實(shí)例:select*fromstudentwherenamein(李凌霜,高山雪)語(yǔ)句意義:查詢(xún)姓名為李凌霜,高山雪二位同學(xué)的數(shù)據(jù)。,BETWEEN…AND…運(yùn)算符,語(yǔ)法結(jié)構(gòu):where字段名稱(chēng)between值1and值2;語(yǔ)句實(shí)例:select*fromstudentwheremathsbetween80and90;語(yǔ)句意義:查詢(xún)數(shù)學(xué)成績(jī)?cè)?0分~90分之間的同學(xué)的數(shù)據(jù).,AND運(yùn)算符,語(yǔ)法結(jié)構(gòu):where查詢(xún)條件1and查詢(xún)條件2and…;語(yǔ)句實(shí)例:select*fromstudentwheremaths>80andchinese<90;語(yǔ)句意義:查詢(xún)數(shù)學(xué)成績(jī)高于80分并且語(yǔ)文成績(jī)低于90分的同學(xué)的數(shù)據(jù)。,OR運(yùn)算符,語(yǔ)法結(jié)構(gòu):where查詢(xún)條件1or查詢(xún)條件2or…;語(yǔ)句實(shí)例:select*fromstudentwheremaths<60andchinese60;語(yǔ)句意義:得到班級(jí)語(yǔ)文平均成績(jī)高于60分的班級(jí)以及語(yǔ)文成績(jī)平均分?jǐn)?shù)。,INSERT語(yǔ)句,用于往表格中插入或者增加一行數(shù)據(jù)。語(yǔ)法格式:insertint數(shù)據(jù)表名稱(chēng)(字段名稱(chēng)1,…字段名稱(chēng)N)values(字段1的值,…,字段N的值);語(yǔ)法實(shí)例:insertintostudent(name,sex,class,chinese,maths,physics,chemistry)values(喬峰,男,天龍班,99,79,67,88)語(yǔ)句意義:向數(shù)據(jù)表student中插入一個(gè)同學(xué)的成績(jī)。,UPDATA語(yǔ)句,用于更新或者改變匹配指定條件的記錄,通過(guò)構(gòu)造一個(gè)where子句來(lái)實(shí)現(xiàn)的。語(yǔ)句格式:updata數(shù)據(jù)表名稱(chēng)set字段名稱(chēng)1=更新的值1[,字段名稱(chēng)2=更新的值2…]where字段名稱(chēng)1運(yùn)算符值[and|or…];語(yǔ)句實(shí)例:updatestudentsetname=‘劉成功’,chinese=90,maths=92wherename=‘劉成忠’語(yǔ)句意義:把數(shù)據(jù)表student中名字為劉成忠的同學(xué)的名字改為劉成功,并把語(yǔ)文成績(jī)改為90分,數(shù)學(xué)成績(jī)改為92分。,DELETE語(yǔ)句,用來(lái)從表中刪除記錄或者行。語(yǔ)句格式:deletefrom數(shù)據(jù)表的名稱(chēng)where字段名稱(chēng)1運(yùn)算符值1[and|or…];語(yǔ)句實(shí)例:deletestudentwherename=‘李凌霜’語(yǔ)句意義:把數(shù)據(jù)表student中名字為李凌霜的同學(xué)的記錄刪除去。,隨機(jī)查詢(xún),方法:用Math類(lèi)的靜態(tài)方法random()可以產(chǎn)生一個(gè)大于0小于1的隨機(jī)數(shù);公式:inti=(int)(Math.random()*number+1);意義:產(chǎn)生一個(gè)1到number之間的隨機(jī)數(shù),根據(jù)這個(gè)隨機(jī)數(shù)將游標(biāo)移動(dòng)到相應(yīng)的行,并輸出該行。,關(guān)鍵程序代碼解析:,intj=0;while(抽取數(shù)目>0){inti=(int)(Math.random()*number+1);//隨機(jī)獲取一個(gè)1到number之間的數(shù)。booleanboo=false;for(intm=0;m- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- JDBC 數(shù)據(jù)庫(kù)連接
鏈接地址:http://m.appdesigncorp.com/p-11549370.html