明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

Jsp + JavaBean循序漸進(jìn)圖文詳細(xì)教程(4)上

[摘要]JavaServer Pages+JavaBeans的數(shù)據(jù)庫(kù)操作應(yīng)用  上面已經(jīng)講了一個(gè)簡(jiǎn)單的JavaBean應(yīng)用的計(jì)數(shù)器例子,當(dāng)然在實(shí)際程序過程中,涉及的更多的還是和數(shù)據(jù)庫(kù)相關(guān)的操作,所以在這一節(jié)...
JavaServer Pages+JavaBeans的數(shù)據(jù)庫(kù)操作應(yīng)用

  上面已經(jīng)講了一個(gè)簡(jiǎn)單的JavaBean應(yīng)用的計(jì)數(shù)器例子,當(dāng)然在實(shí)際程序過程中,涉及的更多的還是和數(shù)據(jù)庫(kù)相關(guān)的操作,所以在這一節(jié)我們將重點(diǎn)闡述JavaServer Pages和JavaBeans如何對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。這里我們選取了一個(gè)比較有代表性比較實(shí)用的例子,那就是用戶注冊(cè)管理,因?yàn)檫@在網(wǎng)上使用比較的頻繁,不管是注冊(cè)Email、有獎(jiǎng)?wù){(diào)查、購(gòu)買物品或者加入社區(qū)等等都會(huì)涉及到一個(gè)用戶注冊(cè)的問題;另外一方面,它又比較有代表性,涉及到了數(shù)據(jù)庫(kù)的記錄增加,記錄顯示等常見操作,所以我們就拿用戶注冊(cè)開刀了。

  程序采用Oracle Jdeveloper3.1開發(fā),運(yùn)行環(huán)境為Wiin2000+Tomcat3.1,數(shù)據(jù)庫(kù)系統(tǒng)采用了Oracle8.16i。

  首先我們建立一個(gè)數(shù)據(jù)庫(kù)demodb,其字段如下面所示

username VARCHAR2(20) 用戶名
password VARCHAR2(20) 密碼
email VARCHAR2(30) Email地址
homepage VARCHAR2(50) 主頁(yè)
signs VARCHAR2(200) 簽名
regtime DATE 注冊(cè)時(shí)間

  接著我們建立幾個(gè)JavaBeans和JavaServer Pages文件

db.java文件(封裝數(shù)據(jù)庫(kù)連接及一些底層操作)
adduser.java文件(進(jìn)行用戶數(shù)據(jù)的讀取以及添加操作)
newuser.jsp文件(用戶新增頁(yè)面,用于輸入用戶注冊(cè)信息)
donewuser.jsp文件(進(jìn)行用戶注冊(cè)信息添加)
listuser.jsp文件(所有的注冊(cè)用戶信息列表)

  為了方便大家看代碼,在很多地方都進(jìn)行了詳細(xì)的注釋和講解,至于JavaBean中涉及到Java語(yǔ)法結(jié)構(gòu)的東西,請(qǐng)大家參考Java書籍。

  db.java文件

  說明:這個(gè)JavaBean封裝數(shù)據(jù)庫(kù)連接及一些底層操作,派生出的類可以直接調(diào)用這些方法,另外提供了一個(gè)toChinese方法,主要用來進(jìn)行中文數(shù)據(jù)的處理。

  // Copyright (c) 2000 http://jspbbs.yeah.net
package lyf;
/**
* A Class class.
* $#@60;P$#@62;
* @author liuyufeng
*/

  //聲明類庫(kù)文件
import oracle.jdbc.driver.*;
import java.net.*;
import java.sql.*;
import java.lang.*;
import java.io.*;
import java.util.*;
public class db br>   //成員變量初始化
Connection conn = null; //數(shù)據(jù)庫(kù)連接
ResultSet rs = null; //記錄集
String Username=""; //用戶名
String Password=""; //密碼
String Email=""; //email
String Homepage=""; //主頁(yè)
String Signs=""; //簽名
  //db的構(gòu)建器
public db() {
try {
  //注冊(cè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序?yàn)镺racle驅(qū)動(dòng)
Class.forName(new oracle.jdbc.driver.OracleDriver());
}
catch(java.lang.ClassNotFoundException e) {
  //這樣寫是為了方便調(diào)試程序,出錯(cuò)打印mydb()就知道在什么地方出錯(cuò)了
System.err.println("mydb(): " + e.getMessage());
}
}

  //executeQuery方法用于進(jìn)行記錄的查詢操作

  //入口參數(shù)為sql語(yǔ)句,返回ResultSet對(duì)象
public ResultSet executeQuery(String sql) {
rs = null;
try {
  //建立數(shù)據(jù)庫(kù)連接,使用Oracle的一種thin連接方式,demo為主機(jī)名字,demodb為數(shù)據(jù)庫(kù),后面的兩個(gè)demo為用戶名和密碼
conn = DriverManager.getConnection("jdbc:oracle:thin:@demo:1521:demodb","demo","demo");
Statement stmt = conn.createStatement();
  //執(zhí)行數(shù)據(jù)庫(kù)查詢操作
rs = stmt.executeQuery(sql);
}
catch(SQLException ex) {
System.err.println("db.executeQuery: " + ex.getMessage());
}
return rs;
}

  //executeUpdate方法用于進(jìn)行add或者update記錄的操作

  //入口參數(shù)為sql語(yǔ)句,成功返回true,否則為false
public boolean executeUpdate(String sql) {
boolean bupdate=false;
rs = null;
try {
  //建立數(shù)據(jù)庫(kù)連接,其它參數(shù)說明同上面的一樣
conn = DriverManager.getConnection("jdbc:oracle:thin:@demo:1521:demodb","demo","demo");
Statement stmt = conn.createStatement();
int rowCount = stmt.executeUpdate(sql);
  //如果不成功,bupdate就會(huì)返回0
if(rowCount!=0)bupdate=true;
}
catch(SQLException ex) {
  //打印出錯(cuò)信息
System.err.println("db.executeUpdate: " + ex.getMessage());
}
return bupdate;
}

  //toChinese方法用于將一個(gè)字符串進(jìn)行中文處理

  //否則將會(huì)是???這樣的字符串
public static String toChinese(String strvalue) {
try{
if(strvalue==null)
{
return null;
}
else
{
strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
return strvalue;
}
}catch(Exception e){
return null;
}
}