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