Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我在一次运行中尝试插入/删除/显示两次DatabaseClosedException(DB4o)?_Java_Db4o - Fatal编程技术网

Java 为什么我在一次运行中尝试插入/删除/显示两次DatabaseClosedException(DB4o)?

Java 为什么我在一次运行中尝试插入/删除/显示两次DatabaseClosedException(DB4o)?,java,db4o,Java,Db4o,当我试图在一次运行中操作数据库中的多个对象时,我遇到了这个异常。无论我选择什么样的选择,同样的问题一次又一次地发生。这似乎是相关的,连接断开在某个点,我无法看到它 例外情况: Main: public class NotasBDOR { public static void main(String[] args) { int menu = 10; Scanner sc = new Scanner(System.in); GestorD

当我试图在一次运行中操作数据库中的多个对象时,我遇到了这个异常。无论我选择什么样的选择,同样的问题一次又一次地发生。这似乎是相关的,连接断开在某个点,我无法看到它

例外情况:

Main:

public class NotasBDOR {
    
    public static void main(String[] args) {
        
    int menu = 10;
    Scanner sc = new Scanner(System.in);
    GestorDB4o gestor = new GestorDB4o();
        
        do{
            
            System.out.println("1.- Insertar profesor");
            System.out.println("2.- Eliminar profesor");
            System.out.println("3.- Validar la entrada de un profesor");
            System.out.println("4.- Validar la entrdada de un alumno");
            System.out.println("0.- Salir");
            
            menu = sc.nextInt();
            
            switch(menu){
                case 1:
                    Profesor p = new Profesor();
                    String nombreProfesor;
                    String nombreUsuarioProfesor;
                    String passwordProfesor;
                            
                   
                        System.out.println("Introduzca el nombre :");
                        nombreProfesor = sc.next();
                        System.out.println("Introduzca el nombre de usuario: ");
                        nombreUsuarioProfesor = sc.next();
                        System.out.println("Introduzca el password: ");
                        passwordProfesor = sc.next();
                        p = new Profesor(nombreProfesor,nombreUsuarioProfesor,passwordProfesor);   
                        gestor.guardarProfesor(p);
                        gestor.cerrar();
                       
                    
                break;
                case 2:
                    System.out.println("Introduzca el nombre de usuario:");
                    nombreUsuarioProfesor = sc.next();
                    gestor.eliminarProfesor(nombreUsuarioProfesor);
                    gestor.cerrar();
                    

                break;
                case 3:
                    System.out.println("Introduzca el nombre de usuario: ");
                    nombreUsuarioProfesor = sc.next();
                    System.out.println("Introduzca el password: ");
                    passwordProfesor = sc.next();
                        if(gestor.validarProfesor(nombreUsuarioProfesor, passwordProfesor)){
                            System.out.println("Bienvenido "+nombreUsuarioProfesor+" !");
                            
                        }else{
                            System.out.println("Se han introducido unas credenciales incorrectas");
                            
                        }
                        gestor.cerrar();
                    
                break;
                case 4:
                    System.out.println("Introduzca el nombre de usuario: ");
                    String nombreUsuarioAlumno = sc.next();
                    System.out.println("Introduzca el password: ");
                    String passwordAlumno = sc.next();
                        if(gestor.validarAlumno(nombreUsuarioAlumno, passwordAlumno)){
                            System.out.println("Bienvenido "+nombreUsuarioAlumno+" !");
                            
                        }else{
                            System.out.println("Se han introducido unas credenciales incorrectas");
                            
                        }
                        gestor.cerrar();
                break;
                                   
            }
        }while(menu!=0);
        
        
    }
    
}
public class Profesor {
    
    private static AtomicInteger cont = new AtomicInteger();
    private int id;
    private String nombre;
    private String nombre_usuario;
    private String password;
    
    public Profesor(){
        
    }
    
    public Profesor(String nombre, String nombre_usuario, String password){
        this.id = cont.incrementAndGet();
        this.nombre = nombre;
        this.nombre_usuario = nombre_usuario;
        this.password = password;
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the nombre_usuario
     */
    public String getNombre_usuario() {
        return nombre_usuario;
    }

    /**
     * @param nombre_usuario the nombre_usuario to set
     */
    public void setNombre_usuario(String nombre_usuario) {
        this.nombre_usuario = nombre_usuario;
    }

    /**
     * @return the password
     */
    public String getPassword() {
        return password;
    }

    /**
     * @param password the password to set
     */
    public void setPassword(String password) {
        this.password = password;
    }
    
    @Override
    public String toString(){
        return "id: "+id+" nombre: "+nombre+" nombre_usuario: "+nombre_usuario;
    }
}

package notaslinkiadb4o;

import com.db4o.Db4oEmbedded;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
import java.util.List;

/**
 *
 * @author Lluis
 */
public class GestorDB4o {
    
    private ObjectContainer base_datos;
    
    public GestorDB4o(){
        base_datos = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), "notaslinkia");
    }
    
    
    public void cerrar(){
        base_datos.close();
    }
    
    
    public void guardarProfesor(Profesor p){
        base_datos.store(p);
        System.out.println("Profesor guardado: "+p.getNombre());
    }
    
    public void guardarAlumno(Alumno a){
        base_datos.store(a);
        System.out.println("Alumno guardado: "+a.getNombre());
    }
    
    public void eliminarProfesor(String nombre_usuario){
        Profesor p = new Profesor(null,nombre_usuario,null);
        ObjectSet result = base_datos.queryByExample(p);
        System.out.println(result.size());
        while(result.hasNext()){
            Profesor found = (Profesor) result.next();
            base_datos.delete(found);
            System.out.println("Profesor borrado: "+found.getNombre_usuario());
        }
    }
    
    public boolean validarProfesor(String nombre_usuario, String password){
        Profesor p = new Profesor(null,nombre_usuario,password);
        ObjectSet result = base_datos.queryByExample(p);
        while(result.hasNext()){
            Profesor found = (Profesor) result.next();
            return true;
        }
        return false;
    }
    
    public boolean validarAlumno(String nombre_usuario, String password){
        Alumno a = new Alumno(0,null,nombre_usuario,password,0,null);
        ObjectSet result = base_datos.queryByExample(a);
        while(result.hasNext()){
            Alumno found = (Alumno) result.next();
            return true;
        }
        return false;
    }
    
    public int tamanoProfesor(){
        List<Profesor> profesores = base_datos.query(Profesor.class);
        return profesores.size();
    }
    
    
    
}
教授:

public class NotasBDOR {
    
    public static void main(String[] args) {
        
    int menu = 10;
    Scanner sc = new Scanner(System.in);
    GestorDB4o gestor = new GestorDB4o();
        
        do{
            
            System.out.println("1.- Insertar profesor");
            System.out.println("2.- Eliminar profesor");
            System.out.println("3.- Validar la entrada de un profesor");
            System.out.println("4.- Validar la entrdada de un alumno");
            System.out.println("0.- Salir");
            
            menu = sc.nextInt();
            
            switch(menu){
                case 1:
                    Profesor p = new Profesor();
                    String nombreProfesor;
                    String nombreUsuarioProfesor;
                    String passwordProfesor;
                            
                   
                        System.out.println("Introduzca el nombre :");
                        nombreProfesor = sc.next();
                        System.out.println("Introduzca el nombre de usuario: ");
                        nombreUsuarioProfesor = sc.next();
                        System.out.println("Introduzca el password: ");
                        passwordProfesor = sc.next();
                        p = new Profesor(nombreProfesor,nombreUsuarioProfesor,passwordProfesor);   
                        gestor.guardarProfesor(p);
                        gestor.cerrar();
                       
                    
                break;
                case 2:
                    System.out.println("Introduzca el nombre de usuario:");
                    nombreUsuarioProfesor = sc.next();
                    gestor.eliminarProfesor(nombreUsuarioProfesor);
                    gestor.cerrar();
                    

                break;
                case 3:
                    System.out.println("Introduzca el nombre de usuario: ");
                    nombreUsuarioProfesor = sc.next();
                    System.out.println("Introduzca el password: ");
                    passwordProfesor = sc.next();
                        if(gestor.validarProfesor(nombreUsuarioProfesor, passwordProfesor)){
                            System.out.println("Bienvenido "+nombreUsuarioProfesor+" !");
                            
                        }else{
                            System.out.println("Se han introducido unas credenciales incorrectas");
                            
                        }
                        gestor.cerrar();
                    
                break;
                case 4:
                    System.out.println("Introduzca el nombre de usuario: ");
                    String nombreUsuarioAlumno = sc.next();
                    System.out.println("Introduzca el password: ");
                    String passwordAlumno = sc.next();
                        if(gestor.validarAlumno(nombreUsuarioAlumno, passwordAlumno)){
                            System.out.println("Bienvenido "+nombreUsuarioAlumno+" !");
                            
                        }else{
                            System.out.println("Se han introducido unas credenciales incorrectas");
                            
                        }
                        gestor.cerrar();
                break;
                                   
            }
        }while(menu!=0);
        
        
    }
    
}
public class Profesor {
    
    private static AtomicInteger cont = new AtomicInteger();
    private int id;
    private String nombre;
    private String nombre_usuario;
    private String password;
    
    public Profesor(){
        
    }
    
    public Profesor(String nombre, String nombre_usuario, String password){
        this.id = cont.incrementAndGet();
        this.nombre = nombre;
        this.nombre_usuario = nombre_usuario;
        this.password = password;
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the nombre_usuario
     */
    public String getNombre_usuario() {
        return nombre_usuario;
    }

    /**
     * @param nombre_usuario the nombre_usuario to set
     */
    public void setNombre_usuario(String nombre_usuario) {
        this.nombre_usuario = nombre_usuario;
    }

    /**
     * @return the password
     */
    public String getPassword() {
        return password;
    }

    /**
     * @param password the password to set
     */
    public void setPassword(String password) {
        this.password = password;
    }
    
    @Override
    public String toString(){
        return "id: "+id+" nombre: "+nombre+" nombre_usuario: "+nombre_usuario;
    }
}

package notaslinkiadb4o;

import com.db4o.Db4oEmbedded;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
import java.util.List;

/**
 *
 * @author Lluis
 */
public class GestorDB4o {
    
    private ObjectContainer base_datos;
    
    public GestorDB4o(){
        base_datos = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), "notaslinkia");
    }
    
    
    public void cerrar(){
        base_datos.close();
    }
    
    
    public void guardarProfesor(Profesor p){
        base_datos.store(p);
        System.out.println("Profesor guardado: "+p.getNombre());
    }
    
    public void guardarAlumno(Alumno a){
        base_datos.store(a);
        System.out.println("Alumno guardado: "+a.getNombre());
    }
    
    public void eliminarProfesor(String nombre_usuario){
        Profesor p = new Profesor(null,nombre_usuario,null);
        ObjectSet result = base_datos.queryByExample(p);
        System.out.println(result.size());
        while(result.hasNext()){
            Profesor found = (Profesor) result.next();
            base_datos.delete(found);
            System.out.println("Profesor borrado: "+found.getNombre_usuario());
        }
    }
    
    public boolean validarProfesor(String nombre_usuario, String password){
        Profesor p = new Profesor(null,nombre_usuario,password);
        ObjectSet result = base_datos.queryByExample(p);
        while(result.hasNext()){
            Profesor found = (Profesor) result.next();
            return true;
        }
        return false;
    }
    
    public boolean validarAlumno(String nombre_usuario, String password){
        Alumno a = new Alumno(0,null,nombre_usuario,password,0,null);
        ObjectSet result = base_datos.queryByExample(a);
        while(result.hasNext()){
            Alumno found = (Alumno) result.next();
            return true;
        }
        return false;
    }
    
    public int tamanoProfesor(){
        List<Profesor> profesores = base_datos.query(Profesor.class);
        return profesores.size();
    }
    
    
    
}
GestorDB4o:

