




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同糾紛協(xié)商解決協(xié)議書
- 村路燈管護協(xié)議書
- 某醫(yī)院冠名協(xié)議書
- 老師催就業(yè)協(xié)議書
- 小飯桌入股協(xié)議書
- 理發(fā)店保障協(xié)議書
- 麻醉藥品和精神藥品管理培訓(xùn)課件
- 物管費和解協(xié)議書
- 碎石料供應(yīng)協(xié)議書
- 解除車貸款協(xié)議書
- 2022年廣東省深圳市中考化學(xué)真題試卷
- 工貿(mào)企業(yè)有限空間作業(yè)場所安全管理臺賬
- 國際財務(wù)管理教學(xué)ppt課件(完整版)
- DB33∕T 715-2018 公路泡沫瀝青冷再生路面設(shè)計與施工技術(shù)規(guī)范
- 彩色簡約魚骨圖PPT圖表模板
- 光引發(fā)劑的性能與應(yīng)用
- PID控制經(jīng)典PPT
- 圖像處理和分析(上冊)課后習(xí)題答案(章毓晉)
- 油田注入水細(xì)菌分析方法+絕跡稀釋法
- 醫(yī)師處方權(quán)申請
- 簡易充電器課程設(shè)計
評論
0/150
提交評論