Java-Web應(yīng)用開發(fā)技術(shù)與案例教程課件第4章第1次課_第1頁
Java-Web應(yīng)用開發(fā)技術(shù)與案例教程課件第4章第1次課_第2頁
Java-Web應(yīng)用開發(fā)技術(shù)與案例教程課件第4章第1次課_第3頁
Java-Web應(yīng)用開發(fā)技術(shù)與案例教程課件第4章第1次課_第4頁
Java-Web應(yīng)用開發(fā)技術(shù)與案例教程課件第4章第1次課_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章JDBC數(shù)據(jù)庫訪問技術(shù)數(shù)據(jù)庫是Web應(yīng)用程序重要組成部分。在JavaWeb應(yīng)用程序中,數(shù)據(jù)庫訪問是通過Java數(shù)據(jù)庫連接(JavaDataBaseConnectivity,簡稱JDBC)實現(xiàn)的。JDBC為開發(fā)人員提供了一個標(biāo)準(zhǔn)的API。

本章介紹使用JDBC驅(qū)動程序連接數(shù)據(jù)庫技術(shù),實現(xiàn)Java語言對數(shù)據(jù)庫的訪問,并給出應(yīng)用程序的設(shè)計方法、步驟和實例。第4章JDBC數(shù)據(jù)庫訪問技術(shù)數(shù)據(jù)庫是Web應(yīng)用程基礎(chǔ)——簡單回顧數(shù)據(jù)庫的有關(guān)知識1、首先要選擇一種數(shù)據(jù)庫(MySQL、SQL

Server、oracle

),并會對數(shù)據(jù)庫操作2、對于要使用的數(shù)據(jù)庫,需下載相關(guān)的系統(tǒng)并安裝。

(安裝數(shù)據(jù)庫,就是安裝數(shù)據(jù)庫程序,該程序稱為數(shù)據(jù)庫服務(wù)器,在后臺運行)3、利用數(shù)據(jù)庫有關(guān)的命令,實現(xiàn)對數(shù)據(jù)庫的操作。

但必須有如下信息:

用戶名、用戶密碼、數(shù)據(jù)庫名、數(shù)據(jù)表名等。4、對數(shù)據(jù)庫及其數(shù)據(jù)表的最基本的操作為:

添加記錄、刪除記錄、修改記錄、查詢記錄(稱為CRUD)5、所有操作都是使用SQL語句實現(xiàn)的。這種對數(shù)據(jù)庫的操作是面向結(jié)構(gòu)的,即是結(jié)構(gòu)化數(shù)據(jù)庫操作。6、另外,對數(shù)據(jù)庫操作有兩種方式:

(1)使用“命令行”命令,對數(shù)據(jù)庫操作。(2)使用可視化應(yīng)用程序?qū)?shù)據(jù)庫進行操作。

