2011-09-27 11 views
20

私のアプリケーションでhsqldbバージョン2.2.5を使用している場合があります。org.hsqldb.HsqlExceptionが発生することがあります。データ例外:文字列データ、右のtruncation.soが原因である可能性があります。私はvarcharの列にlongvarcharのようなデータを挿入していません。HsqlException:データ例外

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

私はリンクの上に検索さが、適切なフィードバックを得ることができませんでした。

ありがとうございます。


例外スタック この例外は頻繁に起こることはありません。

その理由は何か、実行時にスクリプトファイルのデータ型の長さを増やす方法はありますか?

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) 
+0

を、私はそれが動的にchages defult VARCHAR(32768)であるCHAR VARYINGにVARCHAR()を変更することで解決しました。 – Anil

答えて

16

VARCHAR列の最大サイズはユーザー定義です。挿入されたデータがこれより大きい場合、例外がスローされます。以下の例では、サイズを100文字に制限するVARCHAR(100)列の表を定義しています。

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

データベースマネージャを使用して、SCRIPTコマンドを実行すると、すべてのテーブル定義とそのカラムサイズを確認できます。あるいは、SELECT * FROM INFORMATION_SCHEMA.COLUMNSは各列の特性を示します。

ALTER TABLE table_name ALTER COLUMN col_name SET DATA TYPEを使用すると、既存の列のサイズを大きくすることができます。

0

私は実際に同じ問題に直面し、比較的迅速に修正されました。 私の場合、私はこのようなDBテーブルの列の列を宣言しました:description VARCHAR(50)、しかし、そこに長い文字列/テキストを挿入しようとしていて、例外が発生しました。これはあなたを助ける

希望:)

-1

このエラーは、いくつかのシナリオの中で発生したが、次のシナリオでは、原因を取得するために 困難であり、次のシナリオを想定しています 次のエンティティを想定

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

注釈 '@ManyToOne'は忘れてしまいますが、注釈 '@JoinColumn(name = "ownerId")は存在します!このエラーは実際の問題を実際に示すものではありません。

3

HSQLDBでHibernateを使用しているときにこのエラーが発生しました。通常の文字列フィールドの代わりに、犯人はシリアル化可能なフィールドでした。

Hibernateマッピングファイルは、シリアライズ可能に設定されている事実フィールドについて

<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> 

は、HibernateはHSQLDBの最大長さ255を有するタイプVARBINARYのカラムを作成しました。直列化されたオブジェクトサイズがこのサイズを超えていたため、データ例外:文字列データ、右切り捨てがHSQLDBによってスローされました。

ファクト列をBLOBに変更すると、SQLタイプ属性が問題を解決します。

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

ここで同じ問題があります。誰かが好奇心を持っている場合、同等の注釈は '@Column(columnDefinition =" blob ")' –

4

フィールドの長さが十分ではありません。このエラーを修正するには、LONGVARCHARデータ型を使用しました。

CREATE TABLE "DEMO_TABLE"( "ID" NUMBER(19,0)、 "MESSAGE" LONGVARCHAR);

WARNING:暴言は、以下の...

うんは、エラーメッセージjava.sql.SQLException: data exception: string data, right truncation...あなたが間違っているかを知る唯一の後に総理にかなっています。場合によっては、ユーザーに知らせるための明確で、よく書かれたエラーメッセージが表示されることがあります。書き込みに要する時間は、100倍(または使用状況によってはそれ以上)返されますが、通常は他のものに戻ります。したがって、ほとんどの時間を費やすインセンティブはあまりにも少ないです。しかし、一般的に優れたエラーメッセージを持つSpring Frameworkのように、製品に利益をもたらすことができます。

私は確かにstackoverflow.comは気にしません。貧弱なエラーメッセージが、毎日毎分人々をここに誘導します。

1

HSQLDBでテストしているときに記述したのと同じ問題がありました。

私はJPAの実装として休止状態使用していますと、これは私のマッピングクラスである:製造において

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

私は、PostgreSQLを使用していますし、問題がアップ示されていないが、HSQLで、私は追加する必要がありましたそのエラーを解決するために、私のマッピングで@Type注釈:

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

種類の多くの実装があります。あなたはパッケージorg.hibernate.typeの中にあるhibernate-core jarを見て、あなたのマッピングに一致するものをいくつか選ぶことができます。あなたがlength atrributeを提供する必要があるかもしれませんString型の@Entityフィールド上@Column注釈を経由して休止/ HSQLDB自動的に生成されたスキーマの

1

。それ以外の場合は長さは255にデフォルト設定されますし、長い入力が収まらない:

@Lob 
@Column(name="column_name", length = 1000) 
private String description; 
関連する問題