我正在使用DB4O进行测试。我正在尝试插入数据。 我遇到的问题是:
当我插入酒厂名称和D.O.只有在数据库中不存在时才必须插入。
我怎么能这样做?
这是我的插入代码:
Scanner teclado=new Scanner(System.in);
try{
ObjectContainer db= Db4oEmbedded.openFile("DB4O.yap");
System.out.print("Name of Wine: ");
String nomVino = teclado.next();
System.out.print("Name of Cellar: ");
String nomBodega = teclado.next();
System.out.print("D.O: ");
String DO = teclado.next();
System.out.print("Type of Wine: ");
String tipoVino = teclado.next();
System.out.print("Grad: ");
float gradosAlch = teclado.nextFloat();
System.out.print("Year of wine: ");
int fecha = teclado.nextInt();
teclado.close();
Vinos v = new Vinos(nomVino,new Bodega(nomBodega,DO),tipoVino,gradosAlch,fecha);
db.store(v); //guardar objetos
db.commit(); // valida los datos
//odb.rollback(); // deshace los datos
System.out.print("Vino Introducido\n");
db.close(); //cerrar la bd
}
catch(Exception e){System.out.println (e);}
}
提前谢谢!
答案 0 :(得分:1)
你的问题究竟是什么(你的问题不明确)?
是否要避免重复Bodega()对象,即,当您存储新的Vinos对象时,如果存在 bodegaName änd,则不希望存储另一个Bodega()对象DO ?
如果这是您要完成的任务,则需要先搜索数据库中的Bodega对象,然后再将其与Vinos对象一起使用;类似的东西:
Scanner teclado=new Scanner(System.in);
try{
ObjectContainer db= Db4oEmbedded.openFile("DB4O.yap");
System.out.print("Name of Wine: ");
String nomVino = teclado.next();
System.out.print("Name of Cellar: ");
String nomBodega = teclado.next();
System.out.print("D.O: ");
String DO = teclado.next();
System.out.print("Type of Wine: ");
String tipoVino = teclado.next();
System.out.print("Grad: ");
float gradosAlch = teclado.nextFloat();
System.out.print("Year of wine: ");
int fecha = teclado.nextInt();
teclado.close();
ObjectSet<Bodega> foundBodegas = db.query(new Predicate<Bodega>() {
@Override public boolean match(Bodega candidate) {
return candidate.getName().equals(nomeBodega);
}});
Bodega bodega = null;
if (foundBodegas.size() == 1) {
bodega = foundBodegas.next();
}
else {
bodega = new Bodega(nomBodega, DO);
}
Vinos v = new Vinos(nomVino, bodega ,tipoVino,gradosAlch,fecha);
db.store(v); //guardar objetos
db.commit(); // valida los datos
//odb.rollback(); // deshace los datos
System.out.print("Vino Introducido\n");
db.close(); //cerrar la bd
}
catch(Exception e)
{
System.out.println (e);
}