tutorial manager hsqldb

manager - hsqldb vs h2



HsqlException: excepción de datos (7)

Estoy usando la versión 2.2.5 de hsqldb en mi aplicación. A veces obtengo org.hsqldb.HsqlException: excepción de datos: datos de cadena, truncación derecha. Quiero saber cuáles son las posibles razones para eso. longvarchar en la columna varchar.

http://sourceforge.net/tracker/index.php?func=detail&aid=2993445&group_id=23316&atid=378131

Busqué por encima del enlace pero no pude obtener una respuesta adecuada.

Gracias por adelantado.

Dado debajo de la pila de excepciones, esta excepción no ocurre con frecuencia.

Entonces, ¿cuál podría ser la razón para eso y cómo establecer la longitud del tipo de datos en el archivo de script para aumentar en el tiempo de ejecución?

java.sql.SQLException: data exception: string data, right truncation at org.hsqldb.jdbc.Util.sqlException(Util.java:255) at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(JDBCPreparedStatement.java:4659) at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(JDBCPreparedStatement.java:311) at com.dikshatech.agent.db.NodesRuntimeTable.persistData(NodesRuntimeTable.java:151) at com.dikshatech.agent.jobs.WorkFlowJob.execute(WorkFlowJob.java:108) at org.quartz.core.JobRunShell.run(JobRunShell.java:216) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549) Caused by: org.hsqldb.HsqlException: data exception: string data, right truncation at org.hsqldb.error.Error.error(Error.java:134) at org.hsqldb.error.Error.error(Error.java:104) at org.hsqldb.types.CharacterType.castOrConvertToType(CharacterType.java:523) at org.hsqldb.types.CharacterType.convertToType(CharacterType.java:638) at org.hsqldb.StatementDML.getInsertData(StatementDML.java:921) at org.hsqldb.StatementInsert.getResult(StatementInsert.java:124) at org.hsqldb.StatementDMQL.execute(StatementDMQL.java:190) at org.hsqldb.Session.executeCompiledStatement(Session.java:1344) at org.hsqldb.Session.execute(Session.java:997) at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(JDBCPreparedStatement.java:4651)


El tamaño máximo de una columna VARCHAR es definido por el usuario. Si los datos insertados son más grandes que esto, se lanza una excepción. El siguiente ejemplo define una tabla con una columna VARCHAR (100), que limita el tamaño a 100 caracteres.

CREATE TABLE T (ID INT, DATA VARCHAR(100))

Puede usar un administrador de base de datos y ejecutar el comando SCRIPT para ver todas las definiciones de sus tablas y el tamaño de sus columnas. Alternativamente, SELECT * FROM INFORMATION_SCHEMA.COLUMNS muestra las características de cada columna.

Puede usar ALTER TABLE table_name ALTER COLUMN col_name SET DATA TYPE para aumentar el tamaño de una columna existente.


En realidad me enfrenté al mismo problema, y ​​me arreglé relativamente rápido. En mi caso, he declarado una columna de la columna de la base de datos como esta: descripción VARCHAR (50), pero estaba tratando de insertar una cadena / texto más largo allí, y eso causó la excepción.

Espero que esto te ayudará :)


Encontré este error mientras utilizaba Hibernate con HSQLDB. En lugar del campo de cadena habitual, el ofensor era un campo serializable.

El archivo de mapeo de hibernación era

<hibernate-mapping package="in.fins.shared"> <class name="Data"> <id name="id" column="id"> <generator class="uuid" /> </id> <property name="date" column="Date" /> <property name="facts" column = "facts" type="serializable" /> </class> </hibernate-mapping>

Para el campo de hechos, que se establece en serializable, Hibernate crea una columna de tipo VARBINARY con una longitud máxima de 255 en HSQLDB. Como el tamaño del objeto serializado era más que esta excepción de datos de tamaño : datos de cadena, HSQLDB lanzó el truncamiento correcto .

Cambiar la columna de hechos a Blob con el atributo de tipo sql resuelve el problema.

<property name="facts" type="serializable"> <column name="facts" sql-type="blob" /> </property>


Este error se produce en algunos escenarios, pero en el siguiente escenario es difícil recuperar la causa, suponiendo el siguiente escenario: Supongamos la siguiente entidad

@Entity public class Car { private String name; @ManyToOne @JoinColumn(name = "ownerId") private Owner owner; ...

Cuando la anotación ''@ManyToOne'' se olvidará, ¡pero la anotación ''@JoinColumn (name = "ownerId") estará presente! Este error ocurriría, lo que realmente no indica el problema real.


La longitud de su campo no es lo suficientemente grande. Utilicé el tipo de datos LONGVARCHAR para corregir este error.

CREAR LA TABLA "DEMO_TABLE" ("ID" NÚMERO (19,0), "MENSAJE" LONGVARCHAR);

ADVERTENCIA : Rant sigue ...

Sí, el mensaje de error java.sql.SQLException: data exception: string data, right truncation... tiene sentido total solo después de que sepa lo que está mal. Ocasionalmente encuentro un mensaje de error claro y bien escrito, destinado a informar a los usuarios. El tiempo que se tarda en escribir uno se devolverá 100 veces (o más, dependiendo del uso), pero generalmente a otros. Por lo tanto, hay demasiado poco incentivo para que la mayoría pase el tiempo. Sin embargo, puede volver a beneficiar al producto, como ocurre con el Spring Framework, que generalmente tiene mensajes de error superiores.

Estoy seguro de que a .com no le importa. ¡Los mensajes de error deficientes probablemente llevan a las personas aquí cada minuto de cada día!


Para el esquema generado automáticamente por Hibernate / HSQLDB a través de la anotación @Entity campo @Entity de tipo String, es posible que deba proporcionar un atributo de length . De lo contrario, la longitud quedará por defecto en 255 y la entrada larga no se ajustará:

@Lob @Column(name="column_name", length = 1000) private String description;


Tuve el mismo problema que describiste al probar con HSQLDB.

Estoy usando hibernate como implementación JPA y esta es mi clase de mapeo:

@Column (name = "file") private byte[] file;

En producción estoy usando PostgreSQL y el problema no se mostró, pero con HSQL tuve que agregar la anotación @Type en mi asignación para resolver ese error:

@Column (name = "file") @Type(type = "org.hibernate.type.MaterializedBlobType") private byte[] file;

Hay muchas implementaciones de tipos. Puede echar un vistazo a hibernate-core jar, dentro del paquete org.hibernate.type y seleccionar algunos que coincidan con sus asignaciones.