Foros del Web » Programación para mayores de 30 ;) » Java »

Fallo en base de datos

Estas en el tema de Fallo en base de datos en el foro de Java en Foros del Web. Hola tengo una base de datos en la que tengo que guardar desde una aplicacion java un numero de jugadores un array de string con ...
  #1 (permalink)  
Antiguo 24/08/2008, 16:24
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 15 años, 8 meses
Puntos: 3
Fallo en base de datos

Hola tengo una base de datos en la que tengo que guardar desde una aplicacion java un numero de jugadores un array de string con el nombre de los jugadores, cuando mete el nombre de jugadores solamente la aplicacion guarda y carga de la base de datos perfectamente, sin embargo cuando va a guardar la lista de string sale un error como este...

[TopLink Config]: 2008.08.25 12:20:28.593--ServerSession(11985823)--The alias name for the entity class [class UhuPoly.Guardar] is being defaulted to: Guardar.
[TopLink Config]: 2008.08.25 12:20:28.593--ServerSession(11985823)--The table name for entity [class UhuPoly.Guardar] is being defaulted to: GUARDAR.
[TopLink Config]: 2008.08.25 12:20:28.609--ServerSession(11985823)--The column name for element [private int UhuPoly.Guardar.NumJugadores] is being defaulted to: NUMJUGADORES.
[TopLink Config]: 2008.08.25 12:20:28.609--ServerSession(11985823)--The column name for element [private java.lang.String[] UhuPoly.Guardar.Jugadores] is being defaulted to: JUGADORES.
[TopLink Config]: 2008.08.25 12:20:28.609--ServerSession(11985823)--The column name for element [private java.lang.Long UhuPoly.Guardar.id] is being defaulted to: ID.
[TopLink Info]: 2008.08.25 12:20:28.843--ServerSession(11985823)--TopLink, version: Oracle TopLink Essentials - 2006.8 (Build 060830)
[TopLink Config]: 2008.08.25 12:20:30.156--ServerSession(11985823)--Connection(28623319)--connecting(DatabaseLogin(
platform=>JavaDBPlatform
user name=> "user"
datasource URL=> "jdbc:derby:C:\Archivos de programa\eQuiPo A\UhuPoly\BD\UhuPolyBD"
))
[TopLink Config]: 2008.08.25 12:20:30.156--ServerSession(11985823)--Connection(7364874)--Connected: jdbc:derby:C:\Archivos de programa\eQuiPo A\UhuPoly\BD\UhuPolyBD
User: user
Database: Apache Derby Version: 10.1.3.1
Driver: Apache Derby Embedded JDBC Driver Version: 10.1.3.1
[TopLink Config]: 2008.08.25 12:20:30.156--ServerSession(11985823)--Connection(32708178)--connecting(DatabaseLogin(
platform=>JavaDBPlatform
user name=> "user"
datasource URL=> "jdbc:derby:C:\Archivos de programa\eQuiPo A\UhuPoly\BD\UhuPolyBD"
))
[TopLink Config]: 2008.08.25 12:20:30.156--ServerSession(11985823)--Connection(9744175)--Connected: jdbc:derby:C:\Archivos de programa\eQuiPo A\UhuPoly\BD\UhuPolyBD
User: user
Database: Apache Derby Version: 10.1.3.1
Driver: Apache Derby Embedded JDBC Driver Version: 10.1.3.1
[TopLink Config]: 2008.08.25 12:20:30.156--ServerSession(11985823)--Connection(24737685)--connecting(DatabaseLogin(
platform=>JavaDBPlatform
user name=> "user"
datasource URL=> "jdbc:derby:C:\Archivos de programa\eQuiPo A\UhuPoly\BD\UhuPolyBD"
))
[TopLink Config]: 2008.08.25 12:20:30.156--ServerSession(11985823)--Connection(2799187)--Connected: jdbc:derby:C:\Archivos de programa\eQuiPo A\UhuPoly\BD\UhuPolyBD
User: user
Database: Apache Derby Version: 10.1.3.1
Driver: Apache Derby Embedded JDBC Driver Version: 10.1.3.1
[TopLink Config]: 2008.08.25 12:20:30.156--ServerSession(11985823)--Connection(2633821)--connecting(DatabaseLogin(
platform=>JavaDBPlatform
user name=> "user"
datasource URL=> "jdbc:derby:C:\Archivos de programa\eQuiPo A\UhuPoly\BD\UhuPolyBD"
))
[TopLink Config]: 2008.08.25 12:20:30.156--ServerSession(11985823)--Connection(15774883)--Connected: jdbc:derby:C:\Archivos de programa\eQuiPo A\UhuPoly\BD\UhuPolyBD
User: user
Database: Apache Derby Version: 10.1.3.1
Driver: Apache Derby Embedded JDBC Driver Version: 10.1.3.1
[TopLink Config]: 2008.08.25 12:20:30.156--ServerSession(11985823)--Connection(14894886)--connecting(DatabaseLogin(
platform=>JavaDBPlatform
user name=> "user"
datasource URL=> "jdbc:derby:C:\Archivos de programa\eQuiPo A\UhuPoly\BD\UhuPolyBD"
))
[TopLink Config]: 2008.08.25 12:20:30.156--ServerSession(11985823)--Connection(15308417)--Connected: jdbc:derby:C:\Archivos de programa\eQuiPo A\UhuPoly\BD\UhuPolyBD
User: user
Database: Apache Derby Version: 10.1.3.1
Driver: Apache Derby Embedded JDBC Driver Version: 10.1.3.1
[TopLink Config]: 2008.08.25 12:20:30.156--ServerSession(11985823)--Connection(26740272)--connecting(DatabaseLogin(
platform=>JavaDBPlatform
user name=> "user"
datasource URL=> "jdbc:derby:C:\Archivos de programa\eQuiPo A\UhuPoly\BD\UhuPolyBD"
))
[TopLink Config]: 2008.08.25 12:20:30.156--ServerSession(11985823)--Connection(30617157)--Connected: jdbc:derby:C:\Archivos de programa\eQuiPo A\UhuPoly\BD\UhuPolyBD
User: user
Database: Apache Derby Version: 10.1.3.1
Driver: Apache Derby Embedded JDBC Driver Version: 10.1.3.1
[TopLink Config]: 2008.08.25 12:20:30.156--ServerSession(11985823)--Connection(25358187)--connecting(DatabaseLogin(
platform=>JavaDBPlatform
user name=> "user"
datasource URL=> "jdbc:derby:C:\Archivos de programa\eQuiPo A\UhuPoly\BD\UhuPolyBD"
))
[TopLink Config]: 2008.08.25 12:20:30.156--ServerSession(11985823)--Connection(3866500)--Connected: jdbc:derby:C:\Archivos de programa\eQuiPo A\UhuPoly\BD\UhuPolyBD
User: user
Database: Apache Derby Version: 10.1.3.1
Driver: Apache Derby Embedded JDBC Driver Version: 10.1.3.1
[TopLink Info]: 2008.08.25 12:20:30.250--ServerSession(11985823)--file:/C:/Documents%20and%20Settings/Administrador/Escritorio/PRACTICA%20IS2/UhuPolyJava/build/classes-UhuPolyJavaPU login successful
[TopLink Warning]: 2008.08.25 12:20:31.218--ServerSession(11985823)--Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2006.8 (Build 060830)): oracle.toplink.essentials.exceptions.DatabaseExcep tion
Internal Exception: SQL Exception: Table/View 'SEQUENCE' already exists in Schema 'USER'.Error Code: 30000
Call:CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT DECIMAL, PRIMARY KEY (SEQ_NAME))
Query:DataModifyQuery()
[TopLink Warning]: 2008.08.25 12:20:31.390--UnitOfWork(27071180)--Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2006.8 (Build 060830)): oracle.toplink.essentials.exceptions.DatabaseExcep tion
Internal Exception: SQL Exception: An attempt was made to get a data value of type 'VARCHAR' from a data value of type '[Ljava.lang.String;'.Error Code: 20000
Call:INSERT INTO GUARDAR (ID, JUGADORES, NUMJUGADORES) VALUES (?, ?, ?)
bind => [1, [Ljava.lang.String;@13d1402, 2]
Query:InsertObjectQuery(Partida con 2 jugadores : )
javax.persistence.RollbackException: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2006.8 (Build 060830)): oracle.toplink.essentials.exceptions.DatabaseExcep tion
Internal Exception: SQL Exception: An attempt was made to get a data value of type 'VARCHAR' from a data value of type '[Ljava.lang.String;'.Error Code: 20000
Call:INSERT INTO GUARDAR (ID, JUGADORES, NUMJUGADORES) VALUES (?, ?, ?)
bind => [1, [Ljava.lang.String;@13d1402, 2]
Query:InsertObjectQuery(Partida con 2 jugadores : )
at oracle.toplink.essentials.internal.ejb.cmp3.transa ction.base.EntityTransactionImpl.commit(EntityTran sactionImpl.java:109)
at oracle.toplink.essentials.internal.ejb.cmp3.transa ction.EntityTransactionImpl.commit(EntityTransacti onImpl.java:45)
at UhuPoly.ControladorBD.persist(ControladorBD.java:3 1)

Nose de que puede ser, ya que e mirado varios manuales y guardan el array igual que yo..
  #2 (permalink)  
Antiguo 24/08/2008, 17:08
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: Fallo en base de datos

Hola e probado a introducir el numero de jugadores y el nombre de un solo jugador y lo hace perfectamente, con lo que el fallo es que no me deja guardar un String[] .. alguien sabe como puedo guardar el array de string???
  #3 (permalink)  
Antiguo 25/08/2008, 03:19
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Fallo en base de datos

El campo es de tipo VARCHAR, no puedes guardar dentro un array de String. De hecho, en SQL normal no se permite guardar array directamente.

Lo normal es hacer un bucle y ejecutar un insert por cada valor del array, ya que el insert no acepta arrays.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #4 (permalink)  
Antiguo 25/08/2008, 05:25
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: Fallo en base de datos

Pero es que yo no hago ningun insert.. yo utilizo una unidad de persistencia una clase entidad y un controlador de BD... que es el que se encarga de almacenar los atributos de la clase entidad que tieneun entero y un array de string
  #5 (permalink)  
Antiguo 25/08/2008, 05:48
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: Fallo en base de datos

El esquema es el siguiente.. yo tengo la siguiente clase entidad..

/**
* Clase Entidad Guardar
*
* @author Administrador
*/
@Entity
public class Guardar implements Serializable {

private int NumJugadores;
private static final long serialVersionUID = 1L;

private String[] Jugadores;

//private int[] Saldo;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

/** Creates a new instance of Guardar */
public Guardar() {
}

.....
.......

Y luego en el controlador hago lo siguiente

public static void persist(Object object) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
try {
em.persist(object);
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
} finally {
em.close();
}
}

y le paso como parametro un objeto tipo Guardar y lo almacena en la BD...
  #6 (permalink)  
Antiguo 25/08/2008, 06:08
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: Fallo en base de datos

Hola me respondo el fallo era que Java no mapea tablas. Solo tipos List, Set, Map y Collection con lo que tendre que pasar los objetos de la tabla a un List
  #7 (permalink)  
Antiguo 25/08/2008, 09:33
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Fallo en base de datos

Aha, claro por que al decirle que es una Collection el lo transforma en varios insert. Si le dices un array el cree que es un tipo de datos unico y lo intenta meter en un solo campo.

Aunque tu no hagas insert, el ORM lo hace por ti. Eso lo tienes que tener claro por que al fin y al cabo un ORM no es mas que una capa de abstracción, y pensando en lo que hay por debajo encontraras mas facil los errores..

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #8 (permalink)  
Antiguo 25/08/2008, 10:28
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: Fallo en base de datos

Hola asi es GreenEyed mi controlador hace uso del ORM pero ahora me surge otra duda.. yo me creo los objetos de la clase tal que asi...

/**
* Clase Entidad Guardar
*
* @author Administrador
*/
@Entity
public class Guardar implements Serializable {

private int NumJugadores;
private static final long serialVersionUID = 1L;

//private List<String> Jugadores;

private List Saldo;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

/** Creates a new instance of Guardar */
public Guardar() {
NumJugadores = 0;
//Jugadores = new ArrayList<String>();
Saldo = new ArrayList<Integer>();
}

//añade jugadores
public void addJugador(int saldo) {
//Jugadores.add(nombre);
Saldo.add(saldo);
NumJugadores++;
}
...
...

y el controlador sigue el mismo, pero cuando le doy a el boton guardar sigue dando fallos.. ya se acon el List de Integer como con el de String cuando se supone que esas clase son serializables ...
  #9 (permalink)  
Antiguo 25/08/2008, 10:34
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: Fallo en base de datos

Es curioso por que si pongo la clase del mensaje anterior da el siguiente fallo

init:
deps-jar:
compile:
run:
[TopLink Config]: 2008.08.25 06:33:27.765--ServerSession(32278793)--The alias name for the entity class [class UhuPoly.Guardar] is being defaulted to: Guardar.
[TopLink Config]: 2008.08.25 06:33:27.765--ServerSession(32278793)--The table name for entity [class UhuPoly.Guardar] is being defaulted to: GUARDAR.
[TopLink Config]: 2008.08.25 06:33:27.781--ServerSession(32278793)--The column name for element [private int UhuPoly.Guardar.NumJugadores] is being defaulted to: NUMJUGADORES.
[TopLink Config]: 2008.08.25 06:33:27.781--ServerSession(32278793)--Element [private java.util.List UhuPoly.Guardar.Saldo] is being defaulted to a one to many mapping.
[TopLink Config]: 2008.08.25 06:33:27.781--ServerSession(32278793)--The column name for element [private java.lang.Long UhuPoly.Guardar.id] is being defaulted to: ID.
[TopLink Config]: 2008.08.25 06:33:27.828--ServerSession(32278793)--The target entity (reference) class for the one to many mapping element [private java.util.List UhuPoly.Guardar.Saldo] is being defaulted to: class java.lang.Integer.
[TopLink Config]: 2008.08.25 06:33:27.828--ServerSession(32278793)--The join table name for the many to many mapping [private java.util.List UhuPoly.Guardar.Saldo] is being defaulted to: GUARDAR_INTEGER.
Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError
at UhuPoly.FRMtablero.clickguardar(FRMtablero.java:30 1)

...
...
...

Caused by: Exception [TOPLINK-7243] (Oracle TopLink Essentials - 2006.8 (Build 060830)): oracle.toplink.essentials.exceptions.ValidationExc eption
Exception Description: Missing meta data for class [java.lang.Integer]. Ensure the class is not being excluded from your persistence unit by a <exclude-unlisted-classes>true</exclude-unlisted-classes> setting. If this is the case, you will need to include the class directly by adding a <class>[java.lang.Integer]</class> entry for your persistence-unit.
at oracle.toplink.essentials.exceptions.ValidationExc eption.classNotListedInPersistenceUnit(ValidationE xception.java:2120)

....
....

y sin embargo cuando quito el <Integer> de la declaracion del List el fallo es diferente...

/**
* Clase Entidad Guardar
*
* @author Administrador
*/
@Entity
public class Guardar implements Serializable {

private int NumJugadores;
private static final long serialVersionUID = 1L;

//private List<String> Jugadores;

private List<Integer> Saldo;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

/** Creates a new instance of Guardar */
public Guardar() {
NumJugadores = 0;
//Jugadores = new ArrayList<String>();
Saldo = new ArrayList<Integer>();
}

//añade jugadores
public void addJugador(int saldo) {
//Jugadores.add(nombre);
Saldo.add(saldo);
NumJugadores++;
}
...
...

el fallo es el siguiente...

Internal Exception: SQL Exception: An attempt was made to get a data value of type 'VARCHAR' from a data value of type 'java.util.ArrayList'.Error Code: 20000
Call:INSERT INTO GUARDAR (ID, SALDO, NUMJUGADORES) VALUES (?, ?, ?)
bind => [1, [300000], 1]
Query:InsertObjectQuery(Partida con 1 jugadores : Saldo: 300000 )
javax.persistence.RollbackException: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2006.8 (Build 060830)): oracle.toplink.essentials.exceptions.DatabaseExcep tion
Internal Exception: SQL Exception: An attempt was made to get a data value of type 'VARCHAR' from a data value of type 'java.util.ArrayList'.Error Code: 20000
Call:INSERT INTO GUARDAR (ID, SALDO, NUMJUGADORES) VALUES (?, ?, ?)
bind => [1, [300000], 1]
Query:InsertObjectQuery(Partida con 1 jugadores : Saldo: 300000 )
at oracle.toplink.essentials.internal.ejb.cmp3.transa ction.base.EntityTransactionImpl.commit(EntityTran sactionImpl.java:109)
at oracle.toplink.essentials.internal.ejb.cmp3.transa ction.EntityTransactionImpl.commit(EntityTransacti onImpl.java:45)
at UhuPoly.ControladorBD.persist(ControladorBD.java:3 1)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:42.