基礎(chǔ)——簡單回顧數(shù)據(jù)庫的有關(guān)知識1、首先要選擇一種數(shù)據(jù)庫(M本章學(xué)習(xí)的內(nèi)容

本章要學(xué)習(xí)的是通過Java語言使用SQL語句實現(xiàn)對數(shù)據(jù)庫的操作(訪問)。

如何實現(xiàn)呢?

下面我給出Java訪問數(shù)據(jù)庫的基本思想與實現(xiàn)方法。

本章學(xué)習(xí)的內(nèi)容本章要學(xué)習(xí)的是通過Java語言使引言01——MySQL數(shù)據(jù)庫的下載、安裝與操作1、MySQL數(shù)據(jù)庫的下載、安裝

這里我下載并安裝:mysql-5.5.20-win32.msi(也可以下載其它版本)2、基于命令行方式,實現(xiàn)對數(shù)據(jù)庫的直接操作。

(1)啟動MySQL數(shù)據(jù)庫

(2)創(chuàng)建數(shù)據(jù)庫(3)創(chuàng)建數(shù)據(jù)表

(4)利用SQL語句,實現(xiàn)對數(shù)據(jù)庫的訪問操作3、安裝可視化操作客戶端應(yīng)用程序(目前有很多,可以根據(jù)自己的情況選擇一種)

這里我選擇:MySQL-Front_Setup.exe

同樣需要下載并安裝(注意,必須在安裝MySQL數(shù)據(jù)庫后,再安裝)4、利用可視化操作客戶端應(yīng)用程序,實現(xiàn)對數(shù)據(jù)庫的訪問操作。5、使用Java語言訪問MySQL數(shù)據(jù)庫,必須下載所需要的支持連接驅(qū)動程序。

需要下載:mysql-connector-java-5.1.13-bin.jar

(也可以下載其它版本的,但要MySQL數(shù)據(jù)庫版本互相支持)引言01——MySQL數(shù)據(jù)庫的下載、安裝與操作1、MySQL數(shù)據(jù)庫的操作(1)創(chuàng)建數(shù)據(jù)庫:ch04_students(學(xué)生成績管理)CREATEDATABASEch04_studentsdefaultcharset=utf-8;(2)創(chuàng)建一個數(shù)據(jù)表:stu

該表有字段:xh(整型),name(字符串),cj(整型Usestudents;CREATETABLEstu(xhint,namevarchar(20),cjint)defaultcharset=utf-8;(3)SQL語句

添加語句:

Stringsql=“insertintostu(xh,name,cj)values(1,'張三',75)";

或:Stringsql=“insertintostu(xh,name,cj)values(?,?,?)";

修改語句:

Stringsql=“updatestusetcj=100wherexh=10";Stringsql=“updatestusetcj=?wherexh=?";刪除語句:

Stringsql="deletefromstuwherecj<60";

Stringsql="deletefromstuwherecj<?";

查詢語句:Stringsql="selectxh,nane,cjfromstuwherecj>=?andcj<=?";

Stringsql="selectxh,nane,cjfromstuwherecj>=75andcj<=95";

數(shù)據(jù)庫的操作引言02——利用Java語言訪問數(shù)據(jù)庫的原理與方法

1、實現(xiàn)Java與MySQL聯(lián)系的實現(xiàn)思想問題1:

數(shù)據(jù)庫系統(tǒng)是一個獨立的程序;

我們設(shè)計的Java應(yīng)用程序(Web應(yīng)用程序)也是一個獨立的程序。

那么兩者之間如何聯(lián)系呢?讓Java程序訪問數(shù)據(jù)庫呢?處理方式:

給兩者之間搭建一個“橋”(數(shù)據(jù)庫連接),通過這個橋,實現(xiàn)兩者的溝通與信息交互。引言02——利用Java語言訪問數(shù)據(jù)庫的原理與方法問題2:誰來搭建這個橋呢?處理方式:

找一個建筑隊來完成。

在計算機上這個建筑隊就是一個類(DriverManager),要完成工作,必須由類的方法。即有類DriverManager中的方法getConnection(建連接所需要的資源),就可以創(chuàng)建一個數(shù)據(jù)庫連接。實現(xiàn):Connectionconn=DriverManager.getConnection(url:建連接所需要的資源);問題2:誰來搭建這個橋呢?問題3:創(chuàng)建連接(橋),需要資源,那么需要那些資源呢?

建橋的語句:

Connectionconn=DriverManager.getConnection(url:建連接所需要的資源);處理方式:

最少需要3個資源,訪問數(shù)據(jù)庫所需要的:用戶名、密碼、數(shù)據(jù)庫名。

在計算機是哪個,我們稱為數(shù)據(jù)庫連接字(URL——統(tǒng)一資源定位)。實現(xiàn)示例:假設(shè)用戶名為:root密碼為:123456數(shù)據(jù)庫為:students,則:

StringuserName="root";//數(shù)據(jù)庫用戶名

StringuserPwd="123456";//密碼

StringdbName="students";//數(shù)據(jù)庫名

Stringurl1="jdbc:mysql://localhost:3306/"+dbName;Stringurl2="?user="+userName+"&password="+userPwd;Stringurl=url1+url2;//形成帶數(shù)據(jù)庫讀寫編碼的數(shù)據(jù)庫連接字Connectionconn=DriverManager.getConnection(url);//創(chuàng)建連接對象(創(chuàng)建橋)問題3:創(chuàng)建連接(橋),需要資源,那么需要那些資源呢?問題4:如何找到“建筑隊(DriverManager)”?處理方式:

必須有一個管理建筑隊的機構(gòu),

在計算機上,稱為驅(qū)動程序(java.sql.Driver)。實現(xiàn):獲取“建筑隊”——即:加載驅(qū)動程序。

Class.forName(com.mysql.jdbc.Driver);

其中,

com.mysql.jdbc.Driver為MySQL連接的驅(qū)動程序

注意:為了處理以上問題,各個數(shù)據(jù)庫開發(fā)商,針對自己的數(shù)據(jù)系統(tǒng),專門開發(fā)了一套實現(xiàn)Java與數(shù)據(jù)庫之間交互的驅(qū)動程序包。例如,對于MySQL數(shù)據(jù)庫,其驅(qū)動程序包為:mysql-connector-java-5.1.6-bin。

通過以上4個問題的分析與解答,我們應(yīng)該知道,創(chuàng)建“連接”的思想與過程。問題4:如何找到“建筑隊(DriverManager)”?創(chuàng)建Java與數(shù)據(jù)庫之間的連接的過程與實現(xiàn)1、從MySQL數(shù)據(jù)庫下載其連接驅(qū)動程序:

(mysql-connector-java-5.1.6-bin)2、將其復(fù)制到Web工程(對于Java工程先創(chuàng)建lib)的lib子目錄下(導(dǎo)入該支持程序)。3、設(shè)計Java程序,創(chuàng)建并獲得數(shù)據(jù)庫連接對象。

其過程為:

(1)獲取“建筑隊”——即:加載驅(qū)動程序。

Class.forName(com.mysql.jdbc.Driver);//

com.mysql.jdbc.Driver為MySQL連接的驅(qū)動程序(2)形成連接資源(數(shù)據(jù)庫連接字)

StringuserName="root";//數(shù)據(jù)庫用戶名

StringuserPwd="123456";//密碼

StringdbName="students";//數(shù)據(jù)庫名

Stringurl1="jdbc:mysql://localhost:3306/"+dbName;Stringurl2="?user="+userName+"&password="+userPwd;Stringurl=url1+url2;//形成帶數(shù)據(jù)庫讀寫編碼的數(shù)據(jù)庫連接字

(3)有建筑隊,利用連接資源,創(chuàng)建連接橋。Connectionconn=DriverManager.getConnection(url);//創(chuàng)建連接對象(創(chuàng)建橋)創(chuàng)建Java與數(shù)據(jù)庫之間的連接的過程與實現(xiàn)1、從MySQL數(shù)詳細(xì)實現(xiàn)代碼:建立數(shù)據(jù)庫的連接的關(guān)鍵代碼段如下:

StringdriverName="com.mysql.jdbc.Driver";//驅(qū)動程序名

StringuserName="root";//數(shù)據(jù)庫用戶名

StringuserPwd="123456";//密碼

StringdbName="students";//數(shù)據(jù)庫名

Stringurl1="jdbc:mysql://localhost:3306/"+dbName;Stringurl2="?user="+userName+"&password="+userPwd;Stringurl3="&useUnicode=true&characterEncoding=UTF-8";//訪問數(shù)據(jù)庫的漢字編碼Stringurl=url1+url2+url3;//形成帶數(shù)據(jù)庫讀寫編碼的數(shù)據(jù)庫連接字

Class.forName(driverName);//加載并注冊驅(qū)動程序Connection

conn=DriverManager.getConnection(url);//創(chuàng)建連接對象詳細(xì)實現(xiàn)代碼:建立數(shù)據(jù)庫的連接的關(guān)鍵代碼段如下:

通過前面的工作,已經(jīng)創(chuàng)建了“橋”——數(shù)據(jù)庫連接對象:Connectionconn=DriverManager.getConnection(url);問題1:

如何在橋的兩端傳遞信息呢?(即如何來回運輸物資?)處理方式:

造一輛汽車,由汽車來回運輸信息。

在計算機上,我們將該汽車稱為“數(shù)據(jù)庫操作對象”。實現(xiàn):Statementstmt=conn.createStatement();//在橋conn上直接造一輛汽車2、如何實現(xiàn)Java與MySQL之間的信息傳遞(信息交換)通過前面的工作,已經(jīng)創(chuàng)建了“橋”——數(shù)據(jù)庫連接對問題2:

汽車運輸什么呢?

即:計算機執(zhí)行SQL語句并返回運行結(jié)果

(從Java->數(shù)據(jù)庫,然后,從數(shù)據(jù)庫->Java)處理方式:

運輸SQL語句,并運回執(zhí)行結(jié)果。實現(xiàn):

對于數(shù)據(jù)庫操作有兩種類型:查詢數(shù)據(jù)庫、更新數(shù)據(jù)庫(添加、刪除、修改)(1)查詢數(shù)據(jù)庫操作實現(xiàn)Stringsql="selectxh,name,cjfromstu";//查詢SQL語句ResultSetrs=stmt.executeQuery(sql);//執(zhí)行查詢SQL語句,并得到查詢結(jié)果集合(2)更新數(shù)據(jù)庫(添加、刪除、修改)操作實現(xiàn)

Stringsql2=“deletestu”;//刪除記錄SQL語句intn=stmt.executeUpdate(sql2);//執(zhí)行刪除SQL語句,并返回實際刪除記錄的條數(shù)

思考:我們是否可以同時處理問題1和問題2?

如何處理呢?問題2:思考:我們是否可以同時處理問題1和問題2?問題3:

我們是否可以將問題1和問題2同時實現(xiàn)處理呢?

即:造汽車的同時,將要運輸?shù)呢浳锿瑫r裝到汽車上。

處理方式:

汽車運輸SQL語句(同時組裝),并運回執(zhí)行結(jié)果。實現(xiàn):

(1)查詢數(shù)據(jù)庫操作實現(xiàn)Stringsql="selectxh,name,cjfromstuwherecj>=60andcj<=80"http://查詢SQL語句

PreparedStatementpstmt=conn.prepareStatement(sql);RrsultSetrs=pstmt.executeQuery();//執(zhí)行,得到查詢結(jié)果集合,注意,這里是空參數(shù)(2)更新數(shù)據(jù)庫(添加、刪除、修改)操作實現(xiàn)

Stringsql2=“deletestuwherecj>=60andcj<=80”;//刪除記錄SQL語句

PreparedStatementpstmt=conn.prepareStatement(sql2);intn=pstmt.executeUpdate();//執(zhí)行,返回實際刪除記錄的條數(shù),注意,這里是空參數(shù)問題3:問題4:

對于問題3,我們給出了造汽車的同時,將要運輸?shù)呢浳锿瑫r裝到汽車上。

