第12章 數(shù)據(jù)庫(kù)應(yīng)用_第1頁(yè)
第12章 數(shù)據(jù)庫(kù)應(yīng)用_第2頁(yè)
第12章 數(shù)據(jù)庫(kù)應(yīng)用_第3頁(yè)
第12章 數(shù)據(jù)庫(kù)應(yīng)用_第4頁(yè)
第12章 數(shù)據(jù)庫(kù)應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Java面向?qū)ο?/p>

程序設(shè)計(jì)基礎(chǔ)教程河南大學(xué)計(jì)算機(jī)與信息工程學(xué)院目錄第1章Java語(yǔ)言概述第2章Java基本語(yǔ)法規(guī)則第3章Java中的面向?qū)ο蠹夹g(shù)第4章Java基本結(jié)構(gòu)程序第5章Java基本類第6章圖形用戶界面第7章異常處理第8章多線程第9章JavaApplet程序第10章輸入輸出流與文件處理第11章Java網(wǎng)絡(luò)編程第12章數(shù)據(jù)庫(kù)應(yīng)用3

數(shù)據(jù)庫(kù)技術(shù)有效地管理和存取大量的數(shù)據(jù)資源。數(shù)據(jù)庫(kù)存儲(chǔ)的是通用化的相關(guān)數(shù)據(jù)集合,不僅包括數(shù)據(jù)本身,而且包括數(shù)據(jù)之間的聯(lián)系。

Java提供JDBCAPI支持?jǐn)?shù)據(jù)庫(kù)應(yīng)用,JDBC(Java數(shù)據(jù)庫(kù)連接)是基于Java的、用于訪問(wèn)關(guān)系數(shù)據(jù)庫(kù)的應(yīng)用程序編程接口。

JDBC提供多種數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序類型,提供執(zhí)行SQL語(yǔ)句來(lái)操縱關(guān)系數(shù)據(jù)庫(kù)的方法,使Java應(yīng)用程序具有訪問(wèn)不同類型數(shù)據(jù)庫(kù)的能力。第12章數(shù)據(jù)庫(kù)應(yīng)用4第12章數(shù)據(jù)庫(kù)應(yīng)用12.1數(shù)據(jù)庫(kù)技術(shù)12.2JDBC512.1數(shù)據(jù)庫(kù)技術(shù)數(shù)據(jù)庫(kù)(DataBase,DB):長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)外存上的、有結(jié)構(gòu)的、可共享的數(shù)據(jù)集合。數(shù)據(jù)庫(kù)中的數(shù)據(jù)按一定的數(shù)據(jù)模型描述、組織、存儲(chǔ),具有較小的冗余度、較高的數(shù)據(jù)獨(dú)立性和易擴(kuò)展性,可為不同的用戶共享。數(shù)據(jù)庫(kù)系統(tǒng)(DataBaseSystem,DBS):采用了數(shù)據(jù)庫(kù)技術(shù)的計(jì)算機(jī)系統(tǒng),包括數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)、應(yīng)用程序、數(shù)據(jù)庫(kù)管理員(DBA)和用戶。612.1數(shù)據(jù)庫(kù)技術(shù)結(jié)構(gòu)化查詢語(yǔ)言(StructuredQueryLanguage):關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言,提供數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操作和數(shù)據(jù)控制功能,具有綜合統(tǒng)一、高度非過(guò)程化、面向集合等特點(diǎn)。表SQL語(yǔ)言的動(dòng)詞SQL功能動(dòng)詞說(shuō)明數(shù)據(jù)定義CREATE、DROP、ALTER創(chuàng)建表、刪除表、修改表數(shù)據(jù)操縱INSERT、UPDATE、DELETE插入、更新、刪除數(shù)據(jù)查詢SELECT查詢數(shù)據(jù)控制GRANT、REVOKE授予權(quán)限、收回權(quán)限712.1數(shù)據(jù)庫(kù)技術(shù)MySQL是Sun公司推出的一種C/S結(jié)構(gòu)的數(shù)據(jù)庫(kù)。下載MySQL數(shù)據(jù)庫(kù)服務(wù)端(MySQLCommunityServer)mysql-essential-5.1.43-win32.msi文件下載JDBC驅(qū)動(dòng)程序(MySQLConnector/J)mysql-connector-java-5.0.8.bin文件MySQL設(shè)置3306端口提供數(shù)據(jù)庫(kù)服務(wù)演示:1.安裝MySQL服務(wù)器端2.安裝MySQL客戶端Navicat812.2JDBC12.2.1JDBC的作用和功能12.2.2指定JDBC驅(qū)動(dòng)程序12.2.3連接數(shù)據(jù)庫(kù)12.2.4執(zhí)行SQL語(yǔ)句12.2.5處理數(shù)據(jù)查詢的結(jié)果集912.2.1JDBC的作用和功能1.什么是JDBC1996年,Sun推出了JDBC,將Java的應(yīng)用范圍擴(kuò)展到了數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域,使Java的應(yīng)用程序具有訪問(wèn)不同類型數(shù)據(jù)庫(kù)的能力。JDBC(JavaDataBase

Connectivity,Java數(shù)據(jù)庫(kù)連接):基于Java的,提供連接、訪問(wèn)和操縱關(guān)系數(shù)據(jù)庫(kù)的應(yīng)用程序接口(API),JDBC提供在Java應(yīng)用程序中執(zhí)行SQL語(yǔ)句以訪問(wèn)和操縱關(guān)系數(shù)據(jù)庫(kù)的方法。1012.2.1JDBC的作用和功能1.什么是JDBCJDBC是一種數(shù)據(jù)庫(kù)連接和訪問(wèn)標(biāo)準(zhǔn):一方面:Java語(yǔ)言增加了JDBCAPI,其中包括多個(gè)用于訪問(wèn)數(shù)據(jù)庫(kù)的接口;另一方面:目前大多數(shù)主流數(shù)據(jù)庫(kù)都支持JDBC,推出了各自的JDBC驅(qū)動(dòng)程序,每個(gè)驅(qū)動(dòng)程序都實(shí)現(xiàn)了JDBCAPI中聲明的接口。

