java11Java與數(shù)據(jù)庫的連接_第1頁
java11Java與數(shù)據(jù)庫的連接_第2頁
java11Java與數(shù)據(jù)庫的連接_第3頁
java11Java與數(shù)據(jù)庫的連接_第4頁
java11Java與數(shù)據(jù)庫的連接_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1第十章Java與數(shù)據(jù)庫的連接是否熟悉一種數(shù)據(jù)庫系統(tǒng)?Access、Oracle、Sybase、SQLServer、MySQL是否熟悉SQL語言?2課前思考一、

關(guān)系數(shù)據(jù)庫的基本概念數(shù)據(jù)以記錄(Record)和字段(Field)的形式存儲在數(shù)據(jù)表(Table)中數(shù)據(jù)表是關(guān)系數(shù)據(jù)庫的一種基本數(shù)據(jù)結(jié)構(gòu)若干個數(shù)據(jù)表構(gòu)成一個數(shù)據(jù)庫

310.1數(shù)據(jù)庫基礎(chǔ)知識例:4結(jié)構(gòu)化查詢語言(SQL)數(shù)據(jù)定義語言DDL(DataDefinitionLanguage)數(shù)據(jù)操縱語言DML(DataManipulationLanguage)數(shù)據(jù)查詢語言DQL(DataQueryLanguage)數(shù)據(jù)控制語言DCL(DataControlLanguage)5二、數(shù)據(jù)定義語言

(DDL)數(shù)據(jù)定義語言提供對數(shù)據(jù)庫及其數(shù)據(jù)表的創(chuàng)建、修改、刪除等操作create alterdrop61.創(chuàng)建數(shù)據(jù)表

CREATETABLE表名(

字段名l數(shù)據(jù)類型[限制條件], 字段名2數(shù)據(jù)類型[限制條件],

……, 字段名n數(shù)據(jù)類型[限制條件] );7

例:

createtablechengjibiao( xh char(10), xm char(20), bj char(20) );82.修改數(shù)據(jù)表

添加字段的格式:ALTER

TABLE

表名ADD字段名數(shù)據(jù)類型[限制條件];刪除字段格式:ALTER

TABLE

表名DROPCOLUMN字段名9例:

添加一個字段

altertablechengjibiaoaddscoreint

刪除一個字段

altertablechengjibiaodropcolumnscore3.刪除數(shù)據(jù)表

DROPTABLE表名;10三、數(shù)據(jù)操縱語言(DML)數(shù)據(jù)操縱語言用來維護數(shù)據(jù)庫的內(nèi)容insertdeleteupdate11數(shù)據(jù)表中插入數(shù)據(jù)格式:INSERT

INTO

表名(字段名l,……,字段名n)VALUES(值l,……,值n);例:INSERTINTOchengjibiao(xm,score)VALUES(‘張三’,86);12數(shù)據(jù)更新語句

格式:UPDATE表名SET字段名l=新值l[,字段名2=新值2……]WHERE

條件;例:UPDATEchengjibiaoSETscore=89WHERExm='張三';13刪除記錄語句格式:DELETEFROM

表名WHERE

條件;例:DELETEFROMchengjibiaoWHERExm='張三';四、

數(shù)據(jù)查詢語句(DQL)語法格式:SELECT[DISTINCT]字段名l,[字段名2,……]

FROM表名[WHERE條件];例:SELECTxh,bjFROMchengjibiaoWHERExm=“張三”SELECT

*FROMchengjibiao15ODBC(OpenDatabaseConnectivity

)定義:ODBC是一種用來在相關(guān)和不相關(guān)的DBMS中存取數(shù)據(jù)的標(biāo)準(zhǔn)應(yīng)用程序數(shù)據(jù)接口。ODBC組成:應(yīng)用程序接口

為數(shù)據(jù)庫應(yīng)用程序開發(fā)者提供了統(tǒng)一的SQL編程接口。數(shù)據(jù)庫驅(qū)動器

