你如何使用javaBean操作数据库(摘自www.CnJsp.com)

来源:互联网 发布:中国金融服务贸易数据 编辑:程序博客网 时间:2024/04/27 20:33

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

原创粉丝点击