JDBC既實(shí)現(xiàn)了應(yīng)用程序與數(shù)據(jù)庫(kù)的連接,又實(shí)現(xiàn)了數(shù)據(jù)獨(dú)立性,使應(yīng)用程序具有很好的可移植性,一份應(yīng)用程序可應(yīng)用于不同類型的數(shù)據(jù)庫(kù)。1112.2.1JDBC的作用和功能2.JDBC的基本功能、組成和工作原理JDBCAPI基本功能包括:(1)指定JDBC驅(qū)動(dòng)程序類型,并建立與指定數(shù)據(jù)庫(kù)的連接;(2)執(zhí)行SQL語(yǔ)句并處理結(jié)果。(3)獲得所連接數(shù)據(jù)庫(kù)的各種信息,包括驅(qū)動(dòng)程序、數(shù)據(jù)庫(kù)、表、列的屬性等?!狙a(bǔ)充】連接指定數(shù)據(jù)庫(kù)MySQL,并獲得數(shù)據(jù)庫(kù)屬性信息。GetDBAbout.java1212.2.1JDBC的作用和功能2.JDBC的基本功能、組成和工作原理為實(shí)現(xiàn)執(zhí)行SQL語(yǔ)句功能,要用到j(luò)ava.sql包中最主要的4個(gè)接口或類:DriverManager類:管理驅(qū)動(dòng)程序并創(chuàng)建數(shù)據(jù)庫(kù)連接Connection接口:管理已建立的數(shù)據(jù)庫(kù)連接Statement接口:管理和執(zhí)行SQL語(yǔ)句ResultSet接口:存儲(chǔ)數(shù)據(jù)查詢返回的結(jié)果集。1312.2.1JDBC的作用和功能DriverManager(驅(qū)動(dòng)程序管理器)Connection(連接)Statement(語(yǔ)句)ResultSet(結(jié)果集)JDBC驅(qū)動(dòng)程序表生成生成生成建立與數(shù)據(jù)庫(kù)的連接圖JDBC的組成和工作原理1412.2.1JDBC的作用和功能2.JDBC的基本功能、組成和工作原理