public class NotasBDOR {
    
    public static void main(String[] args) {
        
    int menu = 10;
    Scanner sc = new Scanner(System.in);
    GestorDB4o gestor = new GestorDB4o();
        
        do{
            
            System.out.println("1.- Insertar profesor");
            System.out.println("2.- Eliminar profesor");
            System.out.println("3.- Validar la entrada de un profesor");
            System.out.println("4.- Validar la entrdada de un alumno");
            System.out.println("0.- Salir");
            
            menu = sc.nextInt();
            
            switch(menu){
                case 1:
                    Profesor p = new Profesor();
                    String nombreProfesor;
                    String nombreUsuarioProfesor;
                    String passwordProfesor;
                            
                   
                        System.out.println("Introduzca el nombre :");
                        nombreProfesor = sc.next();
                        System.out.println("Introduzca el nombre de usuario: ");
                        nombreUsuarioProfesor = sc.next();
                        System.out.println("Introduzca el password: ");
                        passwordProfesor = sc.next();
                        p = new Profesor(nombreProfesor,nombreUsuarioProfesor,passwordProfesor);   
                        gestor.guardarProfesor(p);
                        gestor.cerrar();
                       
                    
                break;
                case 2:
                    System.out.println("Introduzca el nombre de usuario:");
                    nombreUsuarioProfesor = sc.next();
                    gestor.eliminarProfesor(nombreUsuarioProfesor);
                    gestor.cerrar();
                    

                break;
                case 3:
                    System.out.println("Introduzca el nombre de usuario: ");
                    nombreUsuarioProfesor = sc.next();
                    System.out.println("Introduzca el password: ");
                    passwordProfesor = sc.next();
                        if(gestor.validarProfesor(nombreUsuarioProfesor, passwordProfesor)){
                            System.out.println("Bienvenido "+nombreUsuarioProfesor+" !");
                            
                        }else{
                            System.out.println("Se han introducido unas credenciales incorrectas");
                            
                        }
                        gestor.cerrar();
                    
                break;
                case 4:
                    System.out.println("Introduzca el nombre de usuario: ");
                    String nombreUsuarioAlumno = sc.next();
                    System.out.println("Introduzca el password: ");
                    String passwordAlumno = sc.next();
                        if(gestor.validarAlumno(nombreUsuarioAlumno, passwordAlumno)){
                            System.out.println("Bienvenido "+nombreUsuarioAlumno+" !");
                            
                        }else{
                            System.out.println("Se han introducido unas credenciales incorrectas");
                            
                        }
                        gestor.cerrar();
                break;
                                   
            }
        }while(menu!=0);
        
        
    }
    
}
public class Profesor {
    
