隨筆-26  評(píng)論-44  文章-20  trackbacks-0
          開(kāi)發(fā)環(huán)境:java5,myeclipse,tomcat。為了從基礎(chǔ)理解javaweb,采用jsp+servlet,沒(méi)用任何框架。
          源文件有四個(gè)包:
          com.yijia_ctgu.bean
          com.yijia_ctgu.DB
          com.yijia_ctgu.exception
          com.yijia_ctgu.servlet


          bean包含一個(gè)類:user.java。它從形式上是bean,但到底是不是嚴(yán)格意義的bean,我自己也不確定。我只是怎樣方便開(kāi)發(fā)就怎樣寫。部分源文件如下:
          package com.yijia_ctgu.bean;

          import java.sql.SQLException;
          import java.util.List;

          import com.yijia_ctgu.DB.DBExcute;
          import com.yijia_ctgu.exception.NotQueryException;

          public class User {
            String username;
            String password;
            String ip;
            String mail;
            int authorize;
            DBExcute dbExcute=new DBExcute();
          public String getUsername() {
              return username;
          }
          public void setUsername(String username) {
              this.username = username;
          }
          public String getPassword()throws SQLException,NotQueryException {
              String sql="select password from user where username='"+username+"' ";
              try{
                  String password=dbExcute.queryString(sql);
                  return password;
              }catch(NotQueryException ex){
                  throw ex;
              }catch(SQLException ex){
                  throw ex;
              }
          }
          public void setPassword(String password)throws SQLException {
              String sql="update user set password='"+password+"' where username='"+username+"'";
              try {
                  dbExcute.update(sql);
              } catch (SQLException ex) {
                  throw ex;
              }
          }
          public int getAuthorize()throws SQLException,NotQueryException {
              String sql="select authorize from user where username='"+username+"' ";
                 try{
                     String str=dbExcute.queryString(sql);
                     int authorize=Integer.parseInt(str);
                     return authorize;
                 }catch(NotQueryException ex){
                      throw ex;
                  }catch(SQLException ex){
                      throw ex;
                  }
          }
          public void setAuthorize(int authorize)throws SQLException  {
              String sql="update user set authorize='"+authorize+"' where username='"+username+"'";
              try {
                  dbExcute.update(sql);
              } catch (SQLException ex) {
                  throw ex;
              }
          }
          public String getIp()throws SQLException,NotQueryException {
              String sql="select ip from user where username='"+username+"' ";
                 try{
                     String str=dbExcute.queryString(sql);
                     return str;
                 }catch(NotQueryException ex){
                      throw ex;
                  }catch(SQLException ex){
                      throw ex;
                  }
          }
          public void setIp(String ip)throws SQLException {
              String sql="update user set ip='"+ip+"' where username='"+username+"'";
              try {
                  dbExcute.update(sql);
              } catch (SQLException ex) {
                  throw ex;
              }
          }
          public String getMail()throws SQLException,NotQueryException {
              String sql="select ip from user where username='"+username+"' ";
                 try{
                     String str=dbExcute.queryString(sql);
                     return str;
                 }catch(NotQueryException ex){
                      throw ex;
                  }catch(SQLException ex){
                      throw ex;
                  }
          }
          public void setMail(String mail)throws SQLException {
              String sql="update user set mail='"+mail+"' where username='"+username+"'";
              try {
                  dbExcute.update(sql);
              } catch (SQLException ex) {
                  throw ex;
              }
          }
          public DBExcute getDbExcute() {
              return dbExcute;
          }
          public void setDbExcute(DBExcute dbExcute) {
              this.dbExcute = dbExcute;
          }
          }
          看到這里,你覺(jué)得它算不算做bean呢?

          DB包里的四個(gè)文件,DBExcute是原創(chuàng)的,其它的(數(shù)據(jù)庫(kù)連接部分)都是借用的。不知道我的DBExcute的重用性怎么樣?代碼如下:
          package com.yijia_ctgu.DB;

          import java.sql.Connection;
          import java.sql.ResultSet;
          import java.sql.SQLException;
          import java.sql.Statement;
          import java.util.List;
          import java.util.Vector;

          import org.apache.commons.beanutils.RowSetDynaClass;

          import com.yijia_ctgu.DB.DBConnect;
          import com.yijia_ctgu.exception.NotQueryException;
          public class DBExcute{
              Connection conn;
              String condition;
              Statement stm;
              ResultSet rs;
              public DBExcute(){}
              public void initize(){
                   try{
                       if(conn==null){
                           conn=DBConnect.getConnection();
                       }
                       
                       if(stm==null){
                           stm=conn.createStatement();
                       }
                   }
                   catch(SQLException ex){
                       System.out.println("初始化錯(cuò)誤");
                   }
              }
               public void close(){
                   try{
                       if(rs!=null) rs.close();
                       if(stm!=null)stm.close();
                       if(conn!=null)conn.close();
                   }catch(SQLException ex){
                       System.out.println("關(guān)閉出錯(cuò)");
                   }
               }
               public String queryString(int i,String sql)throws SQLException,NotQueryException{
                   initize();
                   try{
                       String str=null;
                       rs=stm.executeQuery(sql);
                       //System.out.println("1");
                       if(rs.next()){
                           str=rs.getString(i);
                           return str;
                       }
                       else {
                           NotQueryException cex=new NotQueryException();
                           throw cex;
                       }
                   }catch(SQLException ex){
                       System.out.println("異常拋出 :queryString of Service");
                       throw ex;
                   }catch(NotQueryException cex){
                       System.out.println("notqurey異常 :queryString of Service");
                       throw cex;
                   }    
                   }
               public String queryString(String sql) throws SQLException,NotQueryException{
                   return queryString(1,sql);
               }
               public List queryList(String sql)throws SQLException{
                   initize();
                   try{
                       rs=stm.executeQuery(sql);
                       RowSetDynaClass rsdc = new RowSetDynaClass(rs);
                       List list = rsdc.getRows();
                       return list;
                   }catch(SQLException ex){
                       System.out.println("異常拋出 :queryList of Service");
                       throw ex;
                   }
           }
               public boolean update(String sql)throws SQLException{
                   initize();
                   try{
                       stm.executeUpdate(sql);
                       return true;
                   }catch(SQLException ex){
                       System.out.println("異常拋出 :update of Service");
                       throw ex;
                   }
               }
               public static void main(String[] args){
                   DBExcute dbExcute=new DBExcute();
                   try{
                       String str=dbExcute.queryString(1,"select authorize from user where username='root' ");
                       System.out.println(str);
                       dbExcute.queryList("select authorize from user where username='root' ");
                   }catch(Exception ex){
                       System.out.println("test failer");
                   }
               }
          }

          exception包中是自定義的異常,起到了一點(diǎn)小作用。

          servlet中就不多說(shuō)了,全是自己寫的,沒(méi)什么特別的地方。看它的時(shí)候注意session變量userList.

          jsp頁(yè)面:為了全面一點(diǎn),修改和添加 是用鏈接實(shí)現(xiàn)的,搜索和刪除 是用表單完成的。還真看到問(wèn)題了。用超鏈接 鏈接servlet來(lái)實(shí)現(xiàn)修改的時(shí)候總是看不出效果,原來(lái)鏈接過(guò)去的都是到doGet()方法,我想表單傳過(guò)去的默認(rèn)的也是doGet()吧,這一點(diǎn)我沒(méi)查資料,不知道是不是這樣的?jsp頁(yè)面中同樣注意userList。

          現(xiàn)在只實(shí)現(xiàn)了用戶管理部分,如果有時(shí)間的話會(huì)繼續(xù)其它部分,那位同志有興趣的可以來(lái)完善它,本文附件附有源代碼。最后聲明:僅供學(xué)習(xí),僅此而已。

          歡迎多提寶貴意見(jiàn)!

          附件說(shuō)明
          開(kāi)發(fā)工具:java5,myeclipse,tomcat。
          使用方法:把papermanage文件夾copy到..\Apache Software Foundation\Tomcat 6.0\webapps文件夾下
                    登陸時(shí)用 用戶名:root(超級(jí)管理員),密碼:root 登陸才能看到 用戶管理的鏈接

          附件:  http://www.aygfsteel.com/Files/yijia/papermanage.rar
          沒(méi)找到上傳附件的地方,就先上傳文件上去,找復(fù)制鏈接到這里了。





          posted on 2008-06-13 09:42 開(kāi)機(jī) 閱讀(1047) 評(píng)論(7)  編輯  收藏 所屬分類: jsp+javabeanjavaweb

          評(píng)論:
          # re: 自己動(dòng)手做試卷管理系統(tǒng)-用戶管理部分 2008-06-18 17:42 | 無(wú)名氏
          異常處理有失偏頗  回復(fù)  更多評(píng)論
            
          # re: 自己動(dòng)手做試卷管理系統(tǒng)-用戶管理部分[未登錄](méi) 2008-08-12 16:28 | kevin
          import org.apache.commons.beanutils.RowSetDynaClass;
          這個(gè)是什么類,具體有什么作用!  回復(fù)  更多評(píng)論
            
          # re: 自己動(dòng)手做試卷管理系統(tǒng)-用戶管理部分 2008-08-15 17:01 | 開(kāi)機(jī)
          @kevin
          包裝數(shù)據(jù)庫(kù)返還的數(shù)據(jù),Row是數(shù)據(jù)庫(kù)的一行記錄,set是集合的意思,Dyna好像是指延遲。

          以下是摘抄別人的:
          ResultSetDynaClass (Wraps ResultSet in DynaBeans)

          一個(gè)很普通的DynaBean 的USER CASE就是用它來(lái)包裝其他原始集合,這些集合不是以JAVABEAN的形式展示的。最常見(jiàn)的情況就是當(dāng)你請(qǐng)求JDBC驅(qū)動(dòng)查詢SQL語(yǔ)句返回java.sql.ResultSet類型的記錄的時(shí)候,BeanUtils提供了標(biāo)準(zhǔn)的機(jī)制來(lái)把每一行resultset轉(zhuǎn)變?yōu)橐粋€(gè) DynaBean,參照下列:

          Connection conn = ...;
          Statement stmt = conn.createStatement();
          ResultSet rs = stmt.executeQuery
          ("select account_id, name from customers");
          Iterator rows = (new ResultSetDynaClass(rs)).iterator();
          while (rows.hasNext()) {
          DynaBean row = (DynaBean) rows.next();
          System.out.println("Account number is " +
          row.get("account_id") +
          " and name is " + row.get("name"));
          }
          rs.close();
          stmt.close();

          RowSetDynaClass (Disconnected ResultSet as DynaBeans)

          盡管ResultSetDynaClass是一個(gè)用來(lái)展示sql查詢的很好的技術(shù)(當(dāng)成DynaBean),但是最大的問(wèn)題就是在MVC的結(jié)構(gòu)之中,我們需要離線的取出查詢的所有數(shù)據(jù),而ResultSetDynaClass必須保持和數(shù)據(jù)庫(kù)相連。

          RowSetDynaClass 展示了解決這個(gè)問(wèn)題的不同方法。當(dāng)你構(gòu)造這樣的實(shí)例,那些原始的數(shù)據(jù)被復(fù)制到一系列in-memory 的DynaBeans來(lái)代表這些結(jié)果。這個(gè)技術(shù)的優(yōu)勢(shì)是,理所當(dāng)然,你可以立即關(guān)閉ResultSet(和他相連的Statement),這些操作都可以在你處理被返回的數(shù)據(jù)之前。缺點(diǎn)就是,你需要為復(fù)制數(shù)據(jù)所需要的性能和內(nèi)存買單,而且數(shù)據(jù)的大小還得讓堆內(nèi)存可以適合。在許多情況下(特別是WEB APPS),這種折衷是有益處的。

          額外的方便就是,RowSetDynaClass 被定義為java.io.Serializable的實(shí)現(xiàn),因此它可以被序列化和反序列化。因此RowSetDynaClass展示了一種十分便利的方法來(lái)傳輸SQL結(jié)果到遠(yuǎn)程Java-based 客戶端應(yīng)用程序(比如APPLET).

          基本的RowSetDynaClass使用模式如下所示:

          Connection conn = ...; // Acquire connection from pool
          Statement stmt = conn.createStatement();
          ResultSet rs = stmt.executeQuery("SELECT ...");
          RowSetDynaClass rsdc = new RowSetDynaClass(rs);
          rs.close();
          stmt.close();
          ...; // Return connection to pool
          List rows = rsdc.getRows();
          ...; // Process the rows as desired

          WrapDynaBean and WrapDynaClass



          對(duì)于這個(gè)類,我也不是很懂,只是知道怎樣用而已,希望我的回答會(huì)對(duì)你有幫助。  回復(fù)  更多評(píng)論
            
          # re: 自己動(dòng)手做試卷管理系統(tǒng)-用戶管理部分 2008-08-15 17:12 | 開(kāi)機(jī)
          你看的這里的代碼是以前的,最近由于在項(xiàng)目中的應(yīng)用,代碼又增加了很多,完善了一些,尤其是操作數(shù)據(jù)庫(kù)的工具做成了和具體的數(shù)據(jù)庫(kù)無(wú)關(guān)的,有人說(shuō)好有人說(shuō)不安全,總之這算是創(chuàng)新吧(我自己是沒(méi)發(fā)現(xiàn)以往有象這樣做的,呵呵也許這樣并不是很好吧)。代碼在隨筆:自己動(dòng)手做試卷管理系統(tǒng)-操作數(shù)據(jù)庫(kù)的工具 里可以看到,還有一篇隨筆: js帶來(lái)了改變 看了之后就明白什么是與具體的數(shù)據(jù)庫(kù)無(wú)關(guān)的工具了。  回復(fù)  更多評(píng)論
            
          # re: 自己動(dòng)手做試卷管理系統(tǒng)-用戶管理部分[未登錄](méi) 2009-01-02 22:43 | ZY
          請(qǐng)問(wèn)一下,怎么用動(dòng)態(tài)鏈表實(shí)現(xiàn)試卷管理系統(tǒng)呢?  回復(fù)  更多評(píng)論
            
          # re: 自己動(dòng)手做試卷管理系統(tǒng)-用戶管理部分[未登錄](méi) 2009-06-08 18:06 |
          # re: 自己動(dòng)手做試卷管理系統(tǒng)-用戶管理部分[未登錄](méi) 2009-06-08 18:06 |

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 斗六市| 宜宾县| 克什克腾旗| 比如县| 浑源县| 廊坊市| 乐东| 张家口市| 阳江市| 晋江市| 黎城县| 上林县| 项城市| 喀喇| 永仁县| 靖江市| 仙居县| 滦南县| 东平县| 拜城县| 钟祥市| 马龙县| 理塘县| 东城区| 宿松县| 闽清县| 湄潭县| 荔波县| 延川县| 乌鲁木齐县| 渭南市| 正镶白旗| 南京市| 保康县| 衢州市| 南丰县| 兰考县| 宝应县| 略阳县| 治县。| 高邑县|