實現(xiàn)ODBCAPI的函數(shù)調(diào)用,ODBCAPI是數(shù)據(jù)庫廠商為程序設(shè)計者提供的一組直接訪問數(shù)據(jù)庫的函數(shù)。驅(qū)動程序管理器用于為應(yīng)用程序裝載數(shù)據(jù)庫驅(qū)動器,為應(yīng)用程序與數(shù)據(jù)庫之間的操作選擇相互匹配的ODBCAPI函數(shù)。數(shù)據(jù)源數(shù)據(jù)源是數(shù)據(jù)庫位置、數(shù)據(jù)庫類型以及ODBC驅(qū)動程序等信息的集成。16

10.2ODBC與JDBC概述JDBC

(JavaDataBaseConnectivity)是用于執(zhí)行SQL語句的Java應(yīng)用程序接口,由一組用Java語言編寫的類與接口組成,是一種底層API,使得獨立于DBMS的Java應(yīng)用開發(fā)工具和產(chǎn)品成為可能使開發(fā)人員可以用純Java語言編寫完整的數(shù)據(jù)庫應(yīng)用程序用JDBC寫的程序能夠自動地將SQL語句傳送給幾乎任何一種數(shù)據(jù)庫管理系統(tǒng)(DBMS)隔離了Java與不同數(shù)據(jù)庫之間的對話,使得程序員只須寫一遍程序就可讓它在任何數(shù)據(jù)庫管理系統(tǒng)平臺上運行使用已有的SQL標(biāo)準(zhǔn),并支持其它數(shù)據(jù)庫連接標(biāo)準(zhǔn),如與ODBC之間的橋連接1718Java程序通過JDBC訪問數(shù)據(jù)庫JDBCAPI中的重要類和接口(java.sql包中)名稱解釋DriverManager處理驅(qū)動的調(diào)入并且對產(chǎn)生新的數(shù)據(jù)庫連接提供支持DataSource在JDBC2.0API中被推薦使用代替DriverManager實現(xiàn)和數(shù)據(jù)庫的連接Connection代表對特定數(shù)據(jù)庫的連接Statement代表一個特定的容器,容納并執(zhí)行一條SQL語句ResultSet控制執(zhí)行查詢語句得到的結(jié)果集19一個基本的JDBC程序開發(fā)包含如下步驟:設(shè)置環(huán)境,引入相應(yīng)的JDBC類選擇合適的JDBC驅(qū)動程序并加載分配一個Connection對象分配一個Statement對象用該Statement對象進行查詢等操作從返回的ResultSet對象中獲取相應(yīng)的數(shù)據(jù)關(guān)閉Connection2010.3通過JDBC訪問數(shù)據(jù)庫JDBC驅(qū)動程序分類1.JDBC-ODBC橋驅(qū)動

程序

性能低2.相關(guān)數(shù)據(jù)庫提供的JDBC驅(qū)動程序(本地驅(qū)動)

程序

應(yīng)用于特定的數(shù)據(jù)庫上,性能高,移植性差21JDBCODBC數(shù)據(jù)庫JDBC數(shù)據(jù)庫通過JDBC-ODBC來連接數(shù)據(jù)庫設(shè)置ODBC數(shù)據(jù)源選擇“控制面板”→“管理工具”→“ODBC數(shù)據(jù)源”(某些window/xp系統(tǒng),需選擇“控制面板”→“性能和維護”→“管理工具”→“ODBC數(shù)據(jù)源”)。雙擊ODBC數(shù)據(jù)源圖標(biāo),出現(xiàn)的界面顯示了用戶已有的數(shù)據(jù)源的名稱。選擇“系統(tǒng)DSN”或“用戶DSN”,單擊“添加”按鈕,可以創(chuàng)建新的數(shù)據(jù)源;單擊“配置”按鈕,可以重新配置已有的數(shù)據(jù)源;單擊“刪除”按鈕,可以刪除已有的數(shù)據(jù)源。22加載驅(qū)動JDBC-ODBC驅(qū)動器try{

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

}catch(ClassNotFoundExceptione){}