    private static AtomicInteger cont = new AtomicInteger();
    private int id;
    private String nombre;
    private String nombre_usuario;
    private String password;
    
    public Profesor(){
        
    }
    
    public Profesor(String nombre, String nombre_usuario, String password){
        this.id = cont.incrementAndGet();
        this.nombre = nombre;
        this.nombre_usuario = nombre_usuario;
        this.password = password;
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the nombre_usuario
     */
    public String getNombre_usuario() {
        return nombre_usuario;
    }

    /**
     * @param nombre_usuario the nombre_usuario to set
     */
    public void setNombre_usuario(String nombre_usuario) {
        this.nombre_usuario = nombre_usuario;
    }

    /**
     * @return the password
     */
    public String getPassword() {
        return password;
    }

    /**
     * @param password the password to set
     */
    public void setPassword(String password) {
        this.password = password;
    }
    
    @Override
    public String toString(){
        return "id: "+id+" nombre: "+nombre+" nombre_usuario: "+nombre_usuario;
    }
}

package notaslinkiadb4o;

import com.db4o.Db4oEmbedded;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
import java.util.List;

/**
 *
 * @author Lluis
 */
public class GestorDB4o {
    
    private ObjectContainer base_datos;
    
    public GestorDB4o(){
        base_datos = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), "notaslinkia");
    }
    
    
    public void cerrar(){
        base_datos.close();
    }
    
    
    public void guardarProfesor(Profesor p){
        base_datos.store(p);
        System.out.println("Profesor guardado: "+p.getNombre());
    }
    
    public void guardarAlumno(Alumno a){
        base_datos.store(a);
        System.out.println("Alumno guardado: "+a.getNombre());
    }
    
    public void eliminarProfesor(String nombre_usuario){
        Profesor p = new Profesor(null,nombre_usuario,null);
        ObjectSet result = base_datos.queryByExample(p);
        System.out.println(result.size());
        while(result.hasNext()){
            Profesor found = (Profesor) result.next();
            base_datos.delete(found);
            System.out.println("Profesor borrado: "+found.getNombre_usuario());
        }
    }
    
    public boolean validarProfesor(String nombre_usuario, String password){
        Profesor p = new Profesor(null,nombre_usuario,password);
        ObjectSet result = base_datos.queryByExample(p);
        while(result.hasNext()){
            Profesor found = (Profesor) result.next();
            return true;
        }
        return false;
    }
    
    public boolean validarAlumno(String nombre_usuario, String password){
        Alumno a = new Alumno(0,null,nombre_usuario,password,0,null);
        ObjectSet result = base_datos.queryByExample(a);
        while(result.hasNext()){
            Alumno found = (Alumno) result.next();
            return true;
        }
        return false;
    }
    
    public int tamanoProfesor(){
        List<Profesor> profesores = base_datos.query(Profesor.class);
        return profesores.size();
    }
    
    
    
}

