可以把值放在一个vector里面返回么

解决方案 »

  1.   

    http://www.csdn.net/expert/topic/963/963114.xml?temp=.7746698你可以看看这个
      

  2.   

    实现序列化接口就可以传
    --- ZJQ
      

  3.   

    如果记录集很多的话可以用游标,
    Oracle可以用"select "+fname+" from (select rownum num,"+fieldname+" from (select "+fieldname+" from "+this.getTableName()+this.getFilter()+") temptable1) temptable2 where num between 1 and 10
      

  4.   

    如果想applet直接得到对象的化,还是序列化吧!!
     要不就用thin的JDBC直接访问数据库吧
      

  5.   

    Applet提交sql语句到servlet(服务端)后,返回查询的结果是ResultSet对象!该如何实现?最好给个例子!谢先了!
      

  6.   

    用sun.jdbc.rowset.CachedRowSet这个类能达到你的要求不客户端要安装plugin.
      

  7.   

    http://www.j-nine.com/pubs/applet2servlet/Applet2Servlet.html
      

  8.   

    这个问题很简单啊,你用vector把一个resultset对象put进去,客户端把vector里的resultset对象再提出来(提出来的是个object要用resultset强制转换一下就可以了)。
      

  9.   

    to: xiiiiix(小月飞) 用了你的方法了,出错!提示:
    java.io.NotSerializableException: sun.jdbc.odbc.JdbcOdbcResultSet
      

  10.   

    以下是servlet侧用来取数据的一个方法,数据用vector包装后,可到applet中打开,最好用post方法.Vector Casedata=new Vector();
       try{
           String tablename=String.valueOf(qry.elementAt(1)).trim() ;
          Statement stmt=dbcon.createStatement() ;       String sql="Select * from "+tablename.trim() ;       ResultSet rs=stmt.executeQuery(sql);
          ResultSetMetaData dmd=rs.getMetaData();
           int col=dmd.getColumnCount();
            if(col<1)  System.out.println("table erroer");
            Vector names=new Vector();
            for(int i=1;i<=col;i++)
            names.add(rs.getMetaData().getColumnName(i));
           Vector datas=new Vector(10,5);
            while (rs.next())
                {
             Vector vrow=new Vector(col);
             for(int i=1;i<=col;i++)
             vrow.addElement(rs.getObject(i));
             datas.addElement(vrow);
              }
                rs.close() ;
                 stmt.close() ;
              Casedata.addElement(names);
              Casedata.addElement(datas);
              ObjectOutputStream oos=new ObjectOutputStream(response.getOutputStream() );
      oos.writeObject(Casedata);//要传递的数据
      oos.flush() ;
      oos.close() ;
      qry.clear() ;
      
         }catch(SQLException e1)
              {
             System.out.println(e1.toString() );
               }catch( IOException eee )
          {
             System.err.println( "IOException caught!" );
             System.err.println( eee.getMessage() );
             eee.printStackTrace( System.err );
          }
      

  11.   

    rs1是一个ResultSet记录集
    ObjectOutputStream oos = new ObjectOutputStream(rsp.getOutputStream());
    oos.writeObject(rs1);
    oos.flush();
    oos.close();
    运行servlet,出错提示:
    java.io.NotSerializableException: sun.jdbc.odbc.JdbcOdbcResultSet
    什么意思?
      

  12.   

    从servlet接收到Applet的sql语句,所以servlet没法确定字段个数根据Applet的sql语句,返回sql语句的记录集,怎么实现?急!!!搞定马上给分!先谢了!!!
      

  13.   

    还没搞定?
    类在Stream中传送必须串行化。rs1是一个ResultSet记录集
    ObjectOutputStream oos = new ObjectOutputStream(rsp.getOutputStream());
    oos.writeObject(rs1);
    oos.flush();
    oos.close();
    运行servlet,出错提示:
    java.io.NotSerializableException: sun.jdbc.odbc.JdbcOdbcResultSet
    什么意思?没有实现串行化。MyResultSet extends ResultSet implements Serializable () {...}
    MyResultSet rs1;
    Applet, Servlet中都用MyResultSet代替ResultSet
      

  14.   

    还没搞定?
    类在Stream中传送必须串行化。rs1是一个ResultSet记录集
    ObjectOutputStream oos = new ObjectOutputStream(rsp.getOutputStream());
    oos.writeObject(rs1);
    oos.flush();
    oos.close();
    运行servlet,出错提示:
    java.io.NotSerializableException: sun.jdbc.odbc.JdbcOdbcResultSet
    什么意思?没有实现串行化。MyResultSet extends ResultSet implements Serializable () {...}
    MyResultSet rs1;
    Applet, Servlet中都用MyResultSet代替ResultSet
      

  15.   

    MyResultSet extends ResultSet implements Serializable () {...}是一个新类么?怎么提示:no interface expected here
      

  16.   

    对不起,没写全。是一个新类。public class MyResultSet extends ResultSet implements Serializable () {...}
      

  17.   

    怎么提示:no interface expected here可以给一个完整的么?
      

  18.   

    怎么提示: no interface expected here出错?
      

  19.   

    import java.io.*;
    import java.sql.*;
    import java.util.*;public class MyResultSet extends ResultSet implements Serializable
    {
    public MyResultSet()
    {}
    }
    编译出错,提示:
    MyResultSet.java:5: no interface expected here
    public class MyResultSet extends ResultSet implements Serializable
                                     ^
    1 error
      

  20.   

    注意以下几点:1。要传递的对象必须可以序列化;
    2。不要传递太多的数据,很容易溢出;
    3。浏览器里的jre版本低,而且很袖珍,很多类都没有,要用就得打成applet jar,很大也很繁(之间有依赖关系,打进去的文件可能很多,用jbuilder这样的工具好些)。比较好的办法就是用container类了,象是vector(这个1.1就有),把处理好的东西放进去。如果客户端机器稍微差一点,复杂的操作就作不来了,很可能死掉。继承resultset是要干嘛?再说了,java.sql.ResultSet是interface,你怎么继承成class?
      

  21.   

    我把resultset放在在Vector里,但是在applet取不出来?放的部分代码:
    ...
    ResultSet rs1 = dbconn.executeQuery()
    Vector strVector = new Vector();
    strVector.addElement(rs1);
    ...
    ObjectOutputStream oos = new ObjectOutputStream(rsp.getOutputStream());
    oos.writeObject(rs);//回传到applet
    oos.flush();
    oos.close();
    在applet取Vector部分代码:
    ...
    ObjectInputStream ois=new ObjectInputStream(urlcon.getInputStream());
    p = (Vector)ois.readObject();
    ois.close();Enumeration enum = p.elements();
    ResultSet rs;
    while(enum.hasMoreElements())
    {
    rs = (ResultSet)enum.nextElement();
    }
    String name = null;
    while(rs.next())
    {
     name = rs.getString("User_name");//在servlet里存在 
    }但是在applet里取不到,如果在strVector里存放的是字符串,就可以该如何改?
      

  22.   

    我把resultset放在在Vector里,但是在applet取不出来?放的部分代码:
    ...
    ResultSet rs1 = dbconn.executeQuery()
    Vector strVector = new Vector();
    strVector.addElement(rs1);
    ...
    ObjectOutputStream oos = new ObjectOutputStream(rsp.getOutputStream());
    oos.writeObject(strVector);//回传到applet   上面写错了,不好意思
    oos.flush();
    oos.close();
    在applet取Vector部分代码:
    ...
    ObjectInputStream ois=new ObjectInputStream(urlcon.getInputStream());
    p = (Vector)ois.readObject();
    ois.close();Enumeration enum = p.elements();
    ResultSet rs;
    while(enum.hasMoreElements())
    {
    rs = (ResultSet)enum.nextElement();
    }
    String name = null;
    while(rs.next())
    {
     name = rs.getString("User_name");//在servlet里存在 
    }但是在applet里取不到,如果在strVector里存放的是字符串,就可以该如何改?
      

  23.   

    两种办法:
    1、自己写个类,实现序列化接口,数据库表的字段作为它的FIELD,把ResultSet中的数据一个个取出放在该类对象中,将这些对象加到Vector中
    2、自己写个类,实现ResultSet接口和序列化接口,将取出的ResultSet(实际上是你用的驱动程序的实现类)强制转化为该类注:2没试过
    --- ZJQ
      

  24.   

    老兄,我现在就是2(实现ResultSet接口和序列化接口)不知道怎么写?那位高人帮忙!
      

  25.   

    ResultSet rs;
    while(enum.hasMoreElements())
    {
    rs = (ResultSet)enum.nextElement();
    }
    String name = null;
    while(rs.next())
    {
     name = rs.getString("User_name");//在servlet里存在 
    }
    ---------------------------------------------
    你这个循环好像套到外边了吧?
      

  26.   

    不是,我是先从servlet传回来得vector取出:rs然后再取里面的值!
      

  27.   

    干吗要传个ResultSet回来,又麻烦又不好用,把值取出来光把值传回来就行了
      

  28.   

    还没搞定,你没试过我给你贴的通过vector传数据的例字,vector中打包了字段名和数据,你在applet中想怎么用就怎么用/
      

  29.   

    to: tonybin(xu) 不好意思,我是要做一个通用的,也就是不能确定对那个表查询,所以没法确定
    字段名和数据,applet传到servlet是一个sql语句,要返回一个ResultSet对象
    ,该如何实现呢?如果是返回确定的字段和数据,是可以的。但是要返回一个
    ResultSet对象,还真的不懂!各位帮忙想一下帮帮忙!
      

  30.   

    老大,把rs 放到session里面不就可以了吗??session.setAttribue("result",rs);取得的时候这样:
    ResultSet rs = (ResultSet)session.getAttribute("result");
    然后,你想怎么样就怎么样!
      

  31.   

    to: lkenshin(独钓寒江雪) 在servlet把ResultSet对象放在session,然后在applet能取得?如果数据多的
    情况,也可以?
      

  32.   

    Servlet传送查询记录集给Applet
    这篇文章是继<<Servlet传送对象给Applet使用>>后,征对网友的特殊问题写的又一个实例.
    现发表出来与大家分享,文中瑕癖之处甚多,望各位指教.
    这个问题在csdn上已经有讨论了http://www.csdn.net/expert/topic/971/971710.xml.
    具体的需求就不讲了,这里把我的实现步骤详细写下,与<<Servlet传送对象给Applet使用>>中提到的方法
    一样.用到的CachedRowSet可以到
    http://java.sun.com//Download4?userid=zlyperson&platform=zip&button=continue&config-file=rowset-1_0-ea4.config
    去下.还有一个netscape的包,在C:\WINNT\java\Packages\0S0W0NFX.ZIP中.
    我也把所需要的包及我的实现代码打成了包,其中包扩了CachedRowSet&netscape&本文.
    http://63.210.240.215/rookieport/rowset.jar
    下面给出全部代码和配置,其中Applet部分涵盖
    了Javascript与Applet的互相调用,对于该部分不感兴趣的朋友可以复略.<pre>
    第一步,实现Servlet
    package exapplet;
    import java.io.*;
    import java.sql.*;
    import javax.sql.*;
    import sun.jdbc.rowset.*;
    import javax.servlet.*;
    import javax.servlet.http.*;public class MyServlet extends HttpServlet 
    {
    static {
    try {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    } catch (Exception e) {
    e.printStackTrace();
    }
    } public void doGet(HttpServletRequest req,HttpServletResponse res)
    throws ServletException,IOException
    {
    try {
    Connection dbconn = DriverManager.getConnection("jdbc:odbc:BlueSite");
    Statement stmt = dbconn.createStatement();
    String dbsql = req.getParameter("DBSQL");
    ResultSet dbrest = stmt.executeQuery(dbsql);
    CachedRowSet crs = new CachedRowSet();
                crs.populate(dbrest);
                dbrest.close();
    stmt.close();
    dbconn.close();
    //传回对象给Applet
    res.setContentType("application/octet-stream");
    ObjectOutputStream oos = new ObjectOutputStream(res.getOutputStream());
    oos.writeObject(crs);
    oos.close();
    } catch (Exception exp) {
    exp.printStackTrace();
    }
    }
    public String getServletInfo()
    {
    return "A simple Servlet!";
    }
    }第二步,实现提取对象的Applet
    package exapplet;
    import java.awt.*;
    import java.applet.*;
    import java.io.*;
    import java.net.*;
    import javax.sql.*;
    import sun.jdbc.rowset.*;
    import netscape.javascript.*;public class MyAppletB extends java.applet.Applet
    {
    public void init()
    {
    }
    public void paint(Graphics g)
    {} //This method will be call in html
    public void invoke() {
    try {
    URL url = new URL("http://Liaoyuan:8080/WorkingRoom/exapplet/PostToApplet?DBSQL=Select%20TopicName,TopicName,TopicName%20from%20Topic");
    //注意url中的空个用%20替代.

    URLConnection urlcon = url.openConnection();
    urlcon.connect();
    ObjectInputStream ois=new ObjectInputStream(urlcon.getInputStream());
    CachedRowSet crs = (CachedRowSet)ois.readObject();
    ois.close();
    while ( crs.next() ) {
    JSObject.getWindow(this).call("alert",new String[]{crs.getString(1)});
    }
    crs.close();
    } catch (Exception e) {
    }
    }
    }第三步,配制WebServer(我用的是Tomcat4.0)
    拷贝编译后的MyServlet.class到相应目录下,或者下载我打的包到WEB-INF\lib下
    编辑对应的web.xml文件,确保下面的内容正确
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
    <web-app>
    <servlet>
            <servlet-name>PostToApplet</servlet-name>
            <servlet-class>exapplet.MyServlet</servlet-class>
        </servlet> <servlet-mapping>
            <servlet-name>
                PostToApplet
            </servlet-name>
            <url-pattern>
                /exapplet/PostToApplet
            </url-pattern>
        </servlet-mapping>
    </web-app>第四步,编写html文件
    提取对象的html
    <HTML>
    <HEAD>
    <TITLE> New Document For Using Applet </TITLE>
    </HEAD><BODY>
    Hello This is a Test!<br>
    <APPLET id="obj_applet" align=center code="exapplet.MyAppletB" codeBase="." width=400 height=300 name="obj_applet" archive="BV7RFD3P.ZIP"></APPLET>
    <Input type=button value="CallAppletMethod" onclick="callApplet()">
    <Script language=javascript>
    function callApplet()
    {
    obj_applet.invoke();
    }
    </Script>
    </BODY>
    </HTML>
    </pre>
    中间有错误的地方请指教,[email protected]
      

  33.   

    只想着自己写,没想到SUN已经实现了
    狭隘!惭愧!!
    --- ZJQ
      

  34.   

    我开始也以为要自己写,后来到这里一看居然sun已经有,所以就写了一个..
      

  35.   

    我对这个程序有个问题,我这里没法试,所以请zlyperson(rookie) 给咱说说看:import javax.sql.*;
    import sun.jdbc.rowset.*;
    import netscape.javascript.*;
    大多数浏览器的JRE版本不怎么高(1.1左右),这几个包根本不存在。如果在server端当然没问题,你的classpath可能是jdk1.3(如果要用rowset,就得1.4了)。你说是打了包给applet,那么,这个包里应该有所有的相关类,不知道要多大?拨号用户受不受得了?直觉上,应该小不了。如果只能在LAN里用,就没什么搞头了。thanx alot!
      

  36.   

    楼上说的有道理!我现在也面临这样的问题。
    两个办法:
    1、不使用默认ClassLoader装载类,改从服务器端加载。
    2、只有自己实现这个RowSet了 :)个人意见,请指正!
    --- ZJQ
      

  37.   

    1。什么叫“不使用默认ClassLoader装载类,改从服务器端加载。”??2。是啊,呵呵。那还不如用vector呢。
      

  38.   

    在不作任何修改的情况下,默认会使用sun.applet.AppletClassLoader回载类。--- ZJQ
      

  39.   

    如果只有69k,而且兼容大多浏览器的jvm,那就比较可行了。不过,rowset不是一个轻量级的类,不知道序列化要多大开销,占多大地方。能试试就好了。
      

  40.   

    用zlyperson(rookie)方法,在本地,用applet可以访问servlet,但是把放在另
    外一台机器,出错如下:  
    http://192.168.1.3:8080/ConnToApplet?StrSQL=select%20*%20from%20USER_INFO&AppletDsn=test
    java.security.AccessControlException: access denied (java.net.SocketPermission 1
    92.168.1.3:8080 connect,resolve)
            at java.security.AccessControlContext.checkPermission(AccessControlConte
    xt.java:272)
            at java.security.AccessController.checkPermission(AccessController.java:
    399)
            at java.lang.SecurityManager.checkPermission(SecurityManager.java:545)
            at java.lang.SecurityManager.checkConnect(SecurityManager.java:1044)
            at sun.net.www.http.HttpClient.openServer(HttpClient.java:465)
            at sun.net.www.http.HttpClient.<init>(HttpClient.java:267)
            at sun.net.www.http.HttpClient.<init>(HttpClient.java:277)
            at sun.net.www.http.HttpClient.New(HttpClient.java:289)
            at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection
    .java:408)
            at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLCon
    nection.java:501)
            at Appletdbconn.executeQuery(Appletdbconn.java:45)
            at MyApplet.paint(MyApplet.java:37)
            at sun.awt.RepaintArea.paint(RepaintArea.java:298)
            at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:196)
            at java.awt.Component.dispatchEventImpl(Component.java:2663)
            at java.awt.Container.dispatchEventImpl(Container.java:1213)
            at java.awt.Component.dispatchEvent(Component.java:2497)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:339)
            at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
    read.java:131)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
    ad.java:98)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:85)
    出错:java.lang.NullPointerException
    Exception occurred during event dispatching:
    java.lang.NullPointerException: string is null
            at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:2242)
            at MyApplet.paint(MyApplet.java:55)
            at sun.awt.RepaintArea.paint(RepaintArea.java:298)
            at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:196)
            at java.awt.Component.dispatchEventImpl(Component.java:2663)
            at java.awt.Container.dispatchEventImpl(Container.java:1213)
            at java.awt.Component.dispatchEvent(Component.java:2497)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:339)
            at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
    read.java:131)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
    ad.java:98)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:85)
    什么意思?该如何处理?谢先了!
      

  41.   

    先改你的IE安全设置吧。如果两个机器jvm版本一样(应该是一样的)。在“选项|安全|自定义|java权限|自定义”里,把不顺眼的都改掉,允许他访问网络,访问这个那个。本机调试能通过的程序,放到其他机器上往往有问题。