但是,當(dāng)不清楚具體裝載的貨物具體值時,如何處理呢?例如:這里給出了具體值:(1)Stringsql="selectxh,name,cjfromstuwherecj>=60andcj<=80"http://查詢SQL語句(2)PreparedStatementpstmt=conn.prepareStatement(sql);(3)RrsultSetrs=pstmt.executeQuery();//執(zhí)行,得到查詢結(jié)果集合,注意,這里是空參數(shù)若不是具體值呢?我們采用占位符?,表示該位置需要一個具體數(shù)據(jù)。

我們可以修改為:

(1)

Stringsql=“selectxh,name,cjfromstuwherecj>=?andcj<=?"http://查詢SQL語句

(2)PreparedStatementpstmt=conn.prepareStatement(sql);

(3)//此時,根據(jù)需要再給出具體值:pstmt.setInt(1,60);//根據(jù)?所在的位置號,給出對應(yīng)的具體數(shù)據(jù)。pstmt.setInt(2,80);

(4)RrsultSetrs=pstmt.executeQuery();//執(zhí)行,得到查詢結(jié)果集合,注意,這里是空參數(shù)

問題4:問題:如何對返回的結(jié)果進行處理:處理方式:(1)

若是添加、刪除、修改,返回實際處理的記錄條數(shù),利用所返回的值,確定所執(zhí)行的操作是否成功。返回值為0或者非0.(2)

