Jsp + JavaBean循序漸進教程(四)

來源:互聯網
上載者:User
js|教程 JavaServer Pages+JavaBeans的資料庫操作應用
  上面已經講了一個簡單的JavaBean應用的計數器例子,當然在實際程式過程中,涉及的更多的還是和資料庫相關的操作,所以在這一節我們將重點闡述JavaServer Pages和JavaBeans如何對資料庫進行操作。這裡我們選取了一個比較有代表性比較實用的例子,那就是使用者註冊管理,因為這在網上使用比較的頻繁,不管是註冊Email、有獎調查、購買物品或者加入社區等等都會涉及到一個使用者註冊的問題;另外一方面,它又比較有代表性,涉及到了資料庫的記錄增加,記錄顯示等常見操作,所以我們就拿使用者註冊開刀了。
  程式採用Oracle Jdeveloper3.1開發,運行環境為Wiin2000+Tomcat3.1,資料庫系統採用了Oracle8.16i。
  首先我們建立一個資料庫demodb,其欄位如下面所示
  username VARCHAR2(20) 使用者名稱
  password VARCHAR2(20) 密碼
  email VARCHAR2(30) Email地址
  homepage VARCHAR2(50) 首頁
  signs VARCHAR2(200) 簽名
  regtime DATE 註冊時間
  接著我們建立幾個JavaBeans和JavaServer Pages檔案
  db.java檔案(封裝資料庫連接及一些底層操作)
  adduser.java檔案(進行使用者資料的讀取以及添加操作)
  newuser.jsp檔案(使用者新增頁面,用於輸入使用者註冊資訊)
  donewuser.jsp檔案(進行使用者註冊資訊添加)
  listuser.jsp檔案(所有的註冊使用者資訊列表)
  為了方便大家看代碼,在很多地方都進行了詳細的注釋和講解,至於JavaBean中涉及到Java文法結構的東西,請大家參考Java書籍。
  db.java檔案
  說明:這個JavaBean封裝資料庫連接及一些底層操作,派生出的類可以直接調用這些方法,另外提供了一個toChinese方法,主要用來進行中文資料的處理。
  // Copyright (c) 2000 http://jspbbs.yeah.net
  package lyf;
  /**
  * A Class class.
  * <P>
  * @author liuyufeng
  */
  //聲明類庫檔案
  import oracle.jdbc.driver.*;
  import java.net.*;
  import java.sql.*;
  import java.lang.*;
  import java.io.*;
  import java.util.*;
  public class db
  {
   //成員變數初始化
   Connection conn = null; //資料庫連接
   ResultSet rs = null; //記錄集
   String Username=""; //使用者名稱
   String Password=""; //密碼
   String Email=""; //email
   String Homepage=""; //首頁
   String Signs=""; //簽名
   //db的構建器
   public db()
   {
    try
    {//註冊資料庫驅動程式為Oracle驅動
     Class.forName(new oracle.jdbc.driver.OracleDriver());
    }
    catch(java.lang.ClassNotFoundException e)
    {
     //這樣寫是為了方便偵錯工具,出錯列印mydb()就知道在什麼地方出錯了
     System.err.println("mydb(): " + e.getMessage());
    }
   }
   //executeQuery方法用於進行記錄的查詢操作
   //入口參數為sql語句,返回ResultSet對象
   public ResultSet executeQuery(String sql)
   {
    rs = null;
    try
    { //建立資料庫連接,使用Oracle的一種thin串連方式,demo為主機名稱字,demodb為資料庫,後面的兩個demo為使用者名稱和密碼
     conn = DriverManager.getConnection("jdbc:oracle:thin:@demo:1521:demodb","demo","demo");
     Statement stmt = conn.createStatement();
     //執行資料庫查詢操作
     rs = stmt.executeQuery(sql);
    }
    catch(SQLException ex)
    {
     System.err.println("db.executeQuery: " + ex.getMessage());
    }
    return rs;
   }
   //executeUpdate方法用於進行add或者update記錄的操作
   //入口參數為sql語句,成功返回true,否則為false
   public boolean executeUpdate(String sql)
   {
    boolean bupdate=false;
    rs = null;
    try
    {
     //建立資料庫連接,其它參數說明同上面的一樣
     conn = DriverManager.getConnection("jdbc:oracle:thin:@demo:1521:demodb","demo","demo");
     Statement stmt = conn.createStatement();
     int rowCount = stmt.executeUpdate(sql);
     //如果不成功,bupdate就會返回0
     if(rowCount!=0)bupdate=true;
    }
    catch(SQLException ex)
    {
     //列印出錯資訊
     System.err.println("db.executeUpdate: " + ex.getMessage());
    }
    return bupdate;
   }
   //toChinese方法用於將一個字串進行中文處理
   //否則將會是???這樣的字串
   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;
    }
   }
  }

  adduser.java檔案
  說明:主要進行使用者資料的讀取以及添加操作,從db派生出來,addNewUser方法用來進行使用者資料的添加,checkUser()方法用來檢查使用者名稱是否重複,另外還有一些set/get方法用來對屬性進行處理,dousernew.jsp檔案將進行條用。
  // Copyright (c) 2000 http://jspbbs.yeah.net
  package lyf;
  /**
  * A Class class.
  * <P>
  * @author liuyufeng
  */
  //匯入java類庫
  import java.sql.*;
  import java.lang.*;
  import oracle.jdbc.driver.*;
  //adduser由db派生出來,擁有db的成員變數和方法
  public class adduser extends db {
  //構建器
  public boolean addNewUser(){
  boolean boadduser=false;
  try {
  //進行使用者註冊的記錄添加操作,產生sql語句
  String sSql=new String("insert into user(regtime,username,password,email,homepage,signs)");
  sSql=sSql+ " values(SYSDAYE,""+Username+"",""+Password+"",""+Email+"",""+Homepage+"",""+Signs+"")";
  //一種調試的方法,可以列印出sql語句,以便於查看錯誤
  System.out.println(sSql);
  //調用父類的executeUpdate方法,並根據成功以否來設定傳回值
  if(super.executeUpdate(sSql))boadduser=true;
  }
  catch(Exception ex) {
  //出錯處理
  System.err.println("adduser.addNewUser: " + ex.getMessage());
  }finally{
  //無論是否出錯,都要傳回值
  return boadduser;
  }
  }
  //checkUser()方法用來檢查使用者名稱是否重複
  //如果重複返回一個false
  public boolean checkUser(){
  boolean boadduser=false;
  try {
  //構建sql查詢語句
  String sSql="select * from user where username=""+Username+""";
  //調用父類的executeQuery方法
  if((super.executeQuery(sSql)).next()){
  //查詢出來的記錄集為空白
  boadduser=false;
  }else{
  boadduser=true;
  }
  }
  catch(Exception ex) {
  //出錯處理
  System.err.println("adduser.addNewUser: " + ex.getMessage());
  }finally{
  //傳回值
  return boadduser;
  }
  }
  //屬性的set/get方法,同請求的參數一致
  /*
  其實下面的所有get/set方法都是重複性勞動,為了避免重複性的拷貝粘貼工作,我寫了個軟體Jsp Code Faster,只要輸入一系列的欄位名,所有的get/set方法都可以自動產生,大家可以在我的網站http://jspbbs.yeah.net上下載這個軟體
  */
  //屬性使用者名稱Username的get/set方法
  public String getUsername(){
  return Username;}
  public void setUsername(String newUsername){
  //使用者名稱有可能是中文,需要進行轉換
  Username =db.toChinese(newUsername);}
  //屬性密碼Password的get/set方法
  public String getPassword(){
  return Password;}
  public void setPassword(String newPassword){
  Password = newPassword;}
  //屬性Email的get/set方法
  public String getEmail(){
  return Email;}
  public void setEmail(String newEmail){
  Email = newEmail;}
    //屬性首頁Homepage的get/set方法
  public String getHomepage(){
  return Homepage;}
  public void setHomepage(String newHomepage){
  Homepage = newHomepage;}
    //屬性首頁Signs的get/set方法
  public String getSigns(){
  return Signs;}
  public void setSigns(String newSigns){
    //簽名有可能是中文,需要進行轉換
  Signs = db.toChinese(newSigns);}
  }
  好了,到這裡,Javabean程式基本上寫完了,要注意的是中文處理一定要經過轉換,還有不一定所有的屬性都需要set/get方法,視情況而定,最後還需要編譯為class檔案,可以使用一些可視化的軟體如Jbuilder或者VisualAge等等來編譯。編譯後會發現有兩個檔案db.class和adduser.class檔案,都在lyf子目錄下。這兩個檔案就可以讓後面的jsp頁面調用了。



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。