Disp BBS guest 註冊 登入(i) 線上人數: 89
看板 ott
作者 ott(寶貝)
標題 Jsp + JavaBean循序漸進教程(四)
時間 2010年01月24日 Sun. PM 02:06:10


   
 
     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為主機名字,de
     modb為數據庫後面的兩個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派生出來addNew
     User方法用來進行用戶數據的添加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+"",""+Homepa
     ge+"",""+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或者Vis
     ualAge等等來編譯。編譯後會發現有兩個文件db.class和adduser.class文
     件,都在lyf子目錄下。這兩個文件就可以讓後面的jsp頁面調用了。
     
     

--
※ 來源: DISP BBS (http://disp.twbbs.org)
※ 作者: ott  來自: 118.166.5.58  時間: 2010-01-24 14:06:10
※ 編輯: ott  時間: 2010-11-04 22:34:48  來自: 118-166-2-126.dynamic.hinet.net
※ 看板: ott 文章推薦值: 0 目前人氣: 0 累積人氣: 197 
※ 文章分類: -computer
分享網址: 複製 已複製
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