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