版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JSP數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)主講:索望suowang@成都信息工程學(xué)院網(wǎng)絡(luò)工程系2022/10/181內(nèi)容提要數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)SQL語(yǔ)言常用的SQL指令的使用以及常用的SQL函數(shù)的使用。常用DBMS(數(shù)據(jù)庫(kù)管理系統(tǒng))JSP中使用JDBC開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用JDBCJDBC四種驅(qū)動(dòng)類(lèi)型JDBCAPI如何用JDBC連接并操作數(shù)據(jù)庫(kù)用JavaBean操作數(shù)據(jù)庫(kù)應(yīng)用實(shí)例2數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)數(shù)據(jù)庫(kù)按一定數(shù)據(jù)結(jié)構(gòu)組織并存儲(chǔ)在計(jì)算機(jī)中的一組相關(guān)數(shù)據(jù)的集合。能為各種用戶共享,具有最小的冗余;數(shù)據(jù)之間緊密聯(lián)系,而又有較高的獨(dú)立性。數(shù)據(jù)庫(kù)管理系統(tǒng)管理數(shù)據(jù)庫(kù)的系統(tǒng)軟件數(shù)據(jù)庫(kù)系統(tǒng)在計(jì)算機(jī)系統(tǒng)中引入數(shù)據(jù)庫(kù)后構(gòu)成的系統(tǒng)表(Table)一條記錄(Record)數(shù)據(jù)庫(kù)3數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)簡(jiǎn)介作為有效的數(shù)據(jù)存儲(chǔ)和組織管理工具,數(shù)據(jù)庫(kù)的應(yīng)用日益廣泛目前主流的數(shù)據(jù)庫(kù)產(chǎn)品有Oracle、SQLServer、DB2和MySQL等多種。在數(shù)據(jù)庫(kù)開(kāi)發(fā)領(lǐng)域中,需要掌握:SQL語(yǔ)言、數(shù)據(jù)訪問(wèn)接口:JDBC的使用。4SQL語(yǔ)言概述SQL(StructuredQueryLanguage)是關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的標(biāo)準(zhǔn)語(yǔ)言,用于和各類(lèi)數(shù)據(jù)庫(kù)連接,提供通用的數(shù)據(jù)管理和查詢功能。SQL可以為各種支持SQL-92標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)所接受和處理,通常各種DBMS都提供圖形用戶界面,以使用戶直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。但SQL語(yǔ)言本身并不是完整的編程語(yǔ)言,還需要與其他高級(jí)編程語(yǔ)言配合,才能實(shí)現(xiàn)應(yīng)用程序?qū)?shù)據(jù)庫(kù)的訪問(wèn)操作。5SQL語(yǔ)句分類(lèi)SQL分類(lèi)描述數(shù)據(jù)定義語(yǔ)言(DDL)數(shù)據(jù)定義語(yǔ)言(DDL)用于定義、修改或者刪除數(shù)據(jù)庫(kù)對(duì)象,如CreateTable、DropTable、CreateIndex等數(shù)據(jù)操縱語(yǔ)言(DML)數(shù)據(jù)操縱語(yǔ)言(DML)用于訪問(wèn)、建立或者操作在數(shù)據(jù)庫(kù)中已經(jīng)存在數(shù)據(jù),如Select、Insert、Update和Delete等等。數(shù)據(jù)控制語(yǔ)言(DCL)數(shù)據(jù)控制語(yǔ)言(DCL)管理對(duì)數(shù)據(jù)庫(kù)內(nèi)對(duì)象的訪問(wèn)權(quán)限的授予、變更和回收,如Grant、Revoke等等。6基本SQL語(yǔ)句數(shù)據(jù)庫(kù)的數(shù)據(jù)類(lèi)型不同的數(shù)據(jù)庫(kù)管理系統(tǒng)的數(shù)據(jù)類(lèi)型是不同的;常用的數(shù)據(jù)類(lèi)型有:數(shù)字類(lèi)型日期和時(shí)間類(lèi)型字符和字符串類(lèi)型對(duì)數(shù)據(jù)庫(kù)最常用的四大基本操作:查詢(Select)插入(Insert)更新(Update)刪除(Delete)也有稱(chēng)為CRUD:Create(創(chuàng)建)、Read(讀取)、Update(更新)和Delete(刪除)
7SELECT語(yǔ)句假定:有一個(gè)數(shù)據(jù)表,Students基本句型一:(最簡(jiǎn)單的SELECT語(yǔ)句)SELECT
字段名FROM
數(shù)據(jù)表例1.功能說(shuō)明:將Students表中的所有字段取出來(lái)。SELECT*FROMStudents例2.功能說(shuō)明:將Students表中的姓名字段取出來(lái)SELECT姓名FROMStudents
Id姓名語(yǔ)文數(shù)學(xué)外語(yǔ)8SELECT語(yǔ)句基本句型二:使用條件查詢SELECT字段名FROM數(shù)據(jù)表WHERE
篩選條件SELECT*FROMStudentsWHERE數(shù)學(xué)>60;例1.功能說(shuō)明:把所有數(shù)學(xué)成績(jī)大于60分的記錄選出來(lái)。SELECT*FROMStudentsWHERE數(shù)學(xué)=88or語(yǔ)文=88;例2.功能說(shuō)明:把數(shù)學(xué)成績(jī)等于88分或者語(yǔ)文成績(jī)等于88分的人選出來(lái)。例3.Like子句基本格式一:“_”匹配。 功能說(shuō)明:每個(gè)下劃線匹配一個(gè)任意字符,注意只匹配一個(gè)字符。比如:姓名like‘_敏’,匹配姓名以“敏”字結(jié)尾且字?jǐn)?shù)等于二的所有數(shù)據(jù)記錄,如:“張敏”。
SELECT*FROM數(shù)據(jù)庫(kù)表WHERE姓名Like'_敏‘例4.Like子句基本格式二:“%”匹配。 比如:姓名Like‘%敏%’,匹配姓名中出現(xiàn)“敏”的所有數(shù)據(jù)記錄,如:“周惠敏”,“于敏”、“敏大”、“敏二”等。比如要在數(shù)據(jù)庫(kù)中查詢姓江的人,只要利用一條SQL語(yǔ)句就可以了,
SELECT*FROM數(shù)據(jù)庫(kù)表WHERE姓名Like'江%'。9SELECT語(yǔ)句基本句型三:進(jìn)行排序SELECT字段名FROM數(shù)據(jù)表ORDERBY字段名SELECT*FROMStudentsORDERBY數(shù)學(xué)(注:從低到高排序) 例1.功能說(shuō)明:從Students表中取出所有字段,并按數(shù)學(xué)成績(jī)排序。SELECT*FROMStudentsORDERBY數(shù)學(xué),語(yǔ)文 例2.功能說(shuō)明:從Students表中取出所有字段,并按數(shù)學(xué)成績(jī)排序,如果數(shù)學(xué)成績(jī)相同則按照語(yǔ)文成績(jī)排序。SELECT*FROMStudentsORDERBY數(shù)學(xué)desc 例3.功能說(shuō)明:從Students表中取出所有字段,并按數(shù)學(xué)成績(jī)倒序。注:從高到低排序10DELETE語(yǔ)句DELETE語(yǔ)句:從表中刪除一條或多條數(shù)據(jù)記錄。基本語(yǔ)法:DELETEFROM
數(shù)據(jù)表WHERE
條件例子:功能說(shuō)明:刪除所有數(shù)學(xué)成績(jī)?yōu)榱愕挠涗?,如果沒(méi)有WHERE子句,則刪除所有記錄。DELETEfromStudentsWHERE數(shù)學(xué)=011UPDATE語(yǔ)句UPDATE語(yǔ)句:更新表中的一條或多條數(shù)據(jù)記錄?;菊Z(yǔ)法:UPDATE
數(shù)據(jù)表SET
字段值=新值WHERE條件例1:將Students表中所有人的成績(jī)加10分UPDATEStudentsSET數(shù)學(xué)=數(shù)學(xué)+10例2:將姓名中含有敏的人的數(shù)學(xué)成績(jī)更新為100分UPDATEStudentsSET數(shù)學(xué)=100WHERE姓名like'%敏%'
12INSERT語(yǔ)句INSERTINTO語(yǔ)句:添加一條或多條數(shù)據(jù)記錄到表中?;靖袷?:INSERTINTO
數(shù)據(jù)表VALUES(字段新值)基本格式2:INSERTINTO
數(shù)據(jù)表(字段一,字段二,……)VALUES
(字段新值)其中關(guān)鍵字兩種格式的區(qū)別是:當(dāng)values含有數(shù)據(jù)庫(kù)表所有字段的值,并且順序和數(shù)據(jù)庫(kù)字段一致時(shí),就可以省略數(shù)據(jù)庫(kù)表后面的字段名稱(chēng)。例1:INSERTINTOStudents(姓名,數(shù)學(xué))VALUES('周潤(rùn)發(fā)',70)例2:INSERTINTOStudentsVALUES(56,'周潤(rùn)發(fā)','網(wǎng)絡(luò)',70,80,90,89) 功能說(shuō)明:該語(yǔ)句等價(jià)于:
INSERTINTOStudents(ID,姓名,專(zhuān)業(yè),語(yǔ)文,數(shù)學(xué),外語(yǔ),專(zhuān)業(yè)課)VALUES(56,'周潤(rùn)發(fā)','網(wǎng)絡(luò)',70,80,90,89)13數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)Windows平臺(tái):SQLServer2000開(kāi)源平臺(tái):MySQLJava平臺(tái)的純Java數(shù)據(jù)庫(kù)Derby14使用JDBC開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用ODBC數(shù)據(jù)訪問(wèn)接口開(kāi)放式數(shù)據(jù)庫(kù)互連ODBC(OpenDataBaseConnectivity)是微軟公司開(kāi)發(fā)的一套開(kāi)發(fā)數(shù)據(jù)庫(kù)系統(tǒng)應(yīng)用程序接口規(guī)范,它支持應(yīng)用程序以標(biāo)準(zhǔn)的ODBC函數(shù)和SQL語(yǔ)句操作各種不同的數(shù)據(jù)庫(kù)。15JDBC數(shù)據(jù)訪問(wèn)接口為支持Java程序的數(shù)據(jù)庫(kù)操作功能,Java語(yǔ)言采用了專(zhuān)門(mén)Java數(shù)據(jù)庫(kù)編程接口(JDBC,JavaDataBaseConnectivity),用于在Java程序中實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作功能并簡(jiǎn)化操作過(guò)程。JDBC支持基本SQL語(yǔ)句,提供多樣化的數(shù)據(jù)庫(kù)連接方式,為各種不同的數(shù)據(jù)庫(kù)提供統(tǒng)一的操作界面JDBC可做三件事:1、與數(shù)據(jù)庫(kù)建立連接2、發(fā)送SQL語(yǔ)句3、處理結(jié)果
16JDBC的四種驅(qū)動(dòng)程序類(lèi)型JDBC-ODBC橋接驅(qū)動(dòng)程序:JDBC-ODBC橋驅(qū)動(dòng)程序提供將JDBC數(shù)據(jù)轉(zhuǎn)換為ODBC數(shù)據(jù)來(lái)源,再利用ODBC與數(shù)據(jù)庫(kù)傳輸數(shù)據(jù)。在服務(wù)器上必須可以安裝ODBC驅(qū)動(dòng)程序。性能不好應(yīng)用程序JDBC-ODBC橋接器ODBC
Driver數(shù)據(jù)庫(kù)SQL語(yǔ)句結(jié)果集17原生API驅(qū)動(dòng):這種類(lèi)型的驅(qū)動(dòng)程序把客戶機(jī)API上的JDBC調(diào)用轉(zhuǎn)換為Oracle、Sybase、Informix、DB2或其它DBMS所指定的原生碼。應(yīng)用程序JDBC驅(qū)動(dòng)程序原生驅(qū)動(dòng)程序數(shù)據(jù)庫(kù)SQL語(yǔ)句結(jié)果集18JDBC通過(guò)網(wǎng)絡(luò)純Java驅(qū)動(dòng)程序:這種驅(qū)動(dòng)程序?qū)DBC轉(zhuǎn)換為與DBMS無(wú)關(guān)的網(wǎng)絡(luò)協(xié)議,之后這種協(xié)議又被某個(gè)服務(wù)器轉(zhuǎn)換為一種DBMS協(xié)議。這種網(wǎng)絡(luò)服務(wù)器中間件能夠?qū)⑺募僇ava客戶機(jī)連接到多種不同的數(shù)據(jù)庫(kù)上。應(yīng)用程序JDBC驅(qū)動(dòng)程序中間件數(shù)據(jù)庫(kù)SQL語(yǔ)句結(jié)果集19本地協(xié)議純Java驅(qū)動(dòng)程序:這種類(lèi)型的驅(qū)動(dòng)程序由純Java所寫(xiě)成,并且直接與數(shù)據(jù)庫(kù)連接。性能最好
應(yīng)用程序JDBC驅(qū)動(dòng)程序數(shù)據(jù)庫(kù)SQL語(yǔ)句結(jié)果集20使用JDBC訪問(wèn)數(shù)據(jù)庫(kù)的第一步下載并安裝JDBC驅(qū)動(dòng)程序。MySQL數(shù)據(jù)庫(kù)的JDBC驅(qū)動(dòng)下載驅(qū)動(dòng)程序mysql-connector-java-5.1.7-bin.jar將mysql-connector-java-5.1.7-bin.jar拷貝到WebRoot/WEB-INF/lib目錄下SQLServer數(shù)據(jù)的JDBC驅(qū)動(dòng)下載地址:/downloads/details.aspx?familyid=07287B11-0502-461A-B138-2AA54BFDC03A&displaylang=en安裝JDBC驅(qū)動(dòng)程序,是個(gè)exe文件將%JDBC驅(qū)動(dòng)程序安裝目錄%/lib/mssqlserver.jar,msbase.jar,msutil.jar拷貝到WebRoot/WEB-INF/lib目錄下Derby數(shù)據(jù)的JDBC驅(qū)動(dòng)將驅(qū)動(dòng)derbyclient.jar拷貝到WebRoot/WEB-INF/lib目錄下21創(chuàng)建一個(gè)基本的JDBC應(yīng)用步驟一:注冊(cè)一個(gè)driver;步驟二:建立一個(gè)到數(shù)據(jù)庫(kù)的連接;步驟三:創(chuàng)建一個(gè)statement;步驟四:執(zhí)行SQL語(yǔ)句;步驟五:處理結(jié)果;步驟六:關(guān)閉JDBC對(duì)象importjava.sql.*;classFirstJDBCApp{ publicstaticvoidmain(String[]args) { Connectionconn=null; Statementstmt=null; ResultSetrst=null; try{
Class.forName("com.mysql.Driver");
Stringurl="jdbc:mysql://localhost:3306/JSPCourse";
Stringuser=“root"; Stringpassword="123456";
conn=DriverManager.getConnection(url,user,password);
System.out.println("成功連接上數(shù)據(jù)庫(kù)!");
stmt=conn.createStatement();
rst=stmt.executeQuery("Select*fromstudents");
while(rst.next()){ System.out.println(rst.getString("Name")); } } catch(Exceptione){ System.out.println("登錄失?。?); e.printStackTrace(); }
conn.close(); }}1、加載并注冊(cè)驅(qū)動(dòng)器2、建立連接3、創(chuàng)建Statement4、執(zhí)行SQL語(yǔ)句5、處理結(jié)果6、關(guān)閉連接221、Class類(lèi)通過(guò)調(diào)用forName方法加載Driver類(lèi)的一個(gè)實(shí)例并注冊(cè)到DriverManager類(lèi)2、DriverManager類(lèi)調(diào)用getConnection方法獲取一個(gè)與數(shù)據(jù)庫(kù)的連接Connection3、用Connection對(duì)象創(chuàng)建Statement,根據(jù)不同的需求,創(chuàng)建不同的Statement4、用Statement對(duì)象執(zhí)行SQL語(yǔ)句,得到結(jié)果集ResultSet23JDBCAPI
24Driver接口加載驅(qū)動(dòng)程序,不同的數(shù)據(jù)庫(kù)系統(tǒng)有不同的加載代碼:MySQL數(shù)據(jù)庫(kù):Class.forName(“com.mysql.jdbc.Driver");Class.forName("org.gjt.mm.mysql.Driver");MSSQLServerClass.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")OracleClass.forName(“oracle.jdbc.driver.OracleDriver”);DB2Class.forName(“com.ibm.db2.jdbc.app.DB2Driver”);Access(使用ODBC)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");DerbyClass.forName("org.apache.derby.jdbc.ClientDriver")25Driver接口加載驅(qū)動(dòng)程序后,驅(qū)動(dòng)程序會(huì)建立一個(gè)Driver對(duì)象,并用registerDriver(Driverdriver)方法向DriverManager來(lái)注冊(cè)此對(duì)象出錯(cuò)情況:Classnotfound無(wú)法找到JDBC驅(qū)動(dòng)程序類(lèi),出錯(cuò)在沒(méi)有將JDBC驅(qū)動(dòng)包加入lib包中或加入環(huán)境變量classpath中Drivernotfound沒(méi)有用DriverManager類(lèi)注冊(cè)JDBC驅(qū)動(dòng),解決辦法:Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”).newInstance();26DriverManager類(lèi)DriverManager類(lèi)是JDBC的管理層,作用于用戶與驅(qū)動(dòng)程序之間。建立與數(shù)據(jù)庫(kù)之間的連接,也就是創(chuàng)建一個(gè)Connection的實(shí)例。DriverManager類(lèi)的getConnection()方法將建立數(shù)據(jù)庫(kù)的連接:publicstaticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException同樣,不同的數(shù)據(jù)庫(kù)系統(tǒng),其URL也是不一樣的:在程序的最后,應(yīng)該關(guān)閉Connection對(duì)象:publicvoidclose()throwsSQLExceptionMySQLurl="jdbc:mysql://localhost:3306/dbName";MSSQLServerurl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbName";Oracleurl="jdbc:oracle:thin:@localhost:1521:dbName";DB2url="jdbc:db2://localhost:5000/dbName";27Connection接口Connection對(duì)象代表與數(shù)據(jù)庫(kù)的連接,Connection接口也是最頻繁使用的接口之一。常用方法:close()StatementcreateStatement()StatementcreateStatement(intresultSetType,intresultSetConcurrency)PreparedStatementprepareStatement(Stringsql)CallableStatementprepareCall(Stringsql)……28Statement接口Statement接口的對(duì)象用于將SQL語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)中,并訪問(wèn)結(jié)果。通常用于執(zhí)行單次的操作。Statement接口提供了三種執(zhí)行SQL語(yǔ)句的常用方法:publicResultSetexecuteQuery(Stringsql)throwsSQLException用于產(chǎn)生單個(gè)ResultSet的語(yǔ)句,例如SELECT語(yǔ)句。publicintexecuteUpdate(Stringsql)throwsSQLException用于執(zhí)行INSERT、UPDATE或DELETE語(yǔ)句以及SQLDDL語(yǔ)句,例如CREATETABLE和DROPTABLE。該方法返回一個(gè)整數(shù),指示受影響的行數(shù)。booleanexecute(String
sql)不知道是查詢還是更新的情況下,用此方法,返回是否有結(jié)果集29PreparedStatement接口預(yù)編語(yǔ)句(PreparedStatement)接口從Statement繼承而來(lái)與Statement相比:用于多次執(zhí)行的SQL操作,每次只是數(shù)據(jù)不同包含的是已編譯好的SQL語(yǔ)句SQL語(yǔ)句中有一個(gè)或多個(gè)參數(shù),用?替代,并且要用setXXX方法來(lái)設(shè)定?代表的值。PreparedStatementstmt=conn.prepareStatement(“INSERTINTOmyTablevalue(?,?,?)”);stmt.setString(1,”Jack”);stmt.setString(2,”1234”);stmt.setInt(3,30);30CallableStatement接口存儲(chǔ)過(guò)程:在執(zhí)行應(yīng)用程序之前,存儲(chǔ)過(guò)程就已經(jīng)內(nèi)建在數(shù)據(jù)庫(kù)中,在執(zhí)行應(yīng)用程序時(shí),直接以名稱(chēng)存取存儲(chǔ)過(guò)程。優(yōu)點(diǎn):執(zhí)行速度更快若語(yǔ)法有錯(cuò),可以在編譯時(shí)期就解決,而不是執(zhí)行期開(kāi)發(fā)人員只需要知道存儲(chǔ)過(guò)程的名稱(chēng)、輸入和輸出就能順利執(zhí)行31ResultSet接口ResultSet對(duì)象包含符合SQL語(yǔ)句執(zhí)行結(jié)果所有行,并且它通過(guò)一套get方法提供了對(duì)這些行中數(shù)據(jù)的訪問(wèn),常用的get方法有:intgetInt(intcolumnIndex),取得當(dāng)前行中第columnIndex列的整數(shù)的值。intgetInt(StringcolumnName),取得當(dāng)前行中列名為columnName的整數(shù)的值。DategetDate(intcolumnIndex),取得當(dāng)前行中第columnIndex列的日期的值。DategetDate(StringcolumnName),取得當(dāng)前行中列名為columnName的日期的值。publicStringgetString(intcolumnIndex),取得當(dāng)前行中第columnIndex列的字符串的值。publicStringgetString(StringcolumnName),取得當(dāng)前行中列名為columnName的字符串的值。其他類(lèi)型的get方法可以參考java文檔。ResultSet維護(hù)指向其當(dāng)前數(shù)據(jù)行的光標(biāo),讓光標(biāo)向下移動(dòng)一行的方法是:publicbooleannext()throwsSQLException32結(jié)果集的并發(fā)性結(jié)果集的并發(fā)性(Concurrency)決定ResultSet對(duì)象是否可以修改數(shù)據(jù)庫(kù)中的行??梢允褂肦esultSet類(lèi)中定義的int常量來(lái)指定結(jié)果集的并發(fā)性。ResultSet.CONCUR_READ_ONLY,指定ResultSet對(duì)象不能修改數(shù)據(jù)庫(kù),默認(rèn)值。ResultSet.CONCUR_UPDATABLE,指定ResultSet對(duì)象可以修改數(shù)據(jù)庫(kù)。33MSSQL.html<html><head><title>CH14-Mysql.html</title><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"></head><body>
<h2>JDBC應(yīng)用</h2><formname="form"action="MSSQL.jsp"method="post"><p>用戶名:<inputname="last_name"type="text"id="last_name"></p><p>密碼:<inputname="first_name"type="text"id="first_name"></p><p><inputtype="submit"value="提交"><inputtype="reset"value="重寫(xiě)"></p></form></body></html>MSSQL.JSP<%@pageimport="java.sql.*"%><%@pagecontentType="text/html;charset=gb2312"%><html><head><title>CH14-MSsql.jsp</title></head><body><h2>將信息存入SQLServer</h2><% Connectioncon=null; Statementstmt=null; Statementstmt1=null; ResultSetrs=null; request.setCharacterEncoding("GB2312"); Stringemployee_id=null; Stringlast_name=request.getParameter("last_name"); Stringfirst_name=request.getParameter("first_name"); Stringbirth="1978/12/11"; Stringsex="F"; Stringemail="aaa@"; Stringnew_last_name=""; Stringnew_first_name=""; try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();Stringurl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=JSPCourse";
Stringuser="sa"; Stringpassword="123456"; conn=DriverManager.getConnection(url,user,password); stmt=con.createStatement(); Stringupd="INSERTINTOemployee(employee_id,last_name,first_name,birth,sex,email)VALUES("+employee_id+",'"+last_name+"','"+first_name+"','"+birth+"','"+sex+"','"+email+"')"; stmt.executeUpdate(upd); stmt1=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); Stringquery="SELECT*FROMemployee"; rs=stmt1.executeQuery(query); rs.last(); new_last_name=rs.getString("last_name"); new_first_name=rs.getString("first_name"); stmt.close(); stmt1.close(); con.close(); } catch(SQLExceptionsqle) { out.println("sqle="+sqle); } finally { try{ if(con!=null) { con.close(); } } catch(SQLExceptionsqle) { out.println("sqle="+sqle); } }%></body></html>34<%@pagecontentType="text/html;charset=BIG5"import="java.sql.*"%><HTML><HEAD><METAHTTP-EQUIV="Content-Type"CONTENT="text/html;charset=gb2312"></HEAD><BODY><%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
Stringurl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=JSPCourse";Stringuser="sa";Stringpassword="123456";Connectionconn=DriverManager.getConnection(url,user,password);//使用PrepareStatementStringchangeUpdate="UPDATEBooks_InfoSETprice=?,publisher=?Wherebook_id=?;";PreparedStatementpstmt=con.prepareStatement(changeUpdate);//指定更新pstmt.setInt(1,700);pstmt.setString(2,"電子出版社");
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- flash 課件教學(xué)課件
- 自愿放棄孩子協(xié)議書(shū)(2篇)
- 購(gòu)買(mǎi)籽種合同范本(2篇)
- 高中技術(shù)《技術(shù)與設(shè)計(jì)II》課堂強(qiáng)化練習(xí)
- 節(jié)婦吟課件教學(xué)課件
- 南京航空航天大學(xué)《短片創(chuàng)作》2021-2022學(xué)年第一學(xué)期期末試卷
- 南京工業(yè)大學(xué)浦江學(xué)院《數(shù)值分析》2023-2024學(xué)年第一學(xué)期期末試卷
- 畢業(yè)論文(設(shè)計(jì))-香榭美臨住宅樓工程施工組織設(shè)計(jì)
- 深圳人民醫(yī)院幕墻工程施工組織設(shè)計(jì)
- 《致橡樹(shù)》說(shuō)課稿
- 高危兒規(guī)范化健康管理專(zhuān)家共識(shí)解讀
- 2024至2030年中國(guó)連續(xù)熱鍍鋁硅合金鋼板行業(yè)市場(chǎng)深度分析及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 05G335單層工業(yè)廠房鋼筋混凝土柱
- 2024年全國(guó)各地中考語(yǔ)文真題分類(lèi)匯編【第二輯】專(zhuān)題07 文言文對(duì)比閱讀(含答案)
- DL∕T 899-2012 架空線路桿塔結(jié)構(gòu)荷載試驗(yàn)
- 2024年深圳公司試用期員工勞動(dòng)合同范文(二篇)
- QBT 102T-2023 甜菜糖廠設(shè)計(jì)規(guī)范 (正式版)
- 2023年上海市閔行區(qū)中考二模語(yǔ)文試卷含詳解
- 2024年山東濟(jì)南新舊動(dòng)能轉(zhuǎn)換起步區(qū)專(zhuān)職網(wǎng)格員招聘筆試沖刺題(帶答案解析)
- 國(guó)家開(kāi)放大學(xué)《理工英語(yǔ)3》章節(jié)測(cè)試參考答案
- 智能手機(jī)維修技術(shù)第二版全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論