Java的接口機(jī)制是分隔方法聲明與方法實(shí)現(xiàn)細(xì)節(jié)的最好機(jī)制,接口機(jī)制的優(yōu)點(diǎn)在JDBCAPI中得到充分體現(xiàn)。JDBCAPI聲明了多個(gè)接口提供給應(yīng)用程序使用,但是這些接口的實(shí)現(xiàn)卻不是應(yīng)用程序所能完成的,必須由JDBC驅(qū)動(dòng)程序完成。

不同的JDBC驅(qū)動(dòng)程序?qū)崿F(xiàn)了相同的接口,雖然實(shí)現(xiàn)細(xì)節(jié)不同,但是提供了相同的方法。JDBC驅(qū)動(dòng)程序必須實(shí)現(xiàn)的4個(gè)主要接口是:

Driver、Connection、Statement和ResultSet。Driver接口是提供給JDBC驅(qū)動(dòng)程序?qū)崿F(xiàn)的接口,用于裝入和管理JDBC驅(qū)動(dòng)程序。1512.2.1JDBC的作用和功能2.JDBC的基本功能、組成和工作原理JDBC數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)與普通Java應(yīng)用程序設(shè)計(jì)的不同之處:不能直接調(diào)用new運(yùn)算符創(chuàng)建JDBCAPI中類的實(shí)例,而由指定類的方法創(chuàng)建另一個(gè)類的實(shí)例。Connection、Statement、ResultSet等接口已由指定JDBC驅(qū)動(dòng)程序?qū)崿F(xiàn),因此數(shù)據(jù)庫(kù)應(yīng)用程序中可以直接聲明

這些接口的變量作為類的實(shí)例使用。1612.2.2指定JDBC驅(qū)動(dòng)程序1.選擇和安裝JDBC驅(qū)動(dòng)程序JDBC-ODBC橋驅(qū)動(dòng)程序類是sun.jdbc.odbc.JdbcOdbcDriver,由JDK默認(rèn)安裝,包含在JDK安裝路徑\jdk1.6.0_14\jre\lib\rt.jar中,故而運(yùn)行基于JDBC-ODBC橋的應(yīng)用程序時(shí)不需要特別安裝和設(shè)置,其它三種JDBC驅(qū)動(dòng)程序需要特別安裝和設(shè)置。1712.2.2指定JDBC驅(qū)動(dòng)程序2.Eclipse中添加MySQLJDBC驅(qū)動(dòng)程序包EclipseProject視圖(即包資源管理器)->對(duì)選中項(xiàng)目按右鍵選擇BuildPath(構(gòu)建路徑)->ConfigBuildPath(配置構(gòu)建路徑)在項(xiàng)目屬性對(duì)話框的Libraries(庫(kù))頁(yè),單擊”AddExternalJARs…(添加外部JAR(X))”按鈕,在隨后彈出的JARSelection對(duì)話框中,選擇MySQLJDBC驅(qū)動(dòng)程序解壓文件夾中的mysql-connector-5.1.10-bin.jar,然后單擊確定按鈕,添加成功。演示:3.安裝JDBC驅(qū)動(dòng)程序4.在Eclipse中添加MySQLJDBC驅(qū)動(dòng)程序包;1812.2.2指定JDBC驅(qū)動(dòng)程序java.lang.Class類的forName()方法用于指定JDBC驅(qū)動(dòng)程序類型:

publicstaticClass<?>forName(StringclassName)throwsClassNotFoundException3.在應(yīng)用程序中指定JDBC驅(qū)動(dòng)程序?yàn)镸ySql數(shù)據(jù)庫(kù)指定JDBC橋驅(qū)動(dòng)程序:Class.forName(“com.mysql.jdbc.Driver”);為SQLServer數(shù)據(jù)庫(kù)指定JDBC橋驅(qū)動(dòng)程序:Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);

19操作演示:1.安裝MySQL服務(wù)器端2.安裝MySQL客戶端Navicat3.安裝JDBC驅(qū)動(dòng)程序(JDBC-ODBC橋驅(qū)動(dòng)程序由JDK默認(rèn)安裝)4.在Eclipse中添加MySQLJDBC驅(qū)動(dòng)程序包;5.在客戶端navicat中創(chuàng)建連接->創(chuàng)建數(shù)據(jù)庫(kù)->創(chuàng)建表;6.編寫數(shù)據(jù)庫(kù)相關(guān)程序:1)在應(yīng)用程序中指定JDBC驅(qū)動(dòng)程序;2)在應(yīng)用程序中編程進(jìn)行有關(guān)數(shù)據(jù)庫(kù)操作。

2012.2.3連接數(shù)據(jù)庫(kù)1.DriverManager類創(chuàng)建與指定數(shù)據(jù)庫(kù)連接DriverManager類用于管理驅(qū)動(dòng)程序和創(chuàng)建數(shù)據(jù)庫(kù)連接;getConnection方法提供裝入指定JDBC驅(qū)動(dòng)程序并創(chuàng)建與指定數(shù)據(jù)庫(kù)連接的操作。publicstaticsynchronizedConnection

getConnection(Stringurl,Stringuser,Stringpassword)throwsSQLExceptionpublicstaticsynchronizedConnection

getConnection(Stringurl)throwsSQLExceptionurl指定JDBC數(shù)據(jù)源的URL,user指定訪問(wèn)數(shù)據(jù)庫(kù)的用戶名,password指定用戶密碼;2112.2.3連接數(shù)據(jù)庫(kù)1.DriverManager類創(chuàng)建與指定數(shù)據(jù)庫(kù)連接JDBC使用URL表示JDBC驅(qū)動(dòng)程序和數(shù)據(jù)源的位置。JDBC的URL格式:jdbc:子協(xié)議:數(shù)據(jù)源<jdbc>表示這個(gè)URL指定一個(gè)JDBC數(shù)據(jù)源,<子協(xié)議>指定JDBC驅(qū)動(dòng)程序類型,<數(shù)據(jù)源>指定數(shù)據(jù)源名。例如:下列語(yǔ)句返回創(chuàng)建的一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象,其中參數(shù)指定JDBC橋驅(qū)動(dòng)程序、訪問(wèn)Access數(shù)據(jù)庫(kù)的數(shù)據(jù)源student_access。Connectionconnection1=DriverManager.

getConnection("jdbc:odbc:student_access");2212.2.3連接數(shù)據(jù)庫(kù)1.DriverManager類創(chuàng)建與指定數(shù)據(jù)庫(kù)連接例如:下列語(yǔ)句返回創(chuàng)建的一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象,其中參數(shù)指定SQLServerJDBC驅(qū)動(dòng)程序、數(shù)據(jù)源為“//localhost:1433;DatabaseName=student”、用戶名為“sa”、用戶密碼為“yeheya”。

Connectionconnection2=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;

DatabaseName=student","sa","yeheya“);2312.2.3連接數(shù)據(jù)庫(kù)2.Connection接口管理連接對(duì)象

Connection接口負(fù)責(zé)管理Java應(yīng)用程序和數(shù)據(jù)庫(kù)之間的連接。一個(gè)Connection對(duì)象表示對(duì)一個(gè)特定數(shù)據(jù)源已經(jīng)建立的一條連接,它能夠創(chuàng)建執(zhí)行SQL的Statement語(yǔ)句對(duì)象,還能提供數(shù)據(jù)庫(kù)中的屬性信息。2412.2.3連接數(shù)據(jù)庫(kù)2.Connection接口管理連接對(duì)象

Statement

createStatement()throwsSQLException; //創(chuàng)建執(zhí)行SQL的語(yǔ)句對(duì)象Statement

createStatement(intresultSetType,intresultSetConcurrency)throwsSQLException;

//參數(shù)指定結(jié)果集屬性voidclose()throwsSQLException;//關(guān)閉數(shù)據(jù)庫(kù)連接booleanisClosed()throwsSQLException;

//判斷數(shù)據(jù)庫(kù)連接是否已關(guān)閉DatabaseMetaData

getMetaData()throws SQLException;

//獲取所連接數(shù)據(jù)庫(kù)的元數(shù)據(jù)

Statementstatement=connection.createStatement();DatabaseMetaDatadbmd=connection.getMetaData();2512.2.3連接數(shù)據(jù)庫(kù)3.DatabaseMetaData接口獲得數(shù)據(jù)庫(kù)元數(shù)據(jù)

DatabaseMetaData接口:管理通過(guò)Connection對(duì)象連接的數(shù)據(jù)庫(kù)的屬性信息(稱為元數(shù)據(jù))。publicinterfaceDatabaseMetaData{StringgetURL()throwsSQLException;

//返回連接數(shù)據(jù)庫(kù)的URLStringgetUserName()throwsSQLException;

//返回?cái)?shù)據(jù)庫(kù)的用戶名StringgetDatabaseProductName()throwsSQLException; //返回?cái)?shù)據(jù)庫(kù)名稱2612.2.3連接數(shù)據(jù)庫(kù)3.DatabaseMetaData接口獲得數(shù)據(jù)庫(kù)元數(shù)據(jù)

StringgetDatabaseProductVersion()throwsSQLException; //返回?cái)?shù)據(jù)庫(kù)版本號(hào)StringgetDriverName()throwsSQLException;

//返回驅(qū)動(dòng)程序名稱StringgetDriverVersion()throwsSQLException;

//返回驅(qū)動(dòng)程序版本號(hào)}【例12.1】初識(shí)Java數(shù)據(jù)庫(kù)應(yīng)用程序。StudentTest.java

2712.2.4執(zhí)行SQL語(yǔ)句Statement接口管理和執(zhí)行SQL語(yǔ)句,ResultSet接口存儲(chǔ)數(shù)據(jù)查詢返回的結(jié)果集。publicinterfaceStatement{

intexecuteUpdate(Stringsql)throwsSQLException;

//執(zhí)行數(shù)據(jù)定義和數(shù)據(jù)更新SQL語(yǔ)句

ResultSet

executeQuery(Stringsql)throwsSQLException;

//執(zhí)行數(shù)據(jù)查詢SQL語(yǔ)句

boolean

execute(Stringsql)throwsSQLException; //執(zhí)行SQL語(yǔ)句2812.2.4執(zhí)行SQL語(yǔ)句

int

getUpdateCount()throwsSQLException; //獲得數(shù)據(jù)更新所影響的行數(shù)

ResultSet

getResultSet()throwsSQLException; //獲得數(shù)據(jù)查詢結(jié)果集void

close()throwsSQLException;//關(guān)閉語(yǔ)句}【例12.2】將數(shù)據(jù)庫(kù)應(yīng)用中的不同邏輯封裝到不同的類。

Student.javaDBConn.java2912.2.4執(zhí)行SQL語(yǔ)句1.執(zhí)行數(shù)據(jù)定義和數(shù)據(jù)更新SQL語(yǔ)句調(diào)用executeUpdate()方法可執(zhí)行數(shù)據(jù)定義和數(shù)據(jù)更新的SQL語(yǔ)句。執(zhí)行數(shù)據(jù)定義的SQL語(yǔ)句,用于創(chuàng)建和修改臨時(shí)表,沒(méi)有返回值;執(zhí)行數(shù)據(jù)更新的SQL語(yǔ)句,包括INSERT、UPDATE、DELETE語(yǔ)句,返回執(zhí)行所影響的行數(shù)。3012.2.4執(zhí)行SQL語(yǔ)句1.執(zhí)行數(shù)據(jù)定義和數(shù)據(jù)更新SQL語(yǔ)句例如:下列語(yǔ)句執(zhí)行Insert語(yǔ)句插入一行數(shù)據(jù)Statementstatement=connection.createStatement();

//創(chuàng)建執(zhí)行SQL語(yǔ)句的Statement對(duì)象Stringsql="INSERTINTOstuinfo(stu#,stu_name)VALUES('98111041','李偉')";intresult=statement.executeUpdate(sql); //執(zhí)行成功時(shí)返回影響的行數(shù)1【例12.2】1.向數(shù)據(jù)庫(kù)里插入一條Name為Tom,A

溫馨提示

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

評(píng)論

0/150

提交評(píng)論