삶 가운데 남긴 기록 AACII.TISTORY.COM
ORA-01704: JAVA ORACLE JDBC로 4000자 이상 CLOB 데이터 INSERT, UPDATE 예제 본문
DEV&OPS/Java
ORA-01704: JAVA ORACLE JDBC로 4000자 이상 CLOB 데이터 INSERT, UPDATE 예제
ALEPH.GEM 2023. 12. 27. 21:09
ORA-01704
JAVA로 ORACLE DBMS에 JDBC로 프로그램을 작성할 때,
문자열이 4000자가 넘어가면 일반 String statement로 insert/update시 ORA-01704를 발생시키며 안됩니다.
그럴 때 java.sql.Clob 클래스를 사용해서 preparedStatement.setClob()를 써서 구현하면 CLOB 데이터를 insert/update 할 수 있습니다.
예제는 아래와 같습니다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Clob;
public class ClobExample {
private static final String JDBC_URL = "jdbc:oracle:thin:@localhost:1521:yourdb";
private static final String USERNAME = "yourUsername";
private static final String PASSWORD = "yourPassword";
public static void main(String[] args) {
Connection connection = null;
try {
// 1. 데이터베이스 연결
connection = DriverManager.getConnection(JDBC_URL, USERNAME, PASSWORD);
// 2. CLOB 삽입 예제
String clobData = generateLargeClobData(); // 큰 CLOB 데이터 생성
insertClobData(connection, clobData);
// 3. CLOB 업데이트 예제
String updatedClobData = generateUpdatedClobData(); // 업데이트할 CLOB 데이터 생성
updateClobData(connection, updatedClobData);
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 4. 연결 종료
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
private static void insertClobData(Connection connection, String clobData) throws SQLException {
String insertQuery = "INSERT INTO your_table (clob_column) VALUES (?)";
try (PreparedStatement preparedStatement = connection.prepareStatement(insertQuery)) {
// CLOB 데이터를 PreparedStatement에 설정
Clob clob = connection.createClob();
clob.setString(1, clobData);
preparedStatement.setClob(1, clob);
// 쿼리 실행
preparedStatement.executeUpdate();
}
}
private static void updateClobData(Connection connection, String updatedClobData) throws SQLException {
String updateQuery = "UPDATE your_table SET clob_column = ? WHERE your_condition";
try (PreparedStatement preparedStatement = connection.prepareStatement(updateQuery)) {
// CLOB 데이터를 PreparedStatement에 설정
Clob clob = connection.createClob();
clob.setString(1, updatedClobData);
preparedStatement.setClob(1, clob);
// 쿼리 실행
preparedStatement.executeUpdate();
}
}
private static String generateLargeClobData() {
// 큰 CLOB 데이터를 생성하는 코드 작성
return "엄청나게 긴 4000자 이상 CLOB Data...";
}
private static String generateUpdatedClobData() {
// 업데이트할 CLOB 데이터를 생성하는 코드 작성
return "엄청나게 긴 4000자 이상 Updated CLOB Data...";
}
}
또는 아주 긴 문자열을 등분하여 insert/update 해도 됩니다.
String을 10등분 하는 예제
public class LongStringDivider {
public static void main(String[] args) {
// 아주 긴 문자열 생성
String longString = "이것은 굉장히 길어서 10등분 해서 나누어질 String 입니다...";
// 문자열의 길이 계산
int length = longString.length();
// 등분할 개수 여기서는 10등분
int parts = 10;
// 등분한 문자열 출력
for (int i = 0; i < parts; i++) {
int startIndex = i * length / parts;
int endIndex = (i + 1) * length / parts;
String part = longString.substring(startIndex, endIndex);
System.out.println("Part " + (i + 1) + ": " + part);
}
}
}
그러고 나서 아래처럼 쿼리를 TO_CLOB() 함수를 써서 문자열 연결 연산자 || 로 연결해서 쿼리를 작성하면 됩니다.
UPDATE your_table SET clob_column = TO_CLOB('아주 긴 String') || TO_CLOB('엄청나게 긴 String') WHERE your_condition
편한 걸로 사용하세요.
끝.
728x90
'DEV&OPS > Java' 카테고리의 다른 글
JAVA 현재 날짜와 시간을 지정한 날짜 형식으로 출력 (0) | 2024.01.03 |
---|---|
gradle and groovy (1) | 2024.01.01 |
String 치환시 replace()와 replaceAll()의 차이 (0) | 2023.12.26 |
인텔리제이 세팅 (0) | 2023.12.21 |
Spring MVC 프로젝트 구조 (0) | 2023.01.19 |