文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

EJB查询返回值的解决方法是什么呢

2023-06-03 03:16

关注

这期内容当中小编将会给大家带来有关EJB查询返回值的解决方法是什么呢,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

关于EJB查询返回值的解决方法 

多少天来,为此问题寝食难安,我曾发誓若我能解决这个问题就要把它贴满各大BBS,如今得偿所愿。
csdn的Java版还需努力,最好分一下,如:javaunion
相信很多人都有如此之困惑,得此解决方法不敢独享,公之于众,以利后来人。
声明:此方法的至于彭璐大侠,彭大侠可能不常上网,这麽好的方法也不告诉我等之小虾米,只好代劳了,彭大侠的eMail不便公开,应该是金蝶的人吧。
好了,不废话了,有两种方法:
1、用vector:

>  public Enumeration ejbFindbigAccounts(double balanceGreaterThan) {
>  log("ejbFindBigAccounts (balance > " + balanceGreaterThan + ")");
>  Connection con = null;
>  PreparedStatement ps = null;
>
>  try {
>  con = getConnection();
>  ps = con.prepareStatement("select id from ejbAccounts where bal > ?");
>  ps.setDouble(1, balanceGreaterThan);
>  ps.executeQuery();
>  ResultSet rs = ps.getResultSet();
>  Vector v = new Vector();
>  String pk;
>  while (rs.next()) {
>  pk = rs.getString(1);
>  v.addElement(pk);
>  }
>  return v.elements();
>  } catch (sqlException sqe) {
>  log("SQLException: " + sqe);
>  throw new EJBException (sqe);
>  } finally {
>  cleanup(con, ps);
>  }
>  }
结论:不爽,不方便。

RowSet
RowSet tutorial chapter :
JDBCTutorial/chapter5.html">http://developer.java.sun.com/developer/Books/JDBCTutorial/chapter5.html

rowset是个interface,需要有东西去实现它,sun的规范中给了三个class:cachedrowset,jdbcrowset,webrowset,如果去查jdk1.4 doc和j2skee1.2,有rowset,却没有那三个class,一般的开发工具(至少我的wsad)中也是这样,所以需要下jdbc2.0 opt-pack:
http://developer.java.sun.com/developer/earlyAccess/crs/

下下来了再怎么办呢?
装呗!
怎么装呢?
setup呀!
没有呀?
啊,没setup呀,sun干什么吃的,连setup都不做个,也太懒了吧。
/////////////////////////////////
哎,我们确实是都被ms惯坏了,看到只有jar,没setup就没辙了,大家好好想想,java最大的特性是什么,就是它的类库可以自由扩充呀,现在明白该怎么做了吧:

解包,得到rowset.jar,放在哪随您的意,别丢了就行。
2、在您的开发工具中增加一个路径,如:ROWSET_PATH对应:d:jdk1.4jrerowset.jar(和1的路径对应就行)。
3、右键您的工程文件,出现:property(大多数工具应该都有吧),加上rowset_path。
4、在您的源文件中:import sun.jdbc.rowset.*;

OK,搞定!下面就看您的了。(当然也可以把rowset压到jre里去)
应该说rowset(其实主要是CachedRowSet)真的是个好东西,和ms ado的resultset和borland的tclientset非常相似,最大的好处是Cache功能!
好了,看例子吧:
/////////////server端/////////////
package example4;

import java.sql.*;
import javax.sql.*;
import sun.jdbc.rowset.*;
import javax.naming.*;
import javax.ejb.*;

public class CoffeesBean implements SessionBean {

  private SessionContext sc = null;
  private Context ctx = null;
  private Datasource ds = null;
 
  public CoffeesBean () {}
 
  public void ejbCreate() throws CreateException {

  try {
  ctx = new InitialContext();
  ds = (DataSource)ctx.lookup("jdbc/CoffeesDB");
  }
  catch (Exception e) {
  System.out.println(e.getMessage());
  throw new CreateException();
  }
  }

  public RowSet getCoffees() throws SQLException {
 
  Connection con = null;
ResultSet rs;
  CachedRowSet crs;

  try {
  con = ds.getConnection("webCustomer", "webPassword");
  Statement stmt = con.createStatement();
  rs =  stmt.executeQuery("select * from coffees");
 
  crs = new CachedRowSet();
  crs.populate(rs);
  // the writer needs this because JDBC drivers
  // don't provide this meta-data.
  crs.setTableName("coffees");
 
  rs.close();
  stmt.close();
  } finally {
  if (con != null)
  con.close();
  }
  return rset;
  }
 
  public updateCoffees(RowSet rs) throws SQLException {

  Connection con = null;

  try {
  CachedRowSet crs = (CachedRowSet)rs;
  con = ds.getConnection("webCustomer", "webPassword");
  // moves the changes back to the database
  crs.acceptChanges(con);
  } finally {
  if (con != null)
  con.close();
  }
  }

  //
  // Methods inherited from SessionBean
  //
 
  public void setSessionContext(SessionContext sc) {
  this.sc = sc;
  }
 
  public void ejbRemove() {}
  public void ejbPassivate() {}
  public void ejbActivate() {}

 
}


//////////////////client端//////////////
package example4;

import java.sql.*;
import javax.sql.*;
import sun.jdbc.rowset.*;
import javax.naming.*;
import javax.ejb.*;
import javax.Rmi.*;

class CoffeesClient {

  public static void main(String[] args) {

  try {
  // init the bean
  Context ctx = new InitialContext();
  object obj = ctx.lookup("ejb/Coffees");
  CoffeesHome coffeesHome = (CoffeesHome)
  PortableRemoteObject.narrow(obj, CoffeesHome.class);
  Coffees coffees = coffeesHome.create();
 
  // get the rowset from the bean
  CachedRowSet rset = (CachedRowSet)coffees.getCoffees();

  // find the Columbian coffee
  while (rset.next()) {
  String coffeeName = rset.getString("COF_NAME");
  if (coffeeName.equalsIgnoreCase(new String("Columbian"))) {
  // columbian coffee has gone up 10%
  rset.updateFloat("PRICE",
  (float)(rset.getFloat("PRICE") * 1.10));
  rset.updateRow();
  }
  }

  // finally send the updated back to the bean...
  System.out.println("Calling update method");
  coffees.updateCoffees((RowSet)rset);
  }
  catch (Exception e) {
  System.out.println(e.getMessage());
  }
  }
}
例子很简单就不多讲了。
cheers.
Robin
12/27/2001

Any question .NET">mailto:myvrml@263.net

上述就是小编为大家分享的EJB查询返回值的解决方法是什么呢了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