Java 为什么我在一次运行中尝试插入/删除/显示两次DatabaseClosedException(DB4o)?
当我试图在一次运行中操作数据库中的多个对象时,我遇到了这个异常。无论我选择什么样的选择,同样的问题一次又一次地发生。这似乎是相关的,连接断开在某个点,我无法看到它 例外情况: Main: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
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()