注:“sun.jdbc.odbc.JdbcOdbcDriver”是驅(qū)動器類的名字以完整的Java類名為參數(shù),裝載此類,并返回一個Class對象,同時,自動創(chuàng)建一個驅(qū)動器類的實例,并自動調(diào)用驅(qū)動器管理器DriverManager類中的RegisterDriver方法來注冊它23建立與數(shù)據(jù)庫的連接Connectioncon=DriverManager.getConnection("jdbc:odbc:PMS","test","1234");將返回與指定數(shù)據(jù)庫建立的連接該方法有三個字符串參數(shù)第一個是JDBCURL,格式為jdbc:子協(xié)議:子名稱jdbc表示協(xié)議,JDBCURL中的協(xié)議總是jdbc;子協(xié)議是驅(qū)動器名稱;子名稱是數(shù)據(jù)源的名稱,如果是位于遠程服務(wù)器上的數(shù)據(jù)庫,則還應(yīng)該包括網(wǎng)絡(luò)地址,//主機名:端口/數(shù)據(jù)庫名第二個是訪問數(shù)據(jù)庫所需的用戶名(未設(shè)置可以為空)第三個是用戶密碼(未設(shè)置可以為空)Connection是一個接口,表示與指定數(shù)據(jù)庫的連接24對數(shù)據(jù)庫進行操作使用Connection對象創(chuàng)建Statement對象使用Statement對象執(zhí)行SQL命令從上一步驟返回的ResultSet對象中提取執(zhí)行結(jié)果25Connection接口有3個方法可用來創(chuàng)建向數(shù)據(jù)庫發(fā)送SQL語句的對象createStatement創(chuàng)建向數(shù)據(jù)庫發(fā)送SQL語句的Statement對象,用于簡單的SQL語句Statementst=con.createStatement();prepareStatement創(chuàng)建向數(shù)據(jù)庫發(fā)送SQL語句的PreparedStatement對象,用于帶有一個或多個參數(shù)的SQL語句。在SQL語句執(zhí)行前這些參數(shù)將被賦值prepareCall創(chuàng)建向數(shù)據(jù)庫發(fā)送SQL語句的CallableStatement對象,用于調(diào)用數(shù)據(jù)庫中的存儲過程26Statement接口提供了三種執(zhí)行SQL語句的方法,使用哪一個方法由SQL語句所產(chǎn)生的內(nèi)容決定

1.executeQuery用于產(chǎn)生單個結(jié)果集的語句,例如SELECT語句

ResultSetrs=st.executeQuery("Select*FromPerson");2.executeUpdate用于執(zhí)行INSERT、UPDATE或DELETE語句,以及CREATETABLE

st.executeUpdate("DELETEFROMPersonWHEREName='李四'");返回值是一個整數(shù),表示受影響的行數(shù)(即更新計數(shù))3.execute用于執(zhí)行返回多個結(jié)果集(ResultSet對象)、多個更新計數(shù)或二者組合的語句。例如執(zhí)行某個已存儲過程或動態(tài)執(zhí)行SQL,這時有可能出現(xiàn)多個結(jié)果的情況27查詢結(jié)果作為結(jié)果集(ResultSet)對象返回后,可以從ResultSet對象中提取結(jié)果使用next方法ResultSet對象中含有檢索出來的行,其中有一個指示器,指向當(dāng)前可操作的行,初始狀態(tài)下指示器是指向第一行之前方法next的功能是將指示器下移一行,所以第一次調(diào)用next方法時便將指示器指向第一行,以后每一次對next的成功調(diào)用都會將指示器移向下一行28使用getXXX方法使用相應(yīng)類型的getXXX方法可以從表中當(dāng)前行指定列提取不同類型的數(shù)據(jù)。getIntgetLonggetBytegetFloatgetDoublegetString允許使用列名或列序號作為getXXX方法的參數(shù)Strings=rs.getString("Name");Strings=rs.getString(2);2930

有關(guān)ResultSet對象定位指示器的方法

成員方法

功能booleanabsolute(introw)指示器指向row指定的行voidafterLast()指示器指向最后一行的后面voidbeforeFirst()指示器指向第一行的前面booleanfirst()指示器指向第一行booleanlast()指示器指向最后一行booleanisAfterLast()判斷指示器是否在最后一行之后booleanisBeforeFirst()判指示器是否在行第一行的前面booleanisfirst()判指示器是否在行第一行booleanisLast()判斷指示器是否在最后一行booleannext()將指示器指向從當(dāng)前位下移一行booleanprevious()將指示器指向從當(dāng)前位上移一行31例

