使用ResultSet时,为什么我会使用null获得一个额外的结果?

时间:2017-05-27 14:05:37

标签: mysql resultset

我在这里尝试做的是从MySQL数据库中读取一些数据并将它们转换为对象数据并将其序列化到文件中。显然,它确实如此。但是我在控制台中得到一个空值,我无法理解它来自何处。如果我检查错误本身,它就在这一行上说:

pepi = (personita) ois.readObject();

你得到的输出是:

Betty,Laferez,87.0 < - 来自数据库,好的。

Manolo,Lopez,45.0 < - 来自数据库,好的。

Manuel,Rodriguez,12.0 < - 来自数据库,好的。

Patricia,Alonso,12.0 < - 来自数据库,好的。

null < - ???

那么,你能帮助我理解为什么这一行导致了空问题吗?

public class practicabdyserializableobjetos {
public static void main(String[] args) throws ClassNotFoundException, IOException {
    Class.forName("com.mysql.jdbc.Driver");
    Connection conexion = null;

    try {
        conexion = DriverManager.getConnection("jdbc:mysql://localhost/programacion", "root", "password");
        Statement sentencia = (Statement) conexion.createStatement();
        ResultSet resultado = sentencia.executeQuery("Select * from ejemplo");

        File persofiles = new File("./persofiles.txt");
        if (!persofiles.exists())
            persofiles.createNewFile();

        FileOutputStream fioust = new FileOutputStream(persofiles);
        ObjectOutputStream oboust = new ObjectOutputStream(fioust);
        int p=0;
        while (resultado.next()) {
            personita per = new personita();
            per.setNombre(resultado.getString(1));
            per.setApellido(resultado.getString(2));
            per.setEdad(resultado.getDouble(3));
            oboust.writeObject(per);
        }

        oboust.close();
        fioust.close();

        FileInputStream fis = new FileInputStream(persofiles);
        @SuppressWarnings("resource")
        ObjectInputStream ois = new ObjectInputStream(fis);

        while (true) {
            personita pepi = new personita();
            pepi = (personita) ois.readObject();
            System.out.println(pepi.getNombre() + ", " + pepi.getApellido() + ", " + pepi.getEdad());
        }

    } catch (SQLException e) {
        e.printStackTrace();
    } 
    catch(EOFException e){
        System.out.println(e.getMessage());
    }

}

}

1 个答案:

答案 0 :(得分:0)

编辑2 - 我更改了我的答案

阅读此Question

您的代码是正确的。 你得到的null是EOFException catch中的e.getMessage(),你可以简单地通过用';'替换System.println语句来避免。

}catch(EOFException e){
   ;
}

反对我认为你没有在steram的endo读取空值,所以要知道当你到达流的末尾时你使用这个EOFException。在我提到的问题中,有一个需要考虑的因素,因为您可以知道EOF加注是否因为没有更多的对象需要阅读,或者因为有错误而且流被关闭了。