?? 用jdbc訪問一個數據庫.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0056)http://eps.www85.cn4e.com/java/article/devshow.asp?id=69 -->
<HTML><HEAD><title>csdn_用JDBC訪問一個數據庫</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<STYLE type=text/css>TD {
FONT-FAMILY: "Verdana", "Arial", "宋體"; FONT-SIZE: 9pt
}
A {
COLOR: #660000; TEXT-DECORATION: underline
}
A:hover {
COLOR: #660000; TEXT-DECORATION: none
}
.line {
LINE-HEIGHT: 14pt
}
</STYLE>
<META content="MSHTML 5.00.2920.0" name=GENERATOR></HEAD>
<BODY bgColor=#ffffff text=#000000>
<table><tbody>
<TR>
<TD height=21>
<DIV align=center><B><FONT size=3>用JDBC訪問一個數據庫 <BR><FONT
size=2>
</FONT></FONT></FONT>
<HR align=center color=#cccccc noShade SIZE=1>
</DIV></TD></TR>
<TR>
<TD class=line><FONT
color=#333300><BR><BR>在這個練習里你將學習使用JDBC訪問數據庫和插入一個記錄到數據庫的基礎知識。 <BR><BR>在這個練習里,你將寫RegistrationServlet類的register方法。這個類和你在Servlet1A練習里用的一樣。在這個練習里,你將使用數據庫的功能。這個練習將展示實現用戶需求的步驟。 <BR><BR>第一部分:理解regsiter()方法在RegistrationServlet中的工作原理 <BR><BR>在這個練習里,你將在com.ibm.waslab.JDBC包上工作。擴展RegistrationServlet類,理解register()。這個方法拋一個SQLException。完整的方法聲明是: <BR><BR>public synchronized void register(Properties formInput) <BR><BR>throws SQLException{ <BR><BR><BR><BR>} <BR><BR>register()方法在servlet取得控制時從doPost()方法里被調用。register()方法實際上寫一個新的記錄到數據庫。我們將在第二部分寫register()方法。同時,我們需要確信一些設置步驟已經完成。 <BR><BR>1.打開init()方法,在super.init()的調用后面輸入以下的代碼: <BR><BR>//Load JDBC driver for DB2 <BR><BR>try <BR><BR>{ <BR><BR>Class.forName(JKToysDBInfo.gerDriver()); <BR><BR>} <BR><BR>catch (ClassNotFoundException e) <BR><BR>{ <BR><BR>erroLog(“JDBC Driver not found”+e); <BR><BR>} <BR><BR><BR><BR>保存init()方法。記住,在驅動器管理可以得到一個連接以前,一個正確的數據庫驅動器必須被servlet裝載。每一個servlet只在servlet的init()方法里作一次。這個方法并不真地建立一個連接,它只是允許連接被建立。 <BR><BR><BR><BR>注意:在這個情況下,我們裝載DB2 app驅動器。這個驅動器是在數據庫裝在servlet將要運行的同一臺機器上時使用的。如果你在訪問另一臺機器上的數據庫,你要使用net驅動器: <BR><BR>COM.ibm.db2.jdbc.net.DB2Driver <BR><BR>當用net驅動器得到一個連接,你需要在getConnection()里使用的URL里提供更多的信息。數據庫所在的機器名或URL,和DB2 Java Gateway偵聽的端口號。一個有效的URL參數看上去是這樣的: <BR><BR>jdbc:db2://servrid:8888/databasename <BR><BR>第二部分 <BR><BR>1.現在,回去,重新打開register()方法。代碼的第一行創建一個數據庫連接: <BR><BR>Connection conn=DriverManager.getConnection(URL,USER,PASSWORD); <BR><BR>你用驅動器管理器的靜態方法getConnection(),把數據庫的URL,一個有效的用戶ID和口令傳遞給它。url,userid和password在類被裝載時從一個屬性文件里得到(看靜態變量聲明)。 <BR><BR>2.現在到了有挑戰性的部分了。我們要作的第一件事是找到已經被分配掉的最后一個客戶號碼,這樣我們可以分配給正在注冊的新客戶一個新的客戶號碼(比以前的最高的還要高)。我們要存儲這個新的客戶號碼在一個int變量名為nextId。為了做到這個,你會需要確信使用Statement類和ResultSet類。以下的SQL; <BR><BR>“SELECT MAX(CUSTNO) FORM”+DBOWNER+”.CUSTOMER” <BR><BR>將允許你獲得當前最高的客戶號。試試自己寫這個代碼,基于課程筆記的例子。如果你需要幫助,看答案頁。 <BR><BR>3.接著你將用一個prepared statement對象來把客戶屬性對象里的信息插入數據庫。輸入以下的行: <BR><BR>//Insert record in the database <BR><BR>PreparedStatement insertStatement= <BR><BR>conn.prepareStatement(“INSERT INTO”+DBOWNER+”.CUSTOMER(FNAME,LNAME,ADDR,CITY,STATE,AGE,ZIP,CUSTNO)”+”VALUES(?,?,?,?,?,?,?,?)”); <BR><BR>上面的行要求連接創建一個prepared statement對象叫insertStatement。SQL語句作為參數被傳遞。數據庫行的每一列的值用問號代表。每一個問號必須被一個正確類型的值代替。輸入以下行: <BR><BR>insertStatement.setString(1,formInput.getProperty(“FNAME”)); <BR><BR>insertStatement.setString(2,formInput.getProperty(“LNAME”)); <BR><BR>insertStatement.setString(3,formInput.getProperty(“ADDR”)); <BR><BR>insertStatement.setString(4,formInput.getProperty(“CITY”)); <BR><BR>insertStatement.setString(5,formInput.getProperty(“STATE”)); <BR><BR>insertStatement.setString(6,formInput.getProperty(“AGE”)); <BR><BR>insertStatement.setString(7,formInput.getProperty(“ZIP”)); <BR><BR>insertStatement.setInt(8,nextId); <BR><BR>4.insertStatement執行對數據庫的更新。輸入下面兩行: <BR><BR>insertStatement.executeUpdate(); <BR><BR>如果有錯誤出現在創建連接時,語句或訪問數據庫,這個方法會拋出一個SQLException。 <BR><BR>5.最后你需要存儲客戶號碼到formInput屬性對象。輸入下面行: <BR><BR>formInput.put(“CUSTNO”,new Integer(nextId).toString()); <BR><BR>6.保存方法。應該沒有錯誤。 <BR><BR>7.接著你將需要為JKRegister servlet編輯WebSphere配置文件。(編輯”[x:]\IBMVJava\ide\project_resources\IBM WebSphere Test Environment\properties\server\servlet\servletservice\serrvlets.properties”.) <BR><BR>改變看上去這樣的行: <BR><BR>servlet.JKRegister.code=com.ibm.waslab.servlet1.RegistrationServlet <BR><BR>為這樣: <BR><BR>servlet.JKRegister,code=com.ibm.waslab.JDBC.RegistrationServlet <BR><BR>8.如果你的webserver在運行,關掉它。在VAJ,啟動SERunner。打開你的web瀏覽器,到JK Toys網站的注冊頁面。在表格里輸入注冊信息,按注冊按鈕。你的新的servlet將被調用。登錄進JKToys站點確信注冊已經發生。你的新的客戶號碼應該能在數據庫找到。 <BR><BR><BR><BR>在這個練習你作了什么 <BR><BR>在這個練習,你編寫了Registration Servlet的register方法。這個方法用JDBC來創建一個新的客戶號碼,注冊一個新的客戶到數據庫?,F在你有了在你的servlets里訪問數據庫的基本知識。 <BR><BR><BR><BR>答案 <BR><BR>以下的代碼創建一個SQL語句,執行在前一頁里定義的SQL查詢。 <BR><BR><BR><BR>//Get next customer number <BR><BR>Statement sqlStatement=conn.createStatement(); <BR><BR>ResultSet result=sqlStatement.executeQuery(“SELECT MAX(CUSTNO) FROM”+DBOWNER+”.CUSTOMER”); <BR><BR>查詢的結果被放在ResultSet對象叫result里面。結果的集合包含一個游標,最初指向返回的第一行前面。為了得到查詢的值游標必須用next()往前移動。用這個方法,游標只能向前移動。下面幾行移動游標到返回的值,增加1。 <BR><BR>int nextId=0; <BR><BR>if(result.next()= =true) <BR><BR>{ <BR><BR>nextId=result.getInt(1)+1; <BR><BR>} <BR><BR>if檢查確定是否有行被返回。如果沒有,結果為false。我們不處理錯誤的情況,但是它可以簡單地用把nextId設置為1來處理。我們還可以用ResultSet的方法getInt(String),列的名字為”CUSTNO”,但是因為我們知道只有一列會被返回,我們選擇用getInt(int).. <BR><BR><BR><BR></FONT></TD></TR>
<TR>
<TD height=5>
<HR align=center color=#cccccc noShade SIZE=1>
</TD></TR></TBODY></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -