用findByPrimaryKey返回的对象的getXXX方法得到的都是null 你看一看findByPrimaryKey返回的对象是不是null 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to wyzh(wyzh):返回的对象不是null 你用的是BMP?把代码贴出来看看. 看看是否在ejbLoad函数中给数据域赋值. 你的ejbCreate方法创建的数据(对象)是不是在内存中存在,把它作为你bean里面的字段保存下来,然后就可以用get方法得到 你想要的数据了 我在调用myhome.create之后,用getXXX方法可以得到数据,而用myhome.findByPrimaryKey之后,用getXXX方法得到的都是null,而且我发现在调用findByPrimaryKey之后,系统自动又调用了一次setEntityContext,由此看来,该bmp重新被实例化了. 我又发现,我用findByPrimaryKey可以找到create产生的数据,即使在数据库修改了,findByPrimaryKey找到的仍是原来的数据.而且这时候调用findByPrimaryKey时,系统没有调用ejbFindByPrimaryKey方法,只调用setEntityContext.真奇怪. to:zhouyiqing看哪里啊.拜托帮看一下jboss.xml<jboss> <enterprise-beans> <entity> <ejb-name>personBean0</ejb-name> <jndi-name>personBean0</jndi-name> <resource-ref> <res-ref-name>java:/MySqlDS</res-ref-name> <jndi-name>java:/MySqlDS</jndi-name> </resource-ref> </entity> </enterprise-beans></jboss>ejb-jar.xml<ejb-jar> <enterprise-beans> <entity> <ejb-name>personBean0</ejb-name> <home>PersonHome</home> <remote>Person</remote> <ejb-class>PersonBean</ejb-class> <persistence-type>Bean</persistence-type> <prim-key-class>java.lang.String</prim-key-class> <reentrant>False</reentrant> <resource-ref> <description /> <res-ref-name>java:/MySqlDS</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </entity> </enterprise-beans> <assembly-descriptor /></ejb-jar> 你有沒有寫主健類?<prim-key-class>java.lang.String</prim-key-class> 我在ejbLoad()中用ejbContext.getPrimaryKey()返回primaryKey再查找,就行了.ejbContext是私有变量,在setEntityContext中把参数赋给它.但是,我在网上看到很多例子里,都没有在ejbLoad()用ejbContext.getPrimaryKey(),而是直接用作为主键的私有变量进行查询的 在实现类中定义getPrimaryKey()方法体时,其类型要为主键类。你在ejbLoad()中用ejbContext.getPrimaryKey()返回primaryKey再查找应该是正确的。你最好把源码贴出来。 代码太长了.只贴一部分.ToolBean.java//import 部分省略public class ToolBean implements EntityBean{ private String toolID,description; private int weight; private EntityContext ejbContext; private Connection con; private String dbName ="java:/MySqlDS"; private InitialContext ic = null; private PreparedStatement ps = null; private Statement s = null; public void setEntityContext(EntityContext cntx) { ejbContext = cntx; try { makeConnection();//连接数据库用的,给con赋值 } catch (Exception ex) { throw new EJBException("Unable to connect to database. " +ex); } } public String ejbFindByPrimaryKey(String primaryKey) throws FinderException { try { ps = con.prepareStatement( "SELECT toolID FROM Tool WHERE toolID = ? "); ps.setString(1, primaryKey); ResultSet rs = ps.executeQuery(); if(rs.next()) { toolID = primaryKey; } else { System.out.println("Find Error"); } } catch (SQLException ex) { throw new EJBException("Exception in ejbFindByPrimaryKey:"+ex); } try { ps.close(); } catch(Exception e) { System.out.println("Cannt close statement:"+e); } return toolID; } public void ejbLoad() { try { this.toolID =(String)ejbContext.getPrimaryKey();//加上这一句就行了 ps = con.prepareStatement("SELECT * FROM Tool WHERE toolID = ?"); ps.setString(1, this.toolID); ResultSet rs = ps.executeQuery(); if(rs.next()) { this.toolID=rs.getString(1); this.description=rs.getString(2); this.weight=rs.getInt(3); } else { System.out.println("Load Error"); } } catch (SQLException ex) { throw new EJBException("Exception in ejbLoad:"+ex); } try { ps.close(); } catch(Exception e) { System.out.println("Cannt close statement:"+e); } }//其余的省略......} 用JSP调用业务方法,然后单步执行,看看return toolID是否为空。 to:xudaorong(道道道)我已经解决了.我在ejbLoad()中用ejbContext.getPrimaryKey()返回primaryKey再查找,就行了 jacob中能获得word文档中的某一个图片对象么 数组循环逻辑问题 ext combo tomcat4.1.36在加载应用时无法deploy麻烦高手看吓 spring mvc junit加载属性配置文件 求助,用java怎么连接IBM上的as400上的db2? 好久没来了,共享一点儿东东(weblogic8安装配置) 大家谁知道有没有java实现的视频聊天的开源项目啊? 如何存储java对象到数据库中去 关于filter的问题,标题要长长长长长长长长长长长长长长长长 ###EJB QL里面l的模糊查询### 求助,一条语句出错!
返回的对象不是null
看哪里啊.拜托帮看一下
jboss.xml
<jboss>
<enterprise-beans>
<entity>
<ejb-name>personBean0</ejb-name>
<jndi-name>personBean0</jndi-name>
<resource-ref>
<res-ref-name>java:/MySqlDS</res-ref-name>
<jndi-name>java:/MySqlDS</jndi-name>
</resource-ref>
</entity>
</enterprise-beans>
</jboss>ejb-jar.xml
<ejb-jar>
<enterprise-beans>
<entity>
<ejb-name>personBean0</ejb-name>
<home>PersonHome</home>
<remote>Person</remote>
<ejb-class>PersonBean</ejb-class>
<persistence-type>Bean</persistence-type>
<prim-key-class>java.lang.String</prim-key-class>
<reentrant>False</reentrant>
<resource-ref>
<description />
<res-ref-name>java:/MySqlDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</entity>
</enterprise-beans>
<assembly-descriptor />
</ejb-jar>
<prim-key-class>java.lang.String</prim-key-class>
ejbContext是私有变量,在setEntityContext中把参数赋给它.
但是,我在网上看到很多例子里,都没有在ejbLoad()用ejbContext.getPrimaryKey(),而是直接用
作为主键的私有变量进行查询的
你最好把源码贴出来。
public class ToolBean implements EntityBean
{
private String toolID,description;
private int weight;
private EntityContext ejbContext;
private Connection con;
private String dbName ="java:/MySqlDS";
private InitialContext ic = null;
private PreparedStatement ps = null;
private Statement s = null;
public void setEntityContext(EntityContext cntx)
{
ejbContext = cntx;
try
{
makeConnection();//连接数据库用的,给con赋值
}
catch (Exception ex)
{
throw new EJBException("Unable to connect to database. " +ex);
}
}
public String ejbFindByPrimaryKey(String primaryKey)
throws FinderException
{
try
{
ps = con.prepareStatement(
"SELECT toolID FROM Tool WHERE toolID = ? ");
ps.setString(1, primaryKey);
ResultSet rs = ps.executeQuery();
if(rs.next())
{
toolID = primaryKey;
}
else
{
System.out.println("Find Error");
}
}
catch (SQLException ex)
{
throw new EJBException("Exception in ejbFindByPrimaryKey:"+ex);
}
try
{
ps.close();
}
catch(Exception e)
{
System.out.println("Cannt close statement:"+e);
}
return toolID;
} public void ejbLoad()
{
try
{
this.toolID =(String)ejbContext.getPrimaryKey();//加上这一句就行了
ps = con.prepareStatement("SELECT * FROM Tool WHERE toolID = ?");
ps.setString(1, this.toolID);
ResultSet rs = ps.executeQuery();
if(rs.next())
{
this.toolID=rs.getString(1);
this.description=rs.getString(2);
this.weight=rs.getInt(3);
}
else
{
System.out.println("Load Error");
}
}
catch (SQLException ex)
{
throw new EJBException("Exception in ejbLoad:"+ex);
}
try
{
ps.close();
}
catch(Exception e)
{
System.out.println("Cannt close statement:"+e);
}
}
//其余的省略
......
}
我已经解决了.我在ejbLoad()中用ejbContext.getPrimaryKey()返回primaryKey再查找,就行了