首页 > 学院 > 开发设计 > 正文

你如何使用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--然后枚举吗?好象不错,哦,等等......这样做你难道没有一种“非常亲切”的感觉吗?---对了,aspphp中就是如此-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());
   }

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表