以下是一个对象序列化过程。前辈们看哪里有错误呢?为什么报错呢,错误信息是 :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();
} }
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();
} }
你应该把取出的值放到bean(实现接口) 里,然后序列化该bean
怎么将它放进bean里呢,序列化bean呢?
我现在很困惑。
大哥请指教
你应该把取出的值放到bean(实现接口) 里,然后序列化该bean
public interface ResultSet extends Wrapper ResultSet本身就是接口!将ResultSet对象的值取出放到BEAN里就行!bean你没见过么!都是属性!然后是get、set方法
放到bean里面不就是bean的一个属性了吗,
貌似这个属性没有实现序列化这个bean写到流里面同样会出错
public class ServiceBean implements Serializable { //查出来得所有属性 //属性的getter setter
}
将查出来得纪录放入上面的bean里,就可以序列化了
而代码里面的ResultSet很显然是没有实现这个接口的。如果你硬要这么做,就依10楼的做法吧
1.新建一个bean ;
2.从数据库里取出来的数据存放到这个bean中 ;
3.序列化这个bean 。
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){}
}
} }
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();
}
}
}
所以你必须把rs里的内容转化成一个可以序列化的对象,例如ArrayList,Vector。