以下是一个对象序列化过程。前辈们看哪里有错误呢?为什么报错呢,错误信息是 :java.io.NotSerializableException: sun.jdbc.odbc.JdbcOdbcResultSet 如下代码: public void jMenuItem10_actionPerformed(ActionEvent e) { 
        File f=new File(""); 
        FileFilter filter = new FileNameExtensionFilter("jpg文档(*.txt)","txt","txt"); 
        javax.swing.JFileChooser jc = new JFileChooser(); 
        jc.addChoosableFileFilter(filter); 
        int flag = jc.showSaveDialog(null); 
        if (flag == JFileChooser.APPROVE_OPTION) { 
            f = jc.getSelectedFile(); 
        } 
        try{ 
            FileOutputStream fos = new FileOutputStream(f); 
        ObjectOutputStream oos = new ObjectOutputStream(fos); 
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
        Connection con = DriverManager.getConnection("jdbc:odbc:jjtz", "sa","sa"); 
        Statement getUpdate = con.createStatement(); 
        ResultSet rs1 = getUpdate.executeQuery("select ID,xmmch,qshnf,zhzhnf from xmmchnfb"); 
        //ResultSet rs2 = getUpdate.executeQuery("select ID,year1,touzi from jshtzb"); 
        //oos.writeInt(12345); 
        //oos.writeObject("bababab"); 
        oos.writeObject(rs1); 
        //oos.writeObject(rs2);         oos.close();         } 
        catch(Exception ef) { 
            ef.printStackTrace(); 
        }     }

解决方案 »

  1.   

    看不出来你序列化什么,从数据库里取出的值吗
    你应该把取出的值放到bean(实现接口) 里,然后序列化该bean
      

  2.   

    对。想序列化从数据库里取出的值。
    怎么将它放进bean里呢,序列化bean呢?
    我现在很困惑。
    大哥请指教
      

  3.   

    看不出来你序列化什么,从数据库里取出的值吗 
    你应该把取出的值放到bean(实现接口) 里,然后序列化该bean
      

  4.   

    ResultSet不能实现 java.io.Serializable 接口。 
    public interface ResultSet extends Wrapper ResultSet本身就是接口!将ResultSet对象的值取出放到BEAN里就行!bean你没见过么!都是属性!然后是get、set方法
      

  5.   

    非序列化对象是不能写到流里面去的,
    放到bean里面不就是bean的一个属性了吗,
    貌似这个属性没有实现序列化这个bean写到流里面同样会出错
      

  6.   

    首先建立一个javabean,将从数据库里取出来的数据存在javabean里,然后序列化这个javabean,记住javabean要实现序列化接口java.io.Serializable。
      

  7.   

    错误信息是 :java.io.NotSerializableException: sun.jdbc.odbc.JdbcOdbcResultSet 要实现可以序列化的接口啊!Serializable
      

  8.   


    public class ServiceBean implements Serializable {    //查出来得所有属性    //属性的getter setter
    }
    将查出来得纪录放入上面的bean里,就可以序列化了
      

  9.   

    ObjectOutputStream.writeObject方法的参数必须实现 Serializable接口
    而代码里面的ResultSet很显然是没有实现这个接口的。如果你硬要这么做,就依10楼的做法吧
      

  10.   

    步骤如下:
    1.新建一个bean ;
    2.从数据库里取出来的数据存放到这个bean中 ;
    3.序列化这个bean 。
      

  11.   

    封装成可以实现Serializable接口的bean
      

  12.   

    一般数据库对象(Connection、Statement、ResultSet及其子类)是不能进行序列化的。其实这也容易说得通,比如如果把一个 Connection 序列化,并在另外一台计算机上反序列化,那么这个 Connection 对象如何访问数据库资源?楼上几位说得对,楼主应该从 ResultSet 中取出数据,再封装到一个 bean 里,然后序列化这些 bean 对象
      

  13.   

    假设数据表中存放的表是 Student(id int, name nvarchar(10), address nvarchar(100))public class Student impelements Serializable{
        private int id = -1;
        private String name = "";
        private String address = "";    public int getId(){
            return this.id;
        }
        public void setId(int value){
            this.id = value;
        }
        
        public String getName(){
            return this.name;
        }
        public void setName(String value){
            this.name = value;
        }    public String getAddress(){
            return this.address;
        }
        public void setAddress(String value){
            this.address = value;
        }
    }......public void jMenuItem10_actionPerformed(ActionEvent e) { 
            File f=new File(""); 
            FileFilter filter = new FileNameExtensionFilter("jpg文档(*.txt)","txt","txt"); 
            javax.swing.JFileChooser jc = new JFileChooser(); 
            jc.addChoosableFileFilter(filter); 
            int flag = jc.showSaveDialog(null); 
            if (flag == JFileChooser.APPROVE_OPTION) { 
                f = jc.getSelectedFile(); 
            }        FileOutputStream fos = null;
            ObjectOutputStream oos = null;
            Connection con = null;
            try{
                fos = new FileOutputStream(f); 
                oos = new ObjectOutputStream(fos); 
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
                con = DriverManager.getConnection("jdbc:odbc:jjtz", "sa","sa"); 
                Statement getUpdate = con.createStatement();
                ResultSet rs = getUpdate.executeQuery("Select Id, Name, Address From Student"); 
                while(rs.next()){
                    Student item = new Student();
                    item.setId(rs.getInteger(1));
                    item.setName(rs.getString(2));
                    item.setAddress(rs.getString(3));
                    
                    oos.writeObject(item);
                }
                rs.close();
            } catch(Exception ef) { 
                ef.printStackTrace(); 
            }finally{
                // 释放资源的操作放到 finally 块中,保证语句一定会被执行到
                if(conn != null){
                    try{ conn.close(); } catch(Excepion ex){}
                }
                if(oos != null){
                    try{ oof.close(); }catch(Exception ex){}
                }
                if(fos != null){
                    try{ fos.close(); }catch(Exception ex){}
                }
            }     }
      

  14.   

    看看这个\package com.east.serilizable.client;import java.io.ObjectOutputStream;
    import java.io.OutputStream;
    import java.net.Socket;public class Client {
    public static void main(String[] args) {
    try {
    Socket clientS = new Socket("127.0.0.1", 8888);
    OutputStream os = clientS.getOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(os);
    Student stu = new Student();
    stu.setId(1);
    stu.setName("xtsaiyy");
    stu.setAge(20);
    oos.writeObject(stu);
    oos.close();
    //System.out.println("client complete-------");
    } catch (Exception se) {
    se.printStackTrace();
    } finally {

    } }
    }==================================================
    package com.east.serilizable.client;import java.io.Serializable;public class Student implements Serializable{
     private int id;
     private String name;
     private int age; public int getId() {
    return id;
    } public void setId(int id) {
    this.id = id;
    } public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    } public int getAge() {
    return age;
    } public void setAge(int age) {
    this.age = age;
    }
    }
    =======================================
    package com.east.serilizable.service;
    import java.io.ObjectInputStream;
    import java.net.ServerSocket;
    import java.net.Socket;import com.east.serilizable.client.Student;
    public class Service {
      public static void main(String [] args){
      try{
      System.out.println("service start......");
      ServerSocket sS = new ServerSocket(8888);
      
      Socket socket = sS.accept();
      System.out.println("service end......");
      ObjectInputStream  ois = new ObjectInputStream(socket.getInputStream());
      Student stu = (Student)ois.readObject();
      System.out.println("编号 "+stu.getId()+"姓名 "+stu.getName()+" 年龄 "+stu.getAge());
      ois.close();
      }catch(Exception se){
      se.printStackTrace();
      }
      }
    }
      

  15.   

    你要我ObjectOutputStream输出一个对象,这个对象必须是序列化的,而rs不是一个序列化的对象。
    所以你必须把rs里的内容转化成一个可以序列化的对象,例如ArrayList,Vector。
      

  16.   

    因为LZ要操作的对象没有实现Serializable接口。