我个人感觉在session bean使用连接池,运用SQL语句进行些查询比使用笨拙的entity bean要好得多.
使用存储过程
public boolean CreateReport(){
    Connection conn=null;
    PreparedStatement ps=null;
    ResultSet rs=null;
    int status1=0;
    int status2=0;
    String today=String.valueOf(new java.sql.Date(System.currentTimeMillis()));
    today.substring(1,10);
    try{
        String callSQL="{call SubscribeReport(?)}";
        conn=db.getConnection();
        ps = conn.prepareCall(callSQL);
        ps.setString(1,today);
        if(true==ps.execute())
        {
          status2=1;
        }
      }catch (SQLException e) {
  throw new EJBException(e);
  }finally{
      db.CleanConnection(conn, ps, rs);
  }
  try{
         String callSQL="{call NoneSubscribeReport(?)}";
         conn=db.getConnection();
         ps = conn.prepareCall(callSQL);
         ps.setString(1,today);
         if(true==ps.execute())
         {status2=1;}
       }catch (SQLException e) {
   throw new EJBException(e);
  }finally{
       db.CleanConnection(conn, ps, rs);
   }
   if(status1!=0||status2!=0){
     return true;
   }else
    return false;
  }//使用sql语句
public CachedRowSet EmployeeMonthReport(String EminId,String StartDate,String EndDate)throws SQLException{
    //
   Connection conn=null;
   PreparedStatement ps=null;
   ResultSet rs=null;
   CachedRowSet  cst=new CachedRowSet();
   try{
       conn=db.getConnection();
       String sql="select substring(convert(varchar(10),AtinDate,(21)),6,10) as Date,EminId,EminName,DepartName,FireReason,AtinDatetime from EmployeeToDayReport where EminId=? and AtinDate>=? and AtinDate<=?";
       ps=conn.prepareStatement(sql);
       ps.setString(1,EminId);
       ps.setString(2,StartDate);
       ps.setString(3,EndDate);
       rs = ps.executeQuery() ;
       cst.populate(rs);
      }catch (SQLException e) {
       throw new EJBException(e);
       }finally{
         db.CleanConnection(conn, ps, rs);
      }
    return cst;  }说明下DB为下面JAVABEAN的实例import javax.ejb.*;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.util.Collection;
import javax.sql.DataSource;
import java.sql.*;public class OpenDbBean {
 //空的构造函数
  public void OpenDbBean(){}
  //**@建立数据库连接代码*/
  public Connection getConnection() throws SQLException {
                try {
                        InitialContext ic = new InitialContext();
                        DataSource ds = (DataSource) ic.lookup("OracleTxDataSource");
                        return ds.getConnection();
                     } catch (NamingException ex) {
                        throw new EJBException(ex);
                }
        }

解决方案 »

  1.   

    你也可以把sql语句写在session bean里面。然后在jsp里面调用就可以了
      

  2.   

    都有哪些不支持?能列一下吗?
    group by 可以去出来以后在排序,没有多大关系吧
      

  3.   

    ejb2.1 支持group by 了
      

  4.   

    to zijun28(茈君) :
      用 DataSource 来获取连接是不是已经通过连接池了?换句话说,如果用 DataSource 来获取连接的话,就不需要考虑自己写有关连接池的代码,对吗?
      另外再问一下,如果OpenDbBean不是一个JavaBean而只是一个普通的Java类的话,可以吗?把它设计为一个JavaBean有什么特别的理由吗?to wafer_w(流浪的风) :
      我也知道放哪儿都可以,从技术上说sql语句直接放在jsp页面也是可以的,但通常应该不会这么做。你说要看实际情况,那么可否举一、二个例子来说明呢?不一定要贴代码,简单地说说就行了。to dukeham(菜菜汉堡) :
      那现在的主流应用程序服务器是否已经支持ejb2.1呢?
      还有jb是不是也已经支持ejb2.1呢?
      

  5.   

    EJB QL 是专用与CMP的,用BMP就可随便用SQL语句咯
      

  6.   

    如果用EJB-QL的话,好像就没有办法做动态查询了