DB(DataBase)에서 큰 텍스트 데이터를 처리하는 것은 일반적인 작업입니다. CLOB 유형은 광범위한 텍스트 데이터를 DB에 저장할 수 있게 해줍니다. 따라서 DB를 통하여 CLOB 유형을 사용할 때에는 CLOB과 문자열 객체(String)간의 변환이 가끔씩 필요할 때가 있습니다.
CLOB을 문자열로 변환
표준 JAVA I/O 작업을 활용하여 SQL CLOB 객체의 문자 데이터를 효율적으로 처리할 수 있습니다.
Reader는 CLOB에서 데이터를 읽고, 이 데이터는 처리되어 StringWriter에 쓰여져 String 객체로 변환됩니다.
@Test
public void givenCLOB_whenConvertToString_thenCorrect() throws SQLException, IOException {
// 샘플 문자열
String sampleText = "This is a sample CLOB content.";
// 문자열을 CLOB으로 변환
Clob clob = new SerialClob(sampleText.toCharArray());
// Clob을 문자열로 변환 - 실제 변환 예제
String clobAsString;
try (Reader reader = clob.getCharacterStream();
StringWriter w = new StringWriter()) {
char[] buffer = new char[4096];
int charsRead;
while ((charsRead = reader.read(buffer)) != -1) {
w.write(buffer, 0, charsRead);
}
clobAsString = w.toString();
}
assertEquals(sampleText, clobAsString);
}
Sample로 만든 CLOB 탑입의 clob의 getCharacterStream()메서드를 사용하여 Clob에서 Reader를 가져옵니다. 이를 통해 Clob에서 문자 데이터를 읽을 수 있습니다. w라는 StringWriter를 사용하여 Reader에서 읽은 문자 데이터를 포착합니다.
리소스가 있는 try 블록 내부에서 Reader에서 문자를 읽기 위한 버퍼(char[] buffer)를 정의합니다.
Reader에서 문자를 버퍼로 읽어서 write()메서드를 활용하여 StringWriter에 기록합니다.
Clob에서 모든 문자를 StringWriter로 읽은 후, StringWriter의 내용을 toString()메서드로 String 객체로 변환 합니다.
이 메서드는 Clob의 내용을 String 객체로 제공합니다.
마지막으로 변환된 String값과 샘플 문자열을 비교하여 같은지 확인합니다.
String 객체를 Clob 객체로 변환
이미 위에서 샘플 Clob을 만들때 사용해 보았습니다. 그래도 한번더 살펴보도록 하겠습니다.
@Test
public void givenString_whenConvertToCLOB_thenCorrect() throws SQLException {
String sampleText = "This is a sample text to be stored as CLOB.";
char[] charArray = sampleText.toCharArray();
Clob clob = new SerialClob(charArray);
assertEquals(sampleText, clob.getSubString(1, (int) clob.length()));
}
Clob객체로 저장하고자 하는 텍스트를 포함하는 문자열(sampleText) 만들고 toCharArray() 메서드를 활용하여 String을 문자 배열(charArray)로 변환합니다. (Clob 객체에 저장할 텍스트 준비단계)
생성자 SerialClob(charArray)를 사용하여 Clob 객체를 생성합니다. 여기서 charArray는 저장할 문자 데이터를 나타내고 있습니다.
이렇게 Clob 객체와 String 객체간의 변환하는 방법을 살펴보았습니다.
예전에는 MySQL사용할 때나 Oracle사용할때 많이 쓰이긴 했습니다.
하지만 Application과 DB간의 공통적인 변환을 하나 만들어 두면 실제로 사용하는 방법이 많지는 않았던것 같습니다. 게다가 요즘에는 MySQL 같은 경우 TEXT라는 타입이 있어 더욱 사용을 안하고 있는지도 모르겠습니다.
허나 DB외에도 사용할 경우가 간혹 생기긴해서 이렇게 정리해 보았습니다.
감사합니다.
출처: https://www.baeldung.com/java-string-character-large-object-conversion
'Development > Java' 카테고리의 다른 글
[JAVA] Iterator.forEachRemaining()과 Iterable.forEach()의 차이점 (0) | 2024.08.12 |
---|---|
[JAVA] 배열에서 0에 가장 가까운 숫자 찾기 (0) | 2024.08.07 |
[JAVA] 정렬할 때 NullPointerException 방지 - Comparator.nullsLast() 활용 (0) | 2024.08.02 |
[JAVA] Javadoc의 @See, @link, @inheritDoc 태그 살펴보기 (0) | 2024.08.02 |
[JAVA] Javadoc란 (0) | 2024.08.02 |