我觉得你的问题大部分和j2ee没什么关系
1.用sql语句搜索就可以了like
2. a:不管j2ee闲事,数据库中可以有主健也可以没有主健. 
   b:为什么要用CMP呢,我觉得他有一个最大的缺少就是不够灵活.可以用BMP嘛,你要处理什么?
3.因为你的页面没有重新请求数据,怎么可能会显示呢.除非你自己做个事件
4.一样一样一样的.自己写一个过滤器,通过web.xml加载,或是在你的取值前加request.setCharacterEncoding("GB2312");

解决方案 »

  1.   

    1 A.在EJB中可以添加FIND方法,可一查找非主键的字段
     B.在SQL语句中用ORDER BY 排序
      

  2.   

    1.如果你用jb,很简单,右健点你的entitybean就可以添加一个finder方法,输入QL语句,类似于sql语句,可以随意查询任何字段...
    如果手写,那就改写你的各个接口和ejb-jar.xml文件 .具体就不说了,看相关文档...
    2.用ejb必须有主键.即使一般的数据库设计也都要有主键的呀,没有的话那根本就是一个不合格的数据库.虽然也能用.
     排序你可以自己建一个排序类.继承java.util.Comparator;具体代码搜一下以前的帖子,我有贴过.
     b.cmp生成的主键?没什么不方便的地方吧?我没遇到过问题..
    3.不知道你什么意思,数据库变了,页面是静态的,必须要重新读取数据库才会显示数据库的内容,当然要刷新...不可能不用刷新的.4.中文乱码是个很经典的问题,有专门的文章论述,搜一下...
      最笨的就是把所有的字符串自己转换一下编码
     new String(原str.getByte(原编码),"gb2312")
    原编码 = request.getcharactencoding()(方法名可能有误)
      

  3.   

    1.在ejb bean 里面实现,这是masterEjb2.0BMP的例子:
    /**
     * Finds all Accounts by a name
     */
    public Collection ejbFindByOwnerName(String name) throws FinderException {
    PreparedStatement pstmt = null;
    Connection conn = null;
    Vector v = new Vector(); try {
    System.out.println("ejbFindByOwnerName(" + name + ") called"); /*
     * Acquire DB connection
     */
    conn = getConnection(); /*
     * Find the primary keys in the DB
     */
    pstmt = conn.prepareStatement("select id from accounts where ownerName = ?");
    pstmt.setString(1, name);
    ResultSet rs = pstmt.executeQuery(); /*
     * Insert every primary key found into a vector
     */
    while (rs.next()) {
    String id = rs.getString("id");
    v.addElement(new AccountPK(id));
    } /*
     * Return the vector of primary keys
     */
    return v;
    }
    catch (Exception e) {
    throw new FinderException(e.toString());
    }
    finally {
    /*
     * Release DB Connection for other beans
     */
    try { if (pstmt != null) pstmt.close(); }
    catch (Exception e) {}
    try { if (conn != null) conn.close(); }
    catch (Exception e) {}
    }
    }在ejb Home中声明:
    public Collection findByOwnerName(String name) throws FinderException, RemoteException;
      

  4.   

    依我个人观点,不是所有问题都得用EJB或J2EE来解决的。EJB和J2EE主要是将一些棘手的比较繁琐的安全和事务问题由容器来处理,其实也不全是这样,象BMP的实体Bean。反过来说,有相当一部分问题完全可以用javabean来实现。主要问题是,必须把结构弄清楚。将前台—中间—后台彻底划分出来,各负其责。
    关于中文问题:要注意,JSP和java中使用的编码是不同的。往往从request对象中取出参数值
    时,都要进行转换,然后将参数传入数据库。
      

  5.   

    问题3:
    我的addtocart.jsp的代码(参考他人的)<%@ page contentType="text/html;charset=gb2312" %>
    //<%@ page import="sun.net.smtp.SmtpClient, java.io.*" %>
    <%@ page language="Java" import="java.sql.*" %><jsp:useBean id="trans" scope="session" class="dbms.charConvert" />
    <jsp:useBean id="sqlbean" scope="session" class="dbms.Conn" />
    <%
    String userid;userid=(String)session.getValue("userid");
    if (userid==null)
    {
    response.sendRedirect("../login/login.htm");
    }
    %>
    <%String bookid,isbn,bname,rmb;
    bookid=request.getParameter("bookid");
    isbn=request.getParameter("isbn");
    bname=request.getParameter("bname");
    bname = new String(bname.getBytes("ISO-8859-1"),"gb2312");
    rmb=request.getParameter("rmb");//以下为了判断是否用户已定购此书,若已定够则数量加一,若否则增加新纪录。
    String forsql="select * from cart where userid='"+userid+"'and bookid='"+bookid+"'";
    ResultSet rsfor=sqlbean.executeQuery(forsql);
    if(rsfor.next())
    {
    String sql="update cart set num=num+1 where userid='"+userid+"'and bookid='"+bookid+"'";
    sqlbean.updateDb(sql);
    }
    else
    {
    String sql="insert into cart(userid,bookid,isbn,bname,rmb) values('"+userid+"','"+bookid+"','"+isbn+"','"+bname+"','"+rmb+"')";
    sqlbean.updateDb(sql);
    }//定向到显示购物彻页面
    response.sendRedirect("cart.jsp");
    %>
      

  6.   

    owenyang(和java 在一起)您的例子在CMP中可用吗?
      

  7.   

    其实我的第一个问题很简单,就是如何在CMP环境下实现通过数据表中不同的属性查找需要的数据项。