若是查詢,得到的是查詢記錄集合,

需要對每個記錄的每個字段進行加工處理。實現(xiàn):(1)對“添加、刪除、修改”更新數(shù)據(jù)庫的操作(采用控制臺界面、網(wǎng)頁顯示):Stringsql2=“deletestuwherecj>=60andcj<=80”;//刪除記錄SQL語句

PreparedStatementpstmt=conn.prepareStatement(sql2);intn=pstmt.executeUpdate();//執(zhí)行,返回實際刪除記錄的條數(shù),注意,這里是空參數(shù)if(n>0){System.out.println(“刪除記錄成功,共刪除了”+n+“記錄!”);}else{

System.out.println(“刪除不成功!”);}3、

如何對返回的結(jié)果進行處理呢?問題:如何對返回的結(jié)果進行處理:3、如何對返回的結(jié)果進行處(2)對“查詢”數(shù)據(jù)庫的操作——利用控制臺界面顯示信息:Stringsql=“selectxh,name,cjfromstuwherecj>=?andcj<=?"http://查詢SQL語句PreparedStatementpstmt=conn.prepareStatement(sql);pstmt.setInt(1,60);//根據(jù)?所在的位置號,給出對應(yīng)的具體數(shù)據(jù)。pstmt.setInt(2,80);RrsultSetrs=pstmt.executeQuery();//執(zhí)行,得到查詢結(jié)果集合,注意,這里是空參數(shù)//對查詢結(jié)果處理System.out.println(“記錄號學(xué)號姓名成績”);while(rs.next()){Stringa=rs.getRow();Stringb=rs.getString(“xh");Stringc=rs.getString("name");Stringd=rs.getString(“cj");}(2)對“查詢”數(shù)據(jù)庫的操作——利用控制臺界面顯示信息:(3)對“查詢”數(shù)據(jù)庫的操作——利用網(wǎng)頁顯示信息:Stringsql=“selectxh,name,cjfromstuwherecj>=?andcj<=?"http://查詢SQL語句PreparedStatementpstmt=conn.prepareStatement(sql);pstmt.setInt(1,60);//根據(jù)?所在的位置號,給出對應(yīng)的具體數(shù)據(jù)。pstmt.setInt(2,80);RrsultSetrs=pstmt.executeQuery();//執(zhí)行,得到查詢結(jié)果集合,注意,這里是空參數(shù)//對查詢結(jié)果處理rs.last();//移至最后一條記錄

%>你要查詢的學(xué)生數(shù)據(jù)表中共有

<fontsize="5"color="red"><%=rs.getRow()%></font>人

<tableborder="2"bgcolor="ccceee"width="650"><trbgcolor="CCCCCC"align="center"><td>記錄條數(shù)</td><td>學(xué)號</td><td>姓名</td><td>成績</td></tr><%rs.beforeFirst();//移至第一條記錄之前

while(rs.next()){%><tralign="center"><td><%=rs.getRow()%></td><td><%=rs.getString(“xh")%></td><td><%=rs.getString("name")%></td><td><%=rs.getString(“cj")%></td></tr><%}%></table>(3)對“查詢”數(shù)據(jù)庫的操作——利用網(wǎng)頁顯示信息:問題:

當(dāng)對數(shù)據(jù)庫的操作完成了,我們所創(chuàng)建的汽車、橋、查詢結(jié)果集合,這些對象都不需要了,為了節(jié)省資源,必須回收再利用?如何回收呢?處理方式:

拆掉就可以了。

在計算機上要關(guān)閉“對象”,就釋放資源了。

注意,關(guān)閉的次序,先創(chuàng)建的后關(guān)閉。實現(xiàn):Connection

conn=DriverManager.getConnection(url);//創(chuàng)建連接對象

PreparedStatementpstmt=conn.prepareStatement(sql);RrsultSetrs=pstmt.executeQuery();//執(zhí)行,得到查詢結(jié)果集合,注意,這里是空參數(shù)……

rs.close();pstmt.close();conn.close();4、關(guān)閉對象,釋放資源問題:當(dāng)對數(shù)據(jù)庫的操作完成了,我們所創(chuàng)建的汽車、橋、查詢結(jié)5、

如何實現(xiàn)任意條件的查詢、刪除、修改以及添加所希望的任意記錄

需要添加一個輸入頁面,提供所需要的查詢條件、或者要添加記錄的相關(guān)信息。例如,對于有條件的查詢,其實現(xiàn):(1)需要設(shè)計一個輸入頁面(提交相關(guān)的數(shù)據(jù)):(2)再進入訪問數(shù)據(jù)庫頁面(在該頁面獲取數(shù)據(jù),并設(shè)置給SQL語句)5、如何實現(xiàn)任意條件的查詢、刪除、修改以及添加所希望的任意第1次課——總結(jié)今天針對數(shù)據(jù)庫訪問操作,提出了4大問題,每個大問題下分別給出對應(yīng)的多個小問題,這些問題理解了、掌握了,我們的學(xué)習(xí)目標(biāo)也就達到了,希望各位同學(xué),自己再認(rèn)真厘清各問題以及他們之間的關(guān)系。

通過對這些問題的分析與解答,我們應(yīng)該知道如何設(shè)計程序,利用Java語言實現(xiàn)對數(shù)據(jù)庫的操作了。提示:

給出一個較完整的設(shè)計作業(yè):

按今天介紹的內(nèi)容及其方法,自己設(shè)計程序,完成對數(shù)據(jù)庫的訪問操作。

第1次課——總結(jié)今天針對數(shù)據(jù)庫訪問操作,提出了4大問第4章JDBC數(shù)據(jù)庫訪問技術(shù)數(shù)據(jù)庫是Web應(yīng)用程序重要組成部分。在JavaWeb應(yīng)用程序中,數(shù)據(jù)庫訪問是通過Java數(shù)據(jù)庫連接(JavaDataBaseConnectivity,簡稱JDBC)實現(xiàn)的。JDBC為開發(fā)人員提供了一個標(biāo)準(zhǔn)的API。

本章介紹使用JDBC驅(qū)動程序連接數(shù)據(jù)庫技術(shù),實現(xiàn)Java語言對數(shù)據(jù)庫的訪問,并給出應(yīng)用程序的設(shè)計方法、步驟和實例。第4章JDBC數(shù)據(jù)庫訪問技術(shù)數(shù)據(jù)庫是Web應(yīng)用程基礎(chǔ)——簡單回顧數(shù)據(jù)庫的有關(guān)知識1、首先要選擇一種數(shù)據(jù)庫(MySQL、SQL

Server、oracle

),并會對數(shù)據(jù)庫操作2、對于要使用的數(shù)據(jù)庫,需下載相關(guān)的系統(tǒng)并安裝。

(安裝數(shù)據(jù)庫,就是安裝數(shù)據(jù)庫程序,該程序稱為數(shù)據(jù)庫服務(wù)器,在后臺運行)3、利用數(shù)據(jù)庫有關(guān)的命令,實現(xiàn)對數(shù)據(jù)庫的操作。

但必須有如下信息:

用戶名、用戶密碼、數(shù)據(jù)庫名、數(shù)據(jù)表名等。4、對數(shù)據(jù)庫及其數(shù)據(jù)表的最基本的操作為:

添加記錄、刪除記錄、修改記錄、查詢記錄(稱為CRUD)5、所有操作都是使用SQL語句實現(xiàn)的。這種對數(shù)據(jù)庫的操作是面向結(jié)構(gòu)的,即是結(jié)構(gòu)化數(shù)據(jù)庫操作。6、另外,對數(shù)據(jù)庫操作有兩種方式:

(1)使用“命令行”命令,對數(shù)據(jù)庫操作。(2)使用可視化應(yīng)用程序?qū)?shù)據(jù)庫進行操作。