java與Access數(shù)據(jù)庫的連接應(yīng)用1.創(chuàng)建Access數(shù)據(jù)庫的數(shù)據(jù)源,如test(程序中使用)2.在數(shù)據(jù)源中選擇要使用的數(shù)據(jù)庫,如test.mdb3.建立java程序,對庫中的表進行操作

SqlDemo.java例:importjava.sql.*;importjava.io.*;publicclassSqlDemo2{publicstaticvoidmain(String[]args)throwsException{

Stringurl=“jdbc:odbc:test”;//test指在ODBC上聲明的數(shù)據(jù)源名字Stringsqlstr,no,name,teacher,cname,type,place,time;Connectioncon;//連接類

Statementstmt;//SQL語句執(zhí)行類

ResultSetrs=null;//結(jié)果集類

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);//加載驅(qū)動

con=DriverManager.getConnection(url,"","");//建立數(shù)據(jù)庫連接

stmt=con.createStatement();//創(chuàng)建SQL語句執(zhí)行類

sqlstr="selectcount(*)fromcourse";//course為表名

rs=stmt.executeQuery(sqlstr);//使用executeQuery()方法執(zhí)行SQL命令

sqlstr="select*fromcourse";//獲得數(shù)據(jù)庫的所有記錄

rs=stmt.executeQuery(sqlstr);3233

System.out.println(“課程號課程名稱任課老師上課地點上課時間");

while(rs.next())//使用next()方法游歷數(shù)據(jù)庫的每條記錄

{

no=rs.getString(1);name=rs.getString(2);teacher=rs.getString(3);place=rs.getString(4);time=rs.getString(6);System.out.printf("%3s",no);System.out.printf("%-6s",name);System.out.printf("%-6s",teacher);System.out.printf("%-10s",place);System.out.printf("%s\n",time);}rs.close();//關(guān)閉結(jié)果集stmt.close();//關(guān)閉SQL語句執(zhí)行類con.close();//關(guān)閉數(shù)據(jù)庫連接類}}34例

Insert.javaSortResult.java

綜合實例——出版物管理相關(guān)數(shù)據(jù)庫提供的JDBC驅(qū)動程序(本地驅(qū)動)不同的數(shù)據(jù)庫廠商都提供了JDBC驅(qū)動程序以sql2000為例:(1)下載sql2000的jdbc驅(qū)動程序(2)加載驅(qū)動程序

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");353610.4MySql數(shù)據(jù)庫一、mysql數(shù)據(jù)庫簡介

MySQL數(shù)據(jù)庫為瑞典MySQLAB開發(fā)的小型關(guān)系數(shù)據(jù)庫,2008年被sun公司收購,網(wǎng)址:

目前ODBC不支持MySQL數(shù)據(jù)庫,因此不能用JDBC-ODBC橋連接方式,只能使用加載MySQL的純java驅(qū)動程序來建立連接(1)安裝、配置Mysql(另見獨立課件)后轉(zhuǎn)入DOS狀態(tài)(2)啟動:netstartmysql(3)連接:mysql-u用戶名-p密碼……

關(guān)閉:netstopmysql37二、JDBC操作步驟381.配置mysql數(shù)據(jù)庫的驅(qū)動程序

將mysql數(shù)據(jù)庫的驅(qū)動程序配置到CLASSPATH假定驅(qū)動程序保存在d:\mysql-connector-java-5.0.4-bin.jar392.加載驅(qū)動程序

不同數(shù)據(jù)庫的驅(qū)動程序是不一樣的,mysql的驅(qū)動程序采用“包.類”名稱的形式,打開mysql-connector-java-5.0.4-bin.jar即可發(fā)現(xiàn),其驅(qū)動路徑為\org.git.mm.mysql.Driver

包名類名

4041運行java程序前,需在mysql>下做好以下準(zhǔn)備:創(chuàng)建數(shù)據(jù)庫

CREATEDATABASEtest;打開數(shù)據(jù)庫

USEtest;建立user表(可將腳本復(fù)制運行)運行java程序在mysql>下查看結(jié)果

SELECT*fromuser;4243示例:importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassConnectionDemo{

//定義MySQL的數(shù)據(jù)庫驅(qū)動程序

publicstaticfinalStringDBDRIVER="org.gjt.mm.mysql.Driver";

//定義MySQL數(shù)據(jù)庫的連接地址

publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/test";

//MySQL數(shù)據(jù)庫的連接用戶名

publicstaticfinalStringDBUSER="root";

//MySQL數(shù)據(jù)庫的連接密碼publicstaticfinalStringDBPASS="mysqladmin";publicstaticvoidmain(Stringargs[]){ Connectionconn=null; //數(shù)據(jù)庫連接

//主機名:端口/數(shù)據(jù)庫名44try{Class.forName(DBDRIVER); //加載驅(qū)動程序

}catch(ClassNotFoundExceptione){ e.printStackTrace();}try{conn=

DriverManager.getConnection(DBURL,DBUSER,DBPASS);}catch(SQLExceptione){ e.printStackTrace();}System.out.println(conn); //如果此時可以打印表示連接正常

try{conn.close(); //數(shù)據(jù)庫關(guān)閉}catch(SQLExceptione){e.printStackTrace();}}}45importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;publicclassInsertDemo{publicstaticfinalStringDBDRIVER="org.gjt.mm.mysql.Driver";publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/test";publicstaticfinalStringDBUSER="root";publicstaticfinalStringDBPASS="mysqladmin";publicstaticvoidmain(Stringargs[])throwsException{ //所有的異常拋出

Connectionconn=null; //數(shù)據(jù)庫連接

Statementstmt=null; //數(shù)據(jù)庫操作

Class.forName(DBDRIVER); //加載驅(qū)動程序Stringsql="INSERTINTOuser(name,password,age,sex,birthday)"+ “VALUES(‘張三',‘a(chǎn)aaa',30,'男','2012-08-20')";conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);stmt=conn.createStatement(); //實例化Statement對象

stmt.executeUpdate(sql); //執(zhí)行數(shù)據(jù)庫更新操作

stmt.close(); //關(guān)閉操作conn.close(); //數(shù)據(jù)庫關(guān)閉}};插入記錄46importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;publicclassDeleteDemo{publicstaticfinalStringDBDRIVER="org.gjt.mm.mysql.Driver";publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/test";publicstaticfinalStringDBUSER="root";publicstaticfinalStringDBPASS="mysqladmin";publicstaticvoidmain(Stringargs[])throwsException{ //所有的異常拋出

Connectionconn=null; //數(shù)據(jù)庫連接

Statementstmt=null; //數(shù)據(jù)庫操作intid=2;Class.forName(DBDRIVER); //加載驅(qū)動程序

Stringsql=“DELETEFROMuserWHEREid=”+id;//刪除

conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);stmt=conn.createStatement(); //實例化Statement對象stmt.executeUpdate(sql); //執(zhí)行數(shù)據(jù)庫更新操作stmt.close(); //關(guān)閉操作conn.close(); //數(shù)據(jù)庫關(guān)閉}}刪除記錄47importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.sql.Statement;importjava.sql.ResultSet;publicclassResultSetDemo01{publicstaticfinalStringDBDRIVER="org.gjt.mm.mysql.Driver";publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/test";publicstaticfinalStringDBUSER="root";publicstaticfinalStringDBPASS="mysqladmin";publicstaticvoidmain(Stringargs[])throwsException{

Connectionconn=null; //數(shù)據(jù)庫連接

Statementstmt=null; //數(shù)據(jù)庫的操作對象

ResultSetrs=null; //保存查詢結(jié)果Stringsql="SELECT*FROMuser";Class.forName(DBDRIVER); //加載驅(qū)動程序

conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);stmt=conn.createStatement();

48rs=stmt.executeQuery(sql);

while(rs.next()){ //依次取出數(shù)據(jù)intid=rs.getInt("id"); //取出id列的內(nèi)容

Stringname=rs.getString("name"); //取出name列的內(nèi)容

Stringpassword=rs.getString("password");//取出password列的內(nèi)容

intage=rs.getInt("age"); //取出age列的內(nèi)容

Stringsex=rs.getString("sex"); //取出sex列的內(nèi)容

java.util.Dated=rs.getDate("birthday");//取出birthday列的內(nèi)容

System.out.print("編號:"+id+";");System.out.print("姓名:"+name+";");System.out.print("密碼:"+password+";");System.out.print("年齡:"+age+";");System.out.print("性別:"+sex+";");System.out.println("生日:"+d+";");System.out.println("-----------------------");

}rs.close();stmt.close(); conn.close(); //數(shù)據(jù)庫關(guān)閉}}49上例循環(huán)內(nèi)容可簡化如下:while(rs.next()){ //依次取出數(shù)據(jù)

intid=rs.getInt(1); //取出id列的內(nèi)容Stringname=rs.getString(2); //取出name列的內(nèi)容

Stringpassword=rs.getString(3);//取出password列的內(nèi)容

intage=rs.getInt(4); //取出age列的內(nèi)容

Stringsex=rs.getString(5); //取出sex列的內(nèi)容

java.util.Dated=rs.getDate(6);//取出birthday列的內(nèi)容

System.out.print("編號:"+id+";"); System.out.print("姓名:"+name+";"); System.out.print("密碼:"+password+";"); System.out.print("年齡:"+age+";"); System.out.print("性別:"+sex+";"); System.out.println("生日:"+d+";"); System.out.println("-----------------------");}首先在SQLServer2000中手工建立一個數(shù)據(jù)庫bookstore,所有參數(shù)均取默認值,然后編寫Java程序在此數(shù)據(jù)庫中建立一個表books,并實現(xiàn)對books表的管理,表包含的字段如下:12.5SQLServer2000數(shù)據(jù)庫應(yīng)用功能要求:能夠?qū)崿F(xiàn)建表、刪除表、刪除全部記錄、刪除指定記錄、修改指定記錄的內(nèi)容、插入新記錄和根據(jù)字段值插入記錄等功能。程序?qū)崿F(xiàn):importjava.sql.*;publicclassDBTableManager{//主類,用于表的管理

privatestaticfinalStringDRIVER_NAME="com.microsoft.jdbc.sqlserver.SQLServerDriver";privatestaticfinalStringURL="jdbc:microsoft:sqlserver://localhost:1433;User=sa;Password=sa;DatabaseName=bookstore";publicvoidupdate(intid,Stringname,floatprice,Stringauth){//修改記錄

try{//?表示占位符,運行時將會被指定參數(shù)替換Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");Connectionconn=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;user=sa;passWord=sa;DatabaseName=bookstore");Stringupdate="UpdatebookssetbookName=?,bookPrice=?,bookauthor=?wherebookId=?";PreparedStatementpstm=conn.prepareStatement(update);pstm.setString(1,name);//第1個參數(shù),表示bookNamepstm.setFloat(2,price);//第2個參數(shù),表示bookPricepstm.setString(3,auth);//第3個參數(shù),表示authorpstm.setInt(4,id);//第4個參數(shù),表示bookIDpstm.executeUpdate();//執(zhí)行更新操作

pstm.close();conn.close();}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(SQLExceptione){e.printStackTrace();}}publicvoidselectId(intid){//根據(jù)id號查詢輸出指定記錄

try{Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");Connectionconn=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;user=sa;password=sa;DatabaseName=bookstore");Stringsql="select*frombookswherebookId=?";PreparedStatementpstm=conn.prepareStatement(sql);pstm.setInt(1,id);//替換第1個占位符,表示bookIDResultSetsr=pstm.executeQuery();//建立結(jié)果集

while(sr.next()){//逐一讀出各記錄的列,并存貯在變量中

inti=sr.getInt("bookId");Stringname=sr.getString("bookName");intprice=sr.getInt("bookPrice");Stringauth=sr.getString("bookauthor");System.out.printf("%8d\t%8s\t%8d\t%8s\r\n",i,name,price,auth);}}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(SQLExceptione){e.printStackTrace();}}publicvoidselect(){//查詢輸出表記錄

try{Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");Connectionconn=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;user=sa;password=sa;DatabaseName=bookstore");Stringselect="select*frombooks";PreparedStatementptsm=conn.prepareStatement(select);ResultSetrs=ptsm.executeQuery();//記錄器

while(rs.next()){intid=rs.getInt("bookId");Stringname=rs.getString("bookName");intprice=rs.getInt("bookPrice");Stringauth=rs.getString("author");System.out

溫馨提示

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

最新文檔

評論

0/150

提交評論