打算做个3层结构的软件  客户端--服务器端----数据库
我不想客户端直接访问数据库  想让客户端通过服务器端操作数据库!
请问有什么好办法!! 
DataInputSteam 和DataOutputSteam  不能传递对象阿!!ObjectOutputStream和ObjectInputStream 可以单用在网络上老报错!那位知道有什么好办法可以让客户端通过服务器端操作数据库?先谢了!!

解决方案 »

  1.   

    传对象当然可以,但是被传的这个对象必须implements java.io.Serializable接口
    然后你用ObjectInputStream 和ObjectOutputStream就可以传递对象了
      

  2.   

    implements java.io.Serializable
    同意楼上的 实现流化
    密切关注
      

  3.   

    谢谢了
    好的 implements java.io.Serializable 才行?
    我本来打算传递一个 Connection 对象 在客户端使用Connection对象操作数据库
    这要怎么做啊  能实现吗?
      

  4.   

    implements java.io.Serializable
    java把网络流、文件流都统一了
      

  5.   

    我做的和还是有问题 
    传递的类
    public class conn implements/* Connection*/ Serializable {    
       static ResultSet rs;
        public conn() {
            try {
                Class.forName(
                        "com.microsoft.jdbc.sqlserver.SQLServerDriver");        
                String url =
                        "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=noriko";
                String user = "sa";
                String pass = "sa";
                Connection conn = DriverManager.getConnection(url, user, pass);
                Statement stmt = conn.createStatement(ResultSet.
                                                      TYPE_SCROLL_INSENSITIVE,
                                                      ResultSet.CONCUR_UPDATABLE);
                ResultSet rs = stmt.executeQuery("select * from login");
            } catch (Exception ex) {
            }
        }
        ResultSet getResultSet(){
            return rs;
        } 
     }客户端
    public static void main(String[] args) {        try {
                Socket so = new Socket(InetAddress.getByName("127.0.0.1"), 214);
                conn co = (conn)new ObjectInputStream(so.getInputStream()).
                          readObject();                     
                ResultSet rs = co.getResultSet();  
                while (rs.next()) {     //错在这里了
                    System.out.println(rs.getString("name"));
                }            System.out.println("001");
                rs.close();
                so.close();
            } catch (Exception ex) {
                ex.printStackTrace();
            }    }
    服务器端:
    public static void main(String[] args) {
            try {         
                conn co=new conn();
                ServerSocket  ss = new ServerSocket(214);
                Socket so = ss.accept();
                new ObjectOutputStream(so.getOutputStream()).writeObject(co);         
                so.close();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    帮忙看看怎么做啊?
      

  6.   

    顶你N个肺........//________________________送个笑话____________________
    class www.xiaohua007.com{public static void main(String [] args){
     System.out.println("
         C君去医院割包皮,剃毛的时候(割包皮要先把毛剃光)是一个漂亮护士,成年男士嘛,  血  气方刚,看到漂亮MM拎着他那东西,心术当然就不正了,脑子歪几歪,那话儿“蹭”就竖起来,本来做这种术前准备时那话儿竖起来也算是正常的生理反应,只不过C君最后竟然射了,搞得护士手上衣服上都是,气得那护士直发抖,心里说“看我 怎么收拾你”。
      手术过后C君住院,第二天那护士MM走到C君床前,拉高护士裙露出大腿、底裤,嗲嗲的说:你觉得这内裤好看吗?C君一看,热血沸腾,只听下面“啪啪”几声,惨了,爆线了。
      只好推进手术室再缝一次,痛苦第二天,护士MM又过来了,站在C君床前,解开二个扣子,波涛汹涌跃然而出,嗲嗲的对着C君说:“你看看人家的身材如何呀?”,“ 啪啪”C君下身一串声响,又爆线了。
      做完第三次缝线的那天晚上,护士MM带着二个漂亮女同事来到C君床前,至于发生了什么事就不得而知了,总之最后C君足足住了一个多月的医院,据说那话儿都已经缝得无落针之处了。
     ");
      //www.xiaohua007.com
    }}
      

  7.   

    readObject(),wirteObject()?都没有?
      

  8.   

    一个对象要序列化,必须所有的属性都能序列化,如果有一个属性不能序列化,此对象也不能序列化,如果不需要序列化则加上关键字transient,如transient Thread t;
    象集合类(Collection、Map等,如果存储了不能序列化的对象也是不能序列化的,如果存储的对象都能序列化,则可序列化。java中很多对象是不能序列化的,如线程、Socket,Stream等
    这里的ResultSet就属于这种不能序列化的,你上面的程序要小心啊,很可能多个线程同时去修改ResuletSet rs,这会出错的...
      

  9.   

    ResuletSet rs也是没实例化的,
    ResultSet rs = stmt.executeQuery("select * from login");//这一行重新定义了一个
      

  10.   

    呵呵 谢谢大家的关注!!
    我找到解决的办法了 有类似问题的人 可以看看阿BORLAND 的Jbuilder 的包里有个 Database 类(建立数据库的连接) 这个类实现Serializable的序列化
    可以传递这个类,把数据库的操作移交给客户端
    再有Database  返回操作集!!呵呵 这样的三层有点不名副其实  但也不错了!!