国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

你如何使用JavaBean操作數據庫?

2019-11-18 13:09:20
字體:
來源:轉載
供稿:網友

  你平時是如何使用jsp操作數據庫呢?對于jsp+javaBean模式,想必大家都已經很熟悉了,我們可以將獲取數據庫連接,查詢,更新甚至將其它的功能都封裝進javaBean----
  
  好了--下面讓我們來好好弄清楚一個問題:**你如何在JSP頁中取得DB中的數據?從javaBean中返回ResultSet,然后在JSP中枚舉嗎?假如是這樣的話,那我強烈建議你把這篇文章讀完。*^_^*
  
  用javaBean封裝數據庫操作誰不會?--對啊,大家都會,但是--假如構建一個高擴展性的“結構”?這就要用到java的相關知識了。廢話少說,我們先在Tomcat中創建一個DataSource- jdbc/Panabia,然后再創建一個java“基類”,這個類封裝了數據庫連接和連接的釋放:[程式中有相應的注解]
  
  CODE:
  
  package Panabia.db;
  
  import javax.sql.DataSource;
  import javax.naming.*;
  import java.sql.*;
  
  public class SQLFactory
  {
  
   PRivate static DataSource ds=null;
   private static Object Lock=new Object();
  
  //生成DataSource**
  public static DataSource gainDataSource(){
  try{
   if(ds==null){
    synchronized(Lock){
     if(ds==null){
      Context ctx=new InitialContext();
       ds=(DataSource)ctx.lookup(/"java:comp/env/jdbc/Panabia/");
      }
     }
    }
   }
   catch(NamingException e){e.printStackTrace();}
   return ds;
  }
  
  //生成SQL連接**
  public static synchronized Connection gainConnection(){
   Connection con=null;
   try{
   if(ds==null){
    gainDataSource();
    }
    con=ds.getConnection();
   }
   catch(SQLException e){e.printStackTrace();}
   return con;
  }
  
  //釋放SQL連接**
  public static void releaseConnection(ResultSet rs,PreparedStatement ps,Statement sql,Connection con){
  try{
    if(rs!=null)
    rs.close();
    }
    catch(SQLException e){e.printStackTrace();}
  try{
    if(ps!=null)
    ps.close();
    }
    catch(SQLException e){e.printStackTrace();}
  try{
    if(sql!=null)
    sql.close();
    }
    catch(SQLException e){e.printStackTrace();}
  try{
    if(con!=null&&!con.isClosed())
    con.close();
   }
   catch(SQLException e){e.printStackTrace();}
   }
  }
  
  大家都應該注重到了,這個類的所有的方法全部是static的,之所以這樣,主要是為了方便其它“擴展類”的調用,當然,還有其它好處--- :)
  
  好了,這個類就封裝完畢了,現在我們就可以針對不同的應用要求單獨寫javaBean了,比如一個簡單的:在JSP中列出verify表中的所有用戶名與密碼列表-
  
  該怎么做?--使用SQLFactory生成Connection,再生成Statement,再生成ResultSet--然后枚舉嗎?好象不錯,哦,等等......這樣做你難道沒有一種“非常親切”的感覺嗎?---對了,asp,php中就是如此-Faint~我們怎么又回到“原始社會”了....
  
  有沒有更好的方式?答案是肯定的,JAVA的能力是“通天”的強大,只要你能想得到,仔細看看它的API Document,就不難找出解決辦法。
  答案出來了:
  我們在查詢類中返回Iterator到JSP枚舉,而不是ResultSet。
  好了,我們的UserQuery類就產生了:
  
  CODE:
  
  package Panabia.Operate;
  
  import Panabia.db.SQLFactory;
  import java.util.*;
  import java.sql.*;
  
  public class UserQuery{
  
   private ArrayList list=null;
   private Connection con=null;
   private Statement sql=null;
   private ResultSet rs=null;
  
   public Iterator getResult(){
    try{
     con=SQLFactory.gainConnection();
     sql=con.createStatement();
     rs=sql.executeQuery(/"select * from verify/");
               //verify表只有兩個字段:username,passWord;
     list=new ArrayList();
      while(rs.next()){
       list.add(rs.getString(1));
       list.add(rs.getString(2));
        }
     }
     catch(SQLException e){e.printStackTrace();}
     finally{SQLFactory.releaseConnection(rs,null,sql,con);}
     return list.iterator();
     }
  }
  
  然后,就是在JSP頁中進行數據的枚舉:因為發現cnjbb不支持Html標簽的顯示,所以,只貼出了JSP中的全部java代碼片--
  ........
  Iterator it=UserQuery.getResult();
   while(it.hasNext()){
   out.print((String)it.next());
   }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新密市| 宜川县| 兰坪| 大安市| 秭归县| 甘泉县| 黔江区| 麻城市| 同德县| 陵川县| 梁平县| 额敏县| 象山县| 买车| 太和县| 寿阳县| 平潭县| 漳平市| 曲沃县| 大城县| 琼中| 轮台县| 柯坪县| 衡山县| 密山市| 德安县| 嵩明县| 林州市| 和静县| 凤山市| 大港区| 昌平区| 锡林郭勒盟| 永川市| 马鞍山市| 迭部县| 宁都县| 渑池县| 酉阳| 拜泉县| 长葛市|