我个人感觉在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);
}
}
}
使用存储过程
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);
}
}
}
解决方案 »
- java如何实现将sql脚本自动上传至服务器
- jsp taglib 报错问题,can't find the taglibrary for 。。。
- 在struts测试中出现这个错误
- 在现在的JAVA项目开发中,用JPA(Java Persistence API)的多吗?或者说现在正在使用的同志们可以出来谈谈自己的使用心得!
- J2EE 不规则形状图片处理
- struts 中PO和DAO的问题?
- 为什么这个Applet运行报错?
- Thinking in java 第二版和第三版有什么区别么?
- 用Struts开发WEB后,打开此网页,出现org.apache.jasper.JasperException异常,请各位帮忙解决!!
- weblogic下怎么布署servlet请讲具体点
- 请问,有关JMS的问题,盼答
- 请大家推荐一本从宏观上介绍J2EE各种技术的书籍
group by 可以去出来以后在排序,没有多大关系吧
用 DataSource 来获取连接是不是已经通过连接池了?换句话说,如果用 DataSource 来获取连接的话,就不需要考虑自己写有关连接池的代码,对吗?
另外再问一下,如果OpenDbBean不是一个JavaBean而只是一个普通的Java类的话,可以吗?把它设计为一个JavaBean有什么特别的理由吗?to wafer_w(流浪的风) :
我也知道放哪儿都可以,从技术上说sql语句直接放在jsp页面也是可以的,但通常应该不会这么做。你说要看实际情况,那么可否举一、二个例子来说明呢?不一定要贴代码,简单地说说就行了。to dukeham(菜菜汉堡) :
那现在的主流应用程序服务器是否已经支持ejb2.1呢?
还有jb是不是也已经支持ejb2.1呢?