基礎(chǔ)——簡單回顧數(shù)據(jù)庫的有關(guān)知識1、首先要選擇一種數(shù)據(jù)庫(M本章學(xué)習(xí)的內(nèi)容

本章要學(xué)習(xí)的是通過Java語言使用SQL語句實現(xiàn)對數(shù)據(jù)庫的操作(訪問)。

如何實現(xiàn)呢?

下面我給出Java訪問數(shù)據(jù)庫的基本思想與實現(xiàn)方法。

本章學(xué)習(xí)的內(nèi)容本章要學(xué)習(xí)的是通過Java語言使引言01——MySQL數(shù)據(jù)庫的下載、安裝與操作1、MySQL數(shù)據(jù)庫的下載、安裝

這里我下載并安裝:mysql-5.5.20-win32.msi(也可以下載其它版本)2、基于命令行方式,實現(xiàn)對數(shù)據(jù)庫的直接操作。

(1)啟動MySQL數(shù)據(jù)庫

(2)創(chuàng)建數(shù)據(jù)庫(3)創(chuàng)建數(shù)據(jù)表

(4)利用SQL語句,實現(xiàn)對數(shù)據(jù)庫的訪問操作3、安裝可視化操作客戶端應(yīng)用程序(目前有很多,可以根據(jù)自己的情況選擇一種)

這里我選擇:MySQL-Front_Setup.exe

同樣需要下載并安裝(注意,必須在安裝MySQL數(shù)據(jù)庫后,再安裝)4、利用可視化操作客戶端應(yīng)用程序,實現(xiàn)對數(shù)據(jù)庫的訪問操作。5、使用Java語言訪問MySQL數(shù)據(jù)庫,必須下載所需要的支持連接驅(qū)動程序。

需要下載:mysql-connector-java-5.1.13-bin.jar

(也可以下載其它版本的,但要MySQL數(shù)據(jù)庫版本互相支持)引言01——MySQL數(shù)據(jù)庫的下載、安裝與操作1、MySQL數(shù)據(jù)庫的操作(1)創(chuàng)建數(shù)據(jù)庫:ch04_students(學(xué)生成績管理)CREATEDATABASEch04_studentsdefaultcharset=utf-8;(2)創(chuàng)建一個數(shù)據(jù)表:stu

該表有字段:xh(整型),name(字符串),cj(整型Usestudents;CREATETABLEstu(xhint,namevarchar(20),cjint)defaultcharset=utf-8;(3)SQL語句

添加語句:

Stringsql=“insertintostu(xh,name,cj)values(1,'張三',75)";

或:Stringsql=“insertintostu(xh,name,cj)values(?,?,?)";

修改語句:

Stringsql=“updatestusetcj=100wherexh=10";Stringsql=“updatestusetcj=?wherexh=?";刪除語句:

Stringsql="deletefromstuwherecj<60";

Stringsql="deletefromstuwherecj<?";

查詢語句:Stringsql="selectxh,nane,cjfromstuwherecj>=?andcj<=?";

Stringsql="selectxh,nane,cjfromstuwherecj>=75andcj<=95";

數(shù)據(jù)庫的操作引言02——利用Java語言訪問數(shù)據(jù)庫的原理與方法

1、實現(xiàn)Java與MySQL聯(lián)系的實現(xiàn)思想問題1:

數(shù)據(jù)庫系統(tǒng)是一個獨立的程序;

我們設(shè)計的Java應(yīng)用程序(Web應(yīng)用程序)也是一個獨立的程序。

那么兩者之間如何聯(lián)系呢?讓Java程序訪問數(shù)據(jù)庫呢?處理方式:

給兩者之間搭建一個“橋”(數(shù)據(jù)庫連接),通過這個橋,實現(xiàn)兩者的溝通與信息交互。引言02——利用Java語言訪問數(shù)據(jù)庫的原理與方法問題2:誰來搭建這個橋呢?處理方式:

找一個建筑隊來完成。

在計算機上這個建筑隊就是一個類(DriverManager),要完成工作,必須由類的方法。即有類DriverManager中的方法getConnection(建連接所需要的資源),就可以創(chuàng)建一個數(shù)據(jù)庫連接。實現(xiàn):Connectionconn=DriverManager.getConnection(url:建連接所需要的資源);問題2:誰來搭建這個橋呢?問題3:創(chuàng)建連接(橋),需要資源,那么需要那些資源呢?

建橋的語句:

Connectionconn=DriverManager.getConnection(url:建連接所需要的資源);處理方式:

最少需要3個資源,訪問數(shù)據(jù)庫所需要的:用戶名、密碼、數(shù)據(jù)庫名。

在計算機是哪個,我們稱為數(shù)據(jù)庫連接字(URL——統(tǒng)一資源定位)。實現(xiàn)示例:假設(shè)用戶名為:root密碼為:123456數(shù)據(jù)庫為:students,則:

StringuserName="root";//數(shù)據(jù)庫用戶名

StringuserPwd="123456";//密碼

StringdbName="students";//數(shù)據(jù)庫名

Stringurl1="jdbc:mysql://localhost:3306/"+dbName;Stringurl2="?user="+userName+"&password="+userPwd;Stringurl=url1+url2;//形成帶數(shù)據(jù)庫讀寫編碼的數(shù)據(jù)庫連接字Connectionconn=DriverManager.getConnection(url);//創(chuàng)建連接對象(創(chuàng)建橋)問題3:創(chuàng)建連接(橋),需要資源,那么需要那些資源呢?問題4:如何找到“建筑隊(DriverManager)”?處理方式:

必須有一個管理建筑隊的機構(gòu),

在計算機上,稱為驅(qū)動程序(java.sql.Driver)。實現(xiàn):獲取“建筑隊”——即:加載驅(qū)動程序。

Class.forName(com.mysql.jdbc.Driver);

其中,

com.mysql.jdbc.Driver為MySQL連接的驅(qū)動程序

注意:為了處理以上問題,各個數(shù)據(jù)庫開發(fā)商,針對自己的數(shù)據(jù)系統(tǒng),專門開發(fā)了一套實現(xiàn)Java與數(shù)據(jù)庫之間交互的驅(qū)動程序包。例如,對于MySQL數(shù)據(jù)庫,其驅(qū)動程序包為:mysql-connector-java-5.1.6-bin。

通過以上4個問題的分析與解答,我們應(yīng)該知道,創(chuàng)建“連接”的思想與過程。問題4:如何找到“建筑隊(DriverManager)”?創(chuàng)建Java與數(shù)據(jù)庫之間的連接的過程與實現(xiàn)1、從MySQL數(shù)據(jù)庫下載其連接驅(qū)動程序:

(mysql-connector-java-5.1.6-bin)2、將其復(fù)制到Web工程(對于Java工程先創(chuàng)建lib)的lib子目錄下(導(dǎo)入該支持程序)。3、設(shè)計Java程序,創(chuàng)建并獲得數(shù)據(jù)庫連接對象。

其過程為:

(1)獲取“建筑隊”——即:加載驅(qū)動程序。

Class.forName(com.mysql.jdbc.Driver);//

com.mysql.jdbc.Driver為MySQL連接的驅(qū)動程序(2)形成連接資源(數(shù)據(jù)庫連接字)

StringuserName="root";//數(shù)據(jù)庫用戶名

StringuserPwd="123456";//密碼

StringdbName="students";//數(shù)據(jù)庫名

Stringurl1="jdbc:mysql://localhost:3306/"+dbName;Stringurl2="?user="+userName+"&password="+userPwd;Stringurl=url1+url2;//形成帶數(shù)據(jù)庫讀寫編碼的數(shù)據(jù)庫連接字

(3)有建筑隊,利用連接資源,創(chuàng)建連接橋。Connectionconn=DriverManager.getConnection(url);//創(chuàng)建連接對象(創(chuàng)建橋)創(chuàng)建Java與數(shù)據(jù)庫之間的連接的過程與實現(xiàn)1、從MySQL數(shù)詳細(xì)實現(xiàn)代碼:建立數(shù)據(jù)庫的連接的關(guān)鍵代碼段如下:

StringdriverName="com.mysql.jdbc.Driver";//驅(qū)動程序名

StringuserName="root";//數(shù)據(jù)庫用戶名

StringuserPwd="123456";//密碼

StringdbName="students";//數(shù)據(jù)庫名

Stringurl1="jdbc:mysql://localhost:3306/"+dbName;Stringurl2="?user="+userName+"&password="+userPwd;Stringurl3="&useUnicode=true&characterEncoding=UTF-8";//訪問數(shù)據(jù)庫的漢字編碼Stringurl=url1+url2+url3;//形成帶數(shù)據(jù)庫讀寫編碼的數(shù)據(jù)庫連接字

Class.forName(driverName);//加載并注冊驅(qū)動程序Connection

conn=DriverManager.getConnection(url);//創(chuàng)建連接對象詳細(xì)實現(xiàn)代碼:建立數(shù)據(jù)庫的連接的關(guān)鍵代碼段如下:

通過前面的工作,已經(jīng)創(chuàng)建了“橋”——數(shù)據(jù)庫連接對象:Connectionconn=DriverManager.getConnection(url);問題1:

如何在橋的兩端傳遞信息呢?(即如何來回運輸物資?)處理方式:

造一輛汽車,由汽車來回運輸信息。

在計算機上,我們將該汽車稱為“數(shù)據(jù)庫操作對象”。實現(xiàn):Statementstmt=conn.createStatement();//在橋conn上直接造一輛汽車2、如何實現(xiàn)Java與MySQL之間的信息傳遞(信息交換)通過前面的工作,已經(jīng)創(chuàng)建了“橋”——數(shù)據(jù)庫連接對問題2:

汽車運輸什么呢?

即:計算機執(zhí)行SQL語句并返回運行結(jié)果

(從Java->數(shù)據(jù)庫,然后,從數(shù)據(jù)庫->Java)處理方式:

運輸SQL語句,并運回執(zhí)行結(jié)果。實現(xiàn):

對于數(shù)據(jù)庫操作有兩種類型:查詢數(shù)據(jù)庫、更新數(shù)據(jù)庫(添加、刪除、修改)(1)查詢數(shù)據(jù)庫操作實現(xiàn)Stringsql="selectxh,name,cjfromstu";//查詢SQL語句ResultSetrs=stmt.executeQuery(sql);//執(zhí)行查詢SQL語句,并得到查詢結(jié)果集合(2)更新數(shù)據(jù)庫(添加、刪除、修改)操作實現(xiàn)

Stringsql2=“deletestu”;//刪除記錄SQL語句intn=stmt.executeUpdate(sql2);//執(zhí)行刪除SQL語句,并返回實際刪除記錄的條數(shù)

思考:我們是否可以同時處理問題1和問題2?

如何處理呢?問題2:思考:我們是否可以同時處理問題1和問題2?問題3:

我們是否可以將問題1和問題2同時實現(xiàn)處理呢?

即:造汽車的同時,將要運輸?shù)呢浳锿瑫r裝到汽車上。

處理方式:

汽車運輸SQL語句(同時組裝),并運回執(zhí)行結(jié)果。實現(xiàn):

(1)查詢數(shù)據(jù)庫操作實現(xiàn)Stringsql="selectxh,name,cjfromstuwherecj>=60andcj<=80"http://查詢SQL語句

PreparedStatementpstmt=conn.prepareStatement(sql);RrsultSetrs=pstmt.executeQuery();//執(zhí)行,得到查詢結(jié)果集合,注意,這里是空參數(shù)(2)更新數(shù)據(jù)庫(添加、刪除、修改)操作實現(xiàn)

Stringsql2=“deletestuwherecj>=60andcj<=80”;//刪除記錄SQL語句

PreparedStatementpstmt=conn.prepareStatement(sql2);intn=pstmt.executeUpdate();//執(zhí)行,返回實際刪除記錄的條數(shù),注意,這里是空參數(shù)問題3:問題4:

對于問題3,我們給出了造汽車的同時,將要運輸?shù)呢浳锿瑫r裝到汽車上。