包装非链接IADB4O;
导入com.db4o.Db4oEmbedded;
导入com.db4o.ObjectContainer;
导入com.db4o.ObjectSet;
导入java.util.List;
/**
*
*@author Lluis
*/
公共类GestorDB4o{
私有ObjectContainer base_datos;
公共管理者b4o(){
base_datos=Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(),“notaslinkia”);
}
公共无效cerrar(){
基本数据关闭();
}
公共图书馆教授(p教授){
基本数据存储(p);
System.out.println(“Profesor guardado:+p.getNombre());
}
公共学校校友(a校友){
基本数据存储(a);
System.out.println(“Alumno guardado:+a.getNombre());
}
公共无效eliminarProfesor(字符串名为usuario){
Profesor p=新教授(空,名称为usuario,空);
ObjectSet result=base_datos.queryByExample(p);
System.out.println(result.size());
while(result.hasNext()){
Profesor found=(Profesor)result.next();
基本数据删除(已找到);
System.out.println(“Profesor borrado:+found.getNombre_usuario());
}
}
公共布尔值validarProfesor(字符串名称,字符串密码){
Profesor p=新Profesor(空,名称,密码);
ObjectSet result=base_datos.queryByExample(p);
while(result.hasNext()){
Profesor found=(Profesor)result.next();
返回true;
}
返回false;
}
公共布尔值validarAlumno(字符串名称,字符串密码){
校友a=新校友(0,null,nombre_usuario,password,0,null);
ObjectSet result=base_datos.queryByExample(a);
while(result.hasNext()){
Alumno found=(Alumno)result.next();
返回true;
}
返回false;
}
公共国际塔马诺教授(){
List profesores=base_datos.query(Profesor.class);
返回profesors.size();
}
}
@user207421是对的

gestor.cerrar()

您应该在每个循环中
新建GestorDB4o()

像这样

do{
            GestorDB4o gestor = new GestorDB4o();
            
            System.out.println("1.- Insertar profesor");
            System.out.println("2.- Eliminar profesor");
            System.out.println("3.- Validar la entrada de un profesor");
            System.out.println("4.- Validar la entrdada de un alumno");
            System.out.println("0.- Salir");

            menu = sc.nextInt();

            switch(menu){
                 //....
            }
}while(menu!=0)

更好的方法是不要调用
gestor.cerrar()

,因为您会在每个案例结束时关闭数据库。这只是一种方法,更好的方法是不要在while循环中调用gestor.cerrar()