2011-09-27 11 views
20

मैं अपने आवेदन में hsqldb संस्करण 2.2.5 का उपयोग कर रहा हूं कभी-कभी मुझे org.hsqldb.HsqlException मिल रहा है: डेटा अपवाद: स्ट्रिंग डेटा, सही truncation.so मैं जानना चाहता हूं कि इसके लिए संभावित कारण क्या हैं। मैं वर्चर कॉलम में लांगवार्चर जैसे किसी भी डेटा को सम्मिलित नहीं कर रहा हूं।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

मैं CHAR बदलती करने के लिए varchar() जो defult varchar (32768) यह गतिशील प्रभार है बदलकर हल किया। – Anil

उत्तर

16

एक वर्चर कॉलम का अधिकतम आकार उपयोगकर्ता परिभाषित है। यदि सम्मिलित डेटा इससे बड़ा है, तो एक अपवाद फेंक दिया जाता है। नीचे दिया गया उदाहरण एक VARCHAR (100) कॉलम वाली तालिका को परिभाषित करता है, जो आकार को 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

मुझे वास्तव में एक ही समस्या का सामना करना पड़ा, और अपेक्षाकृत तेज़ी से तय हो गया। मेरे मामले में मैंने इस तरह एक डीबी टेबल कॉलम कॉलम घोषित कर दिया है: विवरण VARCHAR (50), लेकिन मैं वहां एक लंबी स्ट्रिंग/टेक्स्ट डालने की कोशिश कर रहा था, और इससे अपवाद हुआ।

आशा यह आप में मदद मिलेगी :)

-1

कुछ परिदृश्य के दशक में यह त्रुटि आती है लेकिन इस परिदृश्य में यह कारण पुनः प्राप्त करने, मान लें परिदृश्य निम्नलिखित मुश्किल है: मान लें निम्नलिखित इकाई

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

जब एनोटेशन '@ManyToOne' भुला दिया जाएगा, लेकिन एनोटेशन '@JoinColumn (name = "ownerId")' मौजूद होगा! यह त्रुटि उत्पन्न होगी, जो वास्तव में वास्तविक समस्या को इंगित नहीं करती है।

3

मुझे HSQLDB के साथ हाइबरनेट का उपयोग करते समय इस त्रुटि का सामना करना पड़ा। सामान्य स्ट्रिंग फ़ील्ड के बजाय, अपराधी एक क्रमिक क्षेत्र था।

हाइबरनेट मैपिंग फ़ाइल

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

तथ्यों क्षेत्र है, जो serializable के लिए निर्धारित है के लिए, हाइबरनेट HSQLDB में अधिकतम लंबाई 255 के साथ प्रकार VARBINARY का स्तंभ था। जैसा कि क्रमबद्ध ऑब्जेक्ट आकार इस आकार से अधिक डेटा अपवाद था: स्ट्रिंग डेटा, दाएं छंटनी को HSQLDB द्वारा फेंक दिया गया था।

एसक्यूएल-प्रकार विशेषता के साथ ब्लॉब में तथ्यों कॉलम को बदलना समस्या हल करता है।

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

यहां वही समस्या है। यदि कोई उत्सुक है तो समकक्ष एनोटेशन '@ कॉलम (कॉलमडिफिनिशन =" ब्लॉब "होगा) –

4

आपकी फ़ील्ड लंबाई पर्याप्त नहीं है। मैंने इस त्रुटि को ठीक करने के लिए LONGVARCHAR डेटा प्रकार का उपयोग किया।

तालिका "डेमो_TABLE" ("आईडी" NUMBER (1 9, 0), "संदेश" लोंगवर्चर बनाएं;

चेतावनी: शेख़ी इस प्रकार है ...

हां, त्रुटि संदेश java.sql.SQLException: data exception: string data, right truncation... कुल भावना क्या आप जानते हैं के बाद ही क्या गलत है बनाता है। कभी-कभी मुझे उपयोगकर्ताओं को सूचित करने के लिए एक स्पष्ट, अच्छी तरह से लिखित त्रुटि संदेश मिलता है। एक को लिखने में लगने वाला समय 100 गुना (या उपयोग के आधार पर अधिक) वापस कर दिया जाएगा, लेकिन आम तौर पर दूसरों के लिए। इसलिए, समय बिताने के लिए बहुत कम प्रोत्साहन है। हालांकि यह उत्पाद को लाभ पहुंचाने के लिए वापस आ सकता है, जैसे स्प्रिंग फ्रेमवर्क जिसमें आम तौर पर बेहतर त्रुटि संदेश होते हैं।

मुझे यकीन है कि stackoverflow.com पर कोई फर्क नहीं पड़ता। खराब त्रुटि संदेश शायद हर दिन हर मिनट लोगों को ड्राइव करते हैं!

1

मुझे वही समस्या थी जैसा आपने एचएसक्यूएलडीबी के साथ परीक्षण करते समय वर्णन किया था।

मैं जेपीए कार्यान्वयन के रूप में हाइबरनेट उपयोग कर रहा हूँ और यह मेरा मानचित्रण वर्ग है:

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

उत्पादन मैं PostgreSQL और समस्या का उपयोग कर रहा में नहीं दर्शायी गई है, लेकिन HSQL साथ मैं जोड़ने के लिए किया था

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

प्रकार के कई प्रयोगों के होते हैं: मेरी मानचित्रण में @Type एनोटेशन कि त्रुटि को हल करने के। आप org.hibernate.type पैकेज के अंदर हाइबरनेट-कोर जार पर एक नज़र डाल सकते हैं और कुछ मैपिंग से मेल खाते हैं।

1

हाइबरनेट/HSQLDB के लिए स्वचालित रूप से @Column टिप्पणी का प्रकार स्ट्रिंग की @Entity मैदान पर आप length atrribute प्रदान करने के लिए आवश्यकता हो सकती है के माध्यम से स्कीमा उत्पन्न। अन्यथा लंबाई 255 लागू हो जाएगी और लंबे समय से इनपुट फिट नहीं होगा:

@Lob 
@Column(name="column_name", length = 1000) 
private String description; 
संबंधित मुद्दे