但是,當(dāng)不清楚具體裝載的貨物具體值時,如何處理呢?例如:這里給出了具體值:(1)Stringsql="selectxh,name,cjfromstuwherecj>=60andcj<=80"http://查詢SQL語句(2)PreparedStatementpstmt=conn.prepareStatement(sql);(3)RrsultSetrs=pstmt.executeQuery();//執(zhí)行,得到查詢結(jié)果集合,注意,這里是空參數(shù)若不是具體值呢?我們采用占位符?,表示該位置需要一個具體數(shù)據(jù)。

我們可以修改為:

(1)

Stringsql=“selectxh,name,cjfromstuwherecj>=?andcj<=?"http://查詢SQL語句

(2)PreparedStatementpstmt=conn.prepareStatement(sql);

(3)//此時,根據(jù)需要再給出具體值:pstmt.setInt(1,60);//根據(jù)?所在的位置號,給出對應(yīng)的具體數(shù)據(jù)。pstmt.setInt(2,80);

(4)RrsultSetrs=pstmt.executeQuery();//執(zhí)行,得到查詢結(jié)果集合,注意,這里是空參數(shù)

問題4:問題:如何對返回的結(jié)果進行處理:處理方式:(1)

若是添加、刪除、修改,返回實際處理的記錄條數(shù),利用所返回的值,確定所執(zhí)行的操作是否成功。返回值為0或者非0.(2)

