用JDBC訪問一個資料庫(轉)
用JDBC訪問一個資料庫[@more@]在這個練習裡你將學習使用JDBC訪問資料庫和插入一個記錄到資料庫的基礎知識。
在這個練習裡,你將寫RegistrationServlet類的register方法。這個類和你在Servlet1A練習裡用的一樣。在這個練習裡,你將使用資料庫的功能。這個練習將展示實現使用者需求的步驟。
第一部分:理解regsiter()方法在RegistrationServlet中的工作原理
在這個練習裡,你將在com.ibm.waslab.JDBC包上工作。擴充套件RegistrationServlet類,理解register()。這個方法拋一個SQLException。完整的方法宣告是:
public synchronized void register(Properties formInput)
throws SQLException{
}
register()方法在servlet取得控制時從doPost()方法裡被呼叫。register()方法實際上寫一個新的記錄到資料庫。我們將在第二部分寫register()方法。同時,我們需要確信一些設定步驟已經完成。
1.開啟init()方法,在super.init()的呼叫後面輸入以下的程式碼:
//Load JDBC driver for DB2
try
{
Class.forName(JKToysDBInfo.gerDriver());
}
catch (ClassNotFoundException e)
{
erroLog(“JDBC Driver not found”+e);
}
儲存init()方法。記住,在驅動器管理可以得到一個連線以前,一個正確的資料庫驅動器必須被servlet裝載。每一個servlet只在servlet的init()方法裡作一次。這個方法並不真地建立一個連線,它只是允許連線被建立。
注意:在這個情況下,我們裝載DB2 app驅動器。這個驅動器是在資料庫裝在servlet將要執行的同一臺機器上時使用的。如果你在訪問另一臺機器上的資料庫,你要使用net驅動器:
COM.ibm.db2.jdbc.net.DB2Driver
當用net驅動器得到一個連線,你需要在getConnection()裡使用的URL裡提供更多的資訊。資料庫所在的機器名或URL,和DB2 Java Gateway偵聽的埠號。一個有效的URL引數看上去是這樣的:
jdbc:db2://servrid:8888/databasename
第二部分
1.現在,回去,重新開啟register()方法。程式碼的第一行建立一個資料庫連線:
Connection conn=DriverManager.getConnection(URL,USER,PASSWORD);
你用驅動器管理器的靜態方法getConnection(),把資料庫的URL,一個有效的使用者ID和口令傳遞給它。url,userid和password在類被裝載時從一個屬性檔案裡得到(看靜態變數宣告)。
2.現在到了有挑戰性的部分了。我們要作的第一件事是找到已經被分配掉的最後一個客戶號碼,這樣我們可以分配給正在註冊的新客戶一個新的客戶號碼(比以前的最高的還要高)。我們要儲存這個新的客戶號碼在一個int變數名為nextId。為了做到這個,你會需要確信使用Statement類和ResultSet類。以下的SQL;
“SELECT MAX(CUSTNO) FORM”+DBOWNER+”.CUSTOMER”
將允許你獲得當前最高的客戶號。試試自己寫這個程式碼,基於課程筆記的例子。如果你需要幫助,看答案頁。
3.接著你將用一個prepared statement物件來把客戶屬性物件裡的資訊插入資料庫。輸入以下的行:
//Insert record in the database
PreparedStatement insertStatement=
conn.prepareStatement(“INSERT INTO”+DBOWNER+”.CUSTOMER(FNAME,LNAME,ADDR,CITY,STATE,AGE,ZIP,CUSTNO)”+”VALUES(?,?,?,?,?,?,?,?)”);
上面的行要求連線建立一個prepared statement物件叫insertStatement。SQL語句作為引數被傳遞。資料庫行的每一列的值用問號代表。每一個問號必須被一個正確型別的值代替。輸入以下行:
insertStatement.setString(1,formInput.getProperty(“FNAME”));
insertStatement.setString(2,formInput.getProperty(“LNAME”));
insertStatement.setString(3,formInput.getProperty(“ADDR”));
insertStatement.setString(4,formInput.getProperty(“CITY”));
insertStatement.setString(5,formInput.getProperty(“STATE”));
insertStatement.setString(6,formInput.getProperty(“AGE”));
insertStatement.setString(7,formInput.getProperty(“ZIP”));
insertStatement.setInt(8,nextId);
4.insertStatement執行對資料庫的更新。輸入下面兩行:
insertStatement.executeUpdate();
如果有錯誤出現在建立連線時,語句或訪問資料庫,這個方法會丟擲一個SQLException。
5.最後你需要儲存客戶號碼到formInput屬性物件。輸入下面行:
formInput.put(“CUSTNO”,new Integer(nextId).toString());
6.儲存方法。應該沒有錯誤。
7.接著你將需要為JKRegister servlet編輯WebSphere配置檔案。(編輯”[x:]IBMVJavaideproject_resourcesIBM WebSphere Test Environmentpropertiesserverservletservletserviceserrvlets.properties”.)
改變看上去這樣的行:
servlet.JKRegister.code=com.ibm.waslab.servlet1.RegistrationServlet
為這樣:
servlet.JKRegister,code=com.ibm.waslab.JDBC.RegistrationServlet
8.如果你的webserver在執行,關掉它。在VAJ,啟動SERunner。開啟你的web瀏覽器,到JK Toys網站的註冊頁面。在表格裡輸入註冊資訊,按註冊按鈕。你的新的servlet將被呼叫。登入進JKToys站點確信註冊已經發生。你的新的客戶號碼應該能在資料庫找到。
在這個練習你作了什麼
在這個練習,你編寫了Registration Servlet的register方法。這個方法用JDBC來建立一個新的客戶號碼,註冊一個新的客戶到資料庫。現在你有了在你的servlets裡訪問資料庫的基本知識。
答案
以下的程式碼建立一個SQL語句,執行在前一頁裡定義的SQL查詢。
//Get next customer number
Statement sqlStatement=conn.createStatement();
ResultSet result=sqlStatement.executeQuery(“SELECT MAX(CUSTNO) FROM”+DBOWNER+”.CUSTOMER”);
查詢的結果被放在ResultSet物件叫result裡面。結果的集合包含一個遊標,最初指向返回的第一行前面。為了得到查詢的值遊標必須用next()往前移動。用這個方法,遊標只能向前移動。下面幾行移動遊標到返回的值,增加1。
int nextId=0;
if(result.next()= =true)
{
nextId=result.getInt(1)+1;
}
if檢查確定是否有行被返回。如果沒有,結果為false。我們不處理錯誤的情況,但是它可以簡單地用把nextId設定為1來處理。我們還可以用ResultSet的方法getInt(String),列的名字為”CUSTNO”,但是因為我們知道只有一列會被返回,我們選擇用getInt(int)..
在這個練習裡,你將寫RegistrationServlet類的register方法。這個類和你在Servlet1A練習裡用的一樣。在這個練習裡,你將使用資料庫的功能。這個練習將展示實現使用者需求的步驟。
第一部分:理解regsiter()方法在RegistrationServlet中的工作原理
在這個練習裡,你將在com.ibm.waslab.JDBC包上工作。擴充套件RegistrationServlet類,理解register()。這個方法拋一個SQLException。完整的方法宣告是:
public synchronized void register(Properties formInput)
throws SQLException{
}
register()方法在servlet取得控制時從doPost()方法裡被呼叫。register()方法實際上寫一個新的記錄到資料庫。我們將在第二部分寫register()方法。同時,我們需要確信一些設定步驟已經完成。
1.開啟init()方法,在super.init()的呼叫後面輸入以下的程式碼:
//Load JDBC driver for DB2
try
{
Class.forName(JKToysDBInfo.gerDriver());
}
catch (ClassNotFoundException e)
{
erroLog(“JDBC Driver not found”+e);
}
儲存init()方法。記住,在驅動器管理可以得到一個連線以前,一個正確的資料庫驅動器必須被servlet裝載。每一個servlet只在servlet的init()方法裡作一次。這個方法並不真地建立一個連線,它只是允許連線被建立。
注意:在這個情況下,我們裝載DB2 app驅動器。這個驅動器是在資料庫裝在servlet將要執行的同一臺機器上時使用的。如果你在訪問另一臺機器上的資料庫,你要使用net驅動器:
COM.ibm.db2.jdbc.net.DB2Driver
當用net驅動器得到一個連線,你需要在getConnection()裡使用的URL裡提供更多的資訊。資料庫所在的機器名或URL,和DB2 Java Gateway偵聽的埠號。一個有效的URL引數看上去是這樣的:
jdbc:db2://servrid:8888/databasename
第二部分
1.現在,回去,重新開啟register()方法。程式碼的第一行建立一個資料庫連線:
Connection conn=DriverManager.getConnection(URL,USER,PASSWORD);
你用驅動器管理器的靜態方法getConnection(),把資料庫的URL,一個有效的使用者ID和口令傳遞給它。url,userid和password在類被裝載時從一個屬性檔案裡得到(看靜態變數宣告)。
2.現在到了有挑戰性的部分了。我們要作的第一件事是找到已經被分配掉的最後一個客戶號碼,這樣我們可以分配給正在註冊的新客戶一個新的客戶號碼(比以前的最高的還要高)。我們要儲存這個新的客戶號碼在一個int變數名為nextId。為了做到這個,你會需要確信使用Statement類和ResultSet類。以下的SQL;
“SELECT MAX(CUSTNO) FORM”+DBOWNER+”.CUSTOMER”
將允許你獲得當前最高的客戶號。試試自己寫這個程式碼,基於課程筆記的例子。如果你需要幫助,看答案頁。
3.接著你將用一個prepared statement物件來把客戶屬性物件裡的資訊插入資料庫。輸入以下的行:
//Insert record in the database
PreparedStatement insertStatement=
conn.prepareStatement(“INSERT INTO”+DBOWNER+”.CUSTOMER(FNAME,LNAME,ADDR,CITY,STATE,AGE,ZIP,CUSTNO)”+”VALUES(?,?,?,?,?,?,?,?)”);
上面的行要求連線建立一個prepared statement物件叫insertStatement。SQL語句作為引數被傳遞。資料庫行的每一列的值用問號代表。每一個問號必須被一個正確型別的值代替。輸入以下行:
insertStatement.setString(1,formInput.getProperty(“FNAME”));
insertStatement.setString(2,formInput.getProperty(“LNAME”));
insertStatement.setString(3,formInput.getProperty(“ADDR”));
insertStatement.setString(4,formInput.getProperty(“CITY”));
insertStatement.setString(5,formInput.getProperty(“STATE”));
insertStatement.setString(6,formInput.getProperty(“AGE”));
insertStatement.setString(7,formInput.getProperty(“ZIP”));
insertStatement.setInt(8,nextId);
4.insertStatement執行對資料庫的更新。輸入下面兩行:
insertStatement.executeUpdate();
如果有錯誤出現在建立連線時,語句或訪問資料庫,這個方法會丟擲一個SQLException。
5.最後你需要儲存客戶號碼到formInput屬性物件。輸入下面行:
formInput.put(“CUSTNO”,new Integer(nextId).toString());
6.儲存方法。應該沒有錯誤。
7.接著你將需要為JKRegister servlet編輯WebSphere配置檔案。(編輯”[x:]IBMVJavaideproject_resourcesIBM WebSphere Test Environmentpropertiesserverservletservletserviceserrvlets.properties”.)
改變看上去這樣的行:
servlet.JKRegister.code=com.ibm.waslab.servlet1.RegistrationServlet
為這樣:
servlet.JKRegister,code=com.ibm.waslab.JDBC.RegistrationServlet
8.如果你的webserver在執行,關掉它。在VAJ,啟動SERunner。開啟你的web瀏覽器,到JK Toys網站的註冊頁面。在表格裡輸入註冊資訊,按註冊按鈕。你的新的servlet將被呼叫。登入進JKToys站點確信註冊已經發生。你的新的客戶號碼應該能在資料庫找到。
在這個練習你作了什麼
在這個練習,你編寫了Registration Servlet的register方法。這個方法用JDBC來建立一個新的客戶號碼,註冊一個新的客戶到資料庫。現在你有了在你的servlets裡訪問資料庫的基本知識。
答案
以下的程式碼建立一個SQL語句,執行在前一頁裡定義的SQL查詢。
//Get next customer number
Statement sqlStatement=conn.createStatement();
ResultSet result=sqlStatement.executeQuery(“SELECT MAX(CUSTNO) FROM”+DBOWNER+”.CUSTOMER”);
查詢的結果被放在ResultSet物件叫result裡面。結果的集合包含一個遊標,最初指向返回的第一行前面。為了得到查詢的值遊標必須用next()往前移動。用這個方法,遊標只能向前移動。下面幾行移動遊標到返回的值,增加1。
int nextId=0;
if(result.next()= =true)
{
nextId=result.getInt(1)+1;
}
if檢查確定是否有行被返回。如果沒有,結果為false。我們不處理錯誤的情況,但是它可以簡單地用把nextId設定為1來處理。我們還可以用ResultSet的方法getInt(String),列的名字為”CUSTNO”,但是因為我們知道只有一列會被返回,我們選擇用getInt(int)..
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10796304/viewspace-952544/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JDBC資料庫訪問JDBC資料庫
- jdbc訪問KingbaseES資料庫SocketTimeoutException Read timed outJDBC資料庫Exception
- Spring Boot入門(五):使用JDBC訪問MySql資料庫Spring BootJDBCMySql資料庫
- JDBC用ResultSet訪問大量資料時會遇到的問題JDBC
- 多例項資料庫一個用PSU(轉載)資料庫
- 外網訪問MySQL資料庫MySql資料庫
- Oracle資料庫限制訪問IPOracle資料庫
- JDBC連結資料庫JDBC資料庫
- JDBC連線資料庫JDBC資料庫
- JSP+JDBC資料庫應用開發初步JSJDBC資料庫
- java 資料庫程式設計(一)JDBC連線Sql Server資料庫Java資料庫程式設計JDBCSQLServer
- 使用 @NoRepositoryBean 簡化資料庫訪問Bean資料庫
- 如何限制ip訪問Oracle資料庫Oracle資料庫
- jmeter 使用 ssh 方式訪問資料庫JMeter資料庫
- 【磐維資料庫】透過python訪問磐維資料庫資料庫Python
- 多例項資料庫一個用PSU資料庫
- Hive學習之JDBC訪問HiveJDBC
- Xamarin SQLite教程資料庫訪問與生成SQLite資料庫
- Python學習之旅:訪問MySQL資料庫PythonMySql資料庫
- 資料庫訪問幾種方式對比資料庫
- [開源] .Net ORM 訪問 Firebird 資料庫ORM資料庫
- JDBC第一篇【介紹JDBC、使用JDBC連線資料庫、簡單的工具類】JDBC資料庫
- Java與資料庫 —— JDBC標準Java資料庫JDBC
- JDBC之連線sqlserver資料庫JDBCSQLServer資料庫
- [轉載] 1.1Java使用JDBC原生方式連線MySql資料庫JavaJDBCMySql資料庫
- Pandas庫基礎分析——資料生成和訪問
- Holer實現外網訪問SQLServer資料庫SQLServer資料庫
- Holer實現MongoDB資料庫外網訪問MongoDB資料庫
- Holer實現外網訪問MariaDB資料庫資料庫
- Holer實現外網訪問PostgreSQL資料庫SQL資料庫
- Oracle透明閘道器訪問SQLServer資料庫OracleSQLServer資料庫
- Oracle透明閘道器訪問MySQL資料庫OracleMySql資料庫
- Java訪問資料庫的具體步驟:Java資料庫
- 3.2.4 開啟資料庫到限制訪問模式資料庫模式
- SpringBoot資料訪問(一) SpringBoot整合MybatisSpring BootMyBatis
- 【磐維資料庫】Oracle(透明閘道器)訪問磐維資料庫(PanWeiDB)資料庫Oracle
- 解決資料庫高併發訪問瓶頸問題資料庫
- Spring資料訪問Spring
- 第50問:從連線判斷應用訪問資料庫的異常行為資料庫