你如何使用javaBean操作數據庫(摘自www.CnJsp.com)

用javaBean封裝數據庫操作誰不會?--對啊,大家都會,但是--如果構建一個高擴展性的“結構”?這就要用到java的相關知識了。廢話少說,我們先在Tomcat中創建一個DataSource- jdbc/Panabia,然後再創建一個java“基類”,這個類封裝了數據庫連接和連接的釋放:[程式中有相應的註解]


package 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();}
 }
}

使用SQLFactory生成Connection,再生成Statement,再生成ResultSet--然後枚舉嗎?好象不錯,哦,等等......這樣做你難道沒有一種“非常親切”的感覺嗎?---對了,ASP,PHP中就是如此-Faint~我們怎麼又回到“原始社會”了....

有沒有更好的方式?答案是肯定的,JAVA的能力是“通天”的強大,只要你能想得到,仔細看看它的API Document,就不難找出解決辦法。
答案出來了:
我們在查詢類中返回Iterator到JSP枚舉,而不是ResultSet。
好了,我們的UserQuery類就產生了

import 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();
     }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章