若是查詢,得到的是查詢記錄集合,

需要對每個記錄的每個字段進行加工處理。實現(xiàn):(1)對“添加、刪除、修改”更新數(shù)據(jù)庫的操作(采用控制臺界面、網(wǎng)頁顯示):Stringsql2=“deletestuwherecj>=60andcj<=80”;//刪除記錄SQL語句

PreparedStatementpstmt=conn.prepareStatement(sql2);intn=pstmt.executeUpdate();//執(zhí)行,返回實際刪除記錄的條數(shù),注意,這里是空參數(shù)if(n>0){System.out.println(“刪除記錄成功,共刪除了”+n+“記錄!”);}else{

System.out.println(“刪除不成功!”);}3、

如何對返回的結(jié)果進行處理呢?問題:如何對返回的結(jié)果進行處理:3、如何對返回的結(jié)果進行處(2)對“查詢”數(shù)據(jù)庫的操作——利用控制臺界面顯示信息:Stringsql=“selectxh,name,cjfromstuwherecj>=?andcj<=?"http://查詢SQL語句PreparedStatementpstmt=conn.prepareStatement(sql);pstmt.setInt(1,60);//根據(jù)?所在的位置號,給出對應(yīng)的具體數(shù)據(jù)。pstmt.setInt(2,80);RrsultSetrs=pstmt.executeQuery();//執(zhí)行,得到查詢結(jié)果集合,注意

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論