elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  duda con Db4o con java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda con Db4o con java  (Leído 4,171 veces)
edu@85

Desconectado Desconectado

Mensajes: 12


Ver Perfil
duda con Db4o con java
« en: 3 Marzo 2009, 13:35 pm »

Lo que quiero hacer es crear una base de datos cerrarla luego abrirla y hacer una consulta. Las demas clases (player,team..) contienen atributos y metodos get y set.


Este es el codigo en java:

Código
  1. import com.db4o.*;
  2. import com.db4o.query.*;
  3.  
  4. import java.io.File;
  5.  
  6.  
  7. import java.util.Iterator;
  8.  
  9. public class Db4oTest {
  10.    private static String filename;
  11.  
  12.  
  13.    public Db4oTest() {
  14.        filename = "c:/teamsdemo.yap";
  15.    }
  16.  
  17.    public static void main(String[] args){
  18.        Db4oTest tester = new Db4oTest();
  19.        tester.createTestData();
  20.        tester.queryByExampleDemo();
  21.  
  22.    }
  23.  
  24.    /**
  25.      * creates test objects and stores them in new database file
  26.      */
  27.  
  28. private void createTestData(){
  29.        System.out.println("Creamos base de datos");
  30.  
  31.        // Create Players
  32.        Player p1 = new Player("Barry Bonds", 25, 0.362f);
  33.        Player p2 = new Player("Marquis Grissom", 9, 0.279f);
  34.        Player p3 = new Player("Ray Durham", 5, 0.282f);
  35.        Player p4 = new Player("Adrian Beltre", 29, 0.334f);
  36.        Player p5 = new Player("Cesar Izturis", 3, 0.288f);
  37.        Player p6 = new Player("Shawn Green", 15, 0.266f);
  38.  
  39.        // Create Pitchers
  40.        Player p7 = new Pitcher("Kirk Rueter",46, 0.131f, 9);
  41.        Player p8 = new Pitcher("Kazuhisa Ishii",17, 0.127f, 13);
  42.  
  43.        // Create Teams
  44.        Team t1 = new Team("Giants", "San Francisco", 91, 71);
  45.        Team t2 = new Team("Dodgers", "Los Angeles", 93, 69);
  46.  
  47.        // Add Players to Teams
  48.        t1.addPlayer(p1); p1.setTeam(t1);
  49.        t1.addPlayer(p2); p2.setTeam(t1);
  50.        t1.addPlayer(p3); p3.setTeam(t1);
  51.        t2.addPlayer(p4); p4.setTeam(t2);
  52.        t2.addPlayer(p5); p5.setTeam(t2);
  53.        t2.addPlayer(p6); p6.setTeam(t2);
  54.  
  55.        // Add Pitchers to Teams
  56.        t1.addPlayer(p7); p7.setTeam(t1);
  57.        t2.addPlayer(p8); p8.setTeam(t2);
  58.  
  59.        // Open a new database
  60.        new File(filename).delete();
  61.        ObjectContainer db = Db4o.openFile(filename);
  62.  
  63.        // Store Teams - also stores associated Players
  64.        //db.set(t1);
  65.        db.store(t1);
  66.        System.out.println("Stored " + t1);
  67.        //db.set(t2);
  68.        db.store(t2);
  69.        System.out.println("Stored " + t2);
  70.  
  71.        // Close database
  72.       db.close();
  73.  
  74. }
  75.  
  76.  
  77.  
  78.    /**
  79.      * Demonstrates query-by-example
  80.      */
  81.  
  82. private void queryByExampleDemo(){
  83.  
  84.  
  85.        // Open database
  86.        ObjectContainer db = Db4o.openFile(filename);
  87.        // Retrieve a Player by creating an example Player object
  88.        Player examplePlayer = new Player("Barry Bonds",0,0f);
  89.        ObjectSet result=db.queryByExample(examplePlayer);
  90.  
  91.        System.out.println(result.size());
  92.        while(result.hasNext()) {
  93.            System.out.println(result.next());
  94.        }
  95.        result.reset();
  96.  
  97.        // Retrieve a Team and all Players
  98.        Team exampleTeam = new Team("Dodgers",null, 0, 0);
  99.        result=db.queryByExample(exampleTeam);
  100.  
  101.        // List results
  102.        System.out.println(result.size());
  103.        while (result.hasNext()){
  104.            Team t = (Team) result.next();
  105.            System.out.println(t);
  106.            Iterator itr = t.getPlayers().iterator();
  107.            while (itr.hasNext()) {
  108.                Player p = (Player) itr.next();
  109.                System.out.println(p);
  110.            }
  111.        }
  112.  
  113.        // Close database
  114.        db.close();
  115.    }
   
   Salta el siguiente error:

Exception in thread "main" java.lang.ClassCastException: Player cannot be cast to com.db4o.reflect.generic.GenericObject
   at com.db4o.reflect.generic.GenericField.get(GenericField.java:36)
   at com.db4o.internal.FieldMetadata.getOn(FieldMetadata.java:582)
   at com.db4o.internal.FieldMetadata.collectConstraints(FieldMetadata.java:338)
   at com.db4o.internal.ClassMetadata$3.apply(ClassMetadata.java:447)
   at com.db4o.internal.ClassMetadata.forEachDeclaredAspect(ClassMetadata.java:1968)
   at com.db4o.internal.ClassMetadata.forEachAspect(ClassMetadata.java:1949)
   at com.db4o.internal.ClassMetadata.forEachField(ClassMetadata.java:1939)
   at com.db4o.internal.ClassMetadata.collectConstraints(ClassMetadata.java:443)
   at com.db4o.internal.query.processor.QConObject.associateYapClass(QConObject.java:82)
   at com.db4o.internal.query.processor.QConObject.byExample(QConObject.java:421)
   at com.db4o.internal.PartialObjectContainer.queryByExampleInternal(PartialObjectContainer.java:757)
   at com.db4o.internal.PartialObjectContainer.queryByExample(PartialObjectContainer.java:741)
   at com.db4o.internal.ExternalObjectContainer.queryByExample(ExternalObjectContainer.java:75)
   at com.db4o.internal.ExternalObjectContainer.get(ExternalObjectContainer.java:71)
   at Db4oTest.queryByExampleDemo(Db4oTest.java:102)
   at Db4oTest.main(Db4oTest.java:25)


« Última modificación: 10 Marzo 2009, 13:11 pm por sirdarckcat » En línea

sirdarckcat
Aspirante a supervillano
Colaborador
***
Desconectado Desconectado

Mensajes: 7.029


No estoy loco, soy mentalmente divergente


Ver Perfil WWW
Re: duda con Db4o con java
« Respuesta #1 en: 10 Marzo 2009, 13:23 pm »

No dijiste que es Player ni que hay en la linea 102
porque del codigo que mandaste la linea 102 no hace una QueryByExample
Suponiendo que la 102 es ObjectSet result=db.queryByExample(examplePlayer); entonces el problema esta en que examplePlayer no es una instancia ni interface de "GenericObject". Si la clase es generica debes poner el tipo entre <> en el contructor.

Probablemente despues de 7 dias ya resolviste la duda, pero es raro ver mensajes sin responder.. asi que..


En línea

edu@85

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: duda con Db4o con java
« Respuesta #2 en: 10 Marzo 2009, 15:36 pm »

Si esa es la linea 102, la clase player es esta:

Código
  1. public class Player {
  2.  
  3.    protected String name;
  4.    protected int squadNumber;
  5.    protected float battingAverage;
  6.    protected Team team;
  7.  
  8.    public Player (String name, int squadNumber, float battingAverage){
  9.        this.name = name;
  10.        this.squadNumber = squadNumber;
  11.        this.battingAverage = battingAverage;
  12.    }
  13.  
  14.    public Player() {
  15.  
  16. // TODO Auto-generated constructor stub
  17. }
  18.  
  19. public void setName(String n){this.name = n;}  
  20.    public String getName(){return this.name;}
  21.  
  22.    public void setSquadNumber(int s){this.squadNumber = s;}  
  23.    public int getSquadNumber(){return this.squadNumber;}  
  24.  
  25.    public void setBattingAverage(final float b){this.battingAverage = b;}
  26.    public float getBattingAverage(){return this.battingAverage;}
  27.  
  28.    public void setTeam(Team t) {this.team = t;}
  29.    public Team getTeam() {return this.team;}
  30.  
  31.    public String toString() {
  32.        return name + ":" + battingAverage;
  33.    }
  34. }
  35.  
  36.  
el problema creo que esta cuando creo la base y la cierro en el metodo createTestData() y despues al hacer la consulta la abro y salta el error.
« Última modificación: 11 Marzo 2009, 02:25 am por sirdarckcat » En línea

sirdarckcat
Aspirante a supervillano
Colaborador
***
Desconectado Desconectado

Mensajes: 7.029


No estoy loco, soy mentalmente divergente


Ver Perfil WWW
Re: duda con Db4o con java
« Respuesta #3 en: 11 Marzo 2009, 02:42 am »

pon tu codigo entre [code=java][/code]

Hi !
 
Whenever you get an unexpected GenericObject returned,
this is an issue with db4o not being able to access
your application classes.
 
On Java this is always a CLASSPATH issue.
 
On .NET this is always an issue with not having access
to the original assembly, because it possibly was
renamed.
 
In both cases it may work fine to store and access
objects in the first session, but it won't work any
longer after you reopen the database.
 
 
We see the above frequently here, so there should
definitely be an entry in our Reference Documentation
under Usage Pitfalls
 
http://developer.db4o.com/Resources/view.aspx/Reference/Usage_Pitfalls
 
 
Yeah, here is something about where not to place the
db4o Jar:
 
http://developer.db4o.com/Resources/view.aspx/Reference/Usage_Pitfalls/Classloader_And_Generic_Classes
 
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines