2013-08-01 2 views
0

로그인 페이지가있는 응용 프로그램을 만들고 사용자에게 세부 정보를 입력하도록 요청합니다. 사용자는 입력 된 세부 정보를 볼 수 있으며 관리자는 입력 된 모든 세부 정보를 볼 수 있습니다. 나는 이것을 위해 MYSQL을 사용하고 NetBeans를 사용하여 필요한 양식을 생성한다.내 코드에 오류가 있습니까?

이제 데이터베이스에서 내 양식의 테이블로 데이터를 가져오고 싶습니다.이 테이블은 calldetails라는 테이블이있는 tenderdetails라고합니다. 세 필드의 데이터 유형을 처음 BLOB로 만들었습니다. 데이터를 가져올 때이 필드에 정크 값이 나타났습니다.

그래서,이 필드의 데이터 형식을 TEXT로 변경하려고했습니다. 예외가 발생합니다. 이런 식으로 뭔가 (문제는 AAI의 패키지 필드)

org.eclipse.persistence.exceptions.ConversionException Exception Description: The object [DATA THAT I ENTERED FOR FIELD ISSUE], of class [class java.lang.String], from mapping [org.eclipse.persistence.mappings.DirectToFieldMapping[issue-->tenderdetails.calldetails.Issue]] with descriptor [RelationalDescriptor(AAI.Calldetails --> [DatabaseTable(tenderdetails.calldetails)])], could not be converted to [class [B]. Exception in thread "AWT-EventQueue-0" 

또한

javax.persistence.PersistenceException: Exception [EclipseLink-3002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.ConversionException Exception Description: The object [DATA THAT I ENTERED FOR FIELD ISSUE ], of class [class java.lang.String], from mapping [org.eclipse.persistence.mappings.DirectToFieldMapping[issue-->tenderdetails.calldetails.Issue]] with descriptor [RelationalDescriptor(AAI.Calldetails --> [DatabaseTable(tenderdetails.calldetails)])], could not be converted to [class [B]. 

하고,

org.eclipse.persistence.exceptions.ConversionException Exception Description: The object [DATA THAT I ENTERED FOR FIELD ISSUE ], of class [class java.lang.String], from mapping [org.eclipse.persistence.mappings.DirectToFieldMapping[issue-->tenderdetails.calldetails.Issue]] with descriptor [RelationalDescriptor(AAI.Calldetails --> [DatabaseTable(tenderdetails.calldetails)])], could not be converted to [class [B]. at org.eclipse.persistence.exceptions.ConversionException.couldNotBeConverted(ConversionException.java:75) at org.eclipse.persistence.internal.helper.Helper.buildBytesFromHexString(Helper.java:265) 

나는이에 대한 데이터 유형 BLOB를 사용하는 경우 이러한 예외를 다시 제거 전지. 이 데이터 유형을 VARCHAR로 변경하면 예외가 여전히 발생했습니다.

TEXT를 사용하고이 세 필드를 표시하지 않더라도 예외가 표시되지 않습니다.

이 항목은 내 코드의 다른 부분에도 영향을줍니다. jTable의 데이터를 Excel로 전송합니다. 물론 BLOB를 사용하면 정크 값이 Excel 파일로 전송됩니다. TEXT를 사용하면 "\ n"이 내 코드에서 엉망이되어 새로운 줄이 동일한 레코드에 주어 지므로 전체 대칭이 엉망이됩니다. BLOB를 사용할 때 대칭은 절대적으로 좋습니다. 그래서

[[email protected] 
[[email protected] 
[[email protected] 
[[email protected] 
[[email protected] 
[[email protected] 

정확히 문제가 여기에 무엇 : 참조를 위해, 나는이를 얻을 수 있도록

나는 어딘가 온라인 때때로이 정크 값이 실제로 무언가를 의미했다?

+1

당신이 말하는 _junk_는'hashcode'입니다 !! –

+0

'toString()'메소드입니다. –

+0

그럼 해결하려면 어떻게해야합니까? Java 코드에서 Issue를 String으로 사용했습니다. – user2602294

답변

-1

일반적인 문제입니다. 직렬화 된 형식이 아닌 Java 객체의 값을 toString()으로 유지하고 있습니다.

직렬화 된 객체를 데이터베이스에 유지하려면 Java 직렬화 프레임 워크를 사용해야합니다.

당신은 당신의 BLOB이 같은 ObjectOutputStream의 바이트를 작성해야 다음 BLOB 데이터 유형을 사용하는 경우 : 귀하의 예외에서

final Object thing = new Object(); 

    try (final ObjectOutputStream oos = new ObjectOutputStream(blob.setBinaryStream(1))) { 
     oos.writeObject(thing); 
    } 

    final Object myNewThing; 
    try(final ObjectInputStream ois = new ObjectInputStream(blob.getBinaryStream())) { 
     myNewThing = ois.readObject(); 
    } 

는 당신이 MySQL의 데이터를 저장할 수는 EclipseLink를 사용하는 것 같습니다 . 이 경우 맵의 필드를 serializable 데이터 유형으로 할 수 있어야하며 EclipseLink가 직렬화/직렬화를 처리합니다.

+0

사실, 나는 직렬화에 대해 모른다. 그것에 대해 읽었을뿐입니다. 자바에 익숙하지 않습니다. – user2602294

+1

위에서 작성한 코드를 설명해 주시겠습니까? 위에서 말한 것처럼 필드 문제가 있습니다 ... 작성한 코드를 사용하여 직렬화를 구현하려면 어떻게해야합니까? – user2602294

1

실수로 엔티티 관계에 @Basic을 주석으로 지정하면이 오류가 발생합니다.

관련 문제