게시판에 추가로 문의하는 칸 만드는 작업 중에
본내용을 DB에 저장할 때 조금 큰 사진을 첨부하면 저장이 안되었다.
크기가 너무 커서 varchar2로는 저장이 불가능했고 원글의 내용을 저장하는 데이터형을 보니
CLOB을 사용했다.
먼저 CLOB이란
CLOB
- 사이즈가 큰 데이터를 외부 파일로 저장하기 위한 데이터 타입
- 문자열 데이터를 DB외부에 저장하기 위한 타입
- CLOB타입은 SQL문에서 문자열 타입으로 입출력 값을 표현한다. 즉, varchar, char타입과 호환이 됨
그냥 크기가 큰 문자열 데이터 형이라고 이해하였다.
사진은 어떻게 저장이 되냐면 summerNote 편집기를 사용하여 <img='url'>이런 문자형식으로 저장이 된다.
우리 회사는 myBatis로 mapper문을 작성하여 DB에 글을 작성하거나 삭제할 수 있는데
일반 데이터형은 그냥 insert문을 사용하면 데이터 삽입이 가능하다.
그러나 CLOB은 따로 처리해주어야하는데
mapper에 insert문은 다른 부분과 똑같이 적어준다
INSERT
INTO TABLE_NAME
(
COLUMN1,
COLUMN2
content
)
VALUES
(
#{data},
#{data},
#{content}
)
여기서 content가 CLOB을 사용할 데이터이다.
mapper문에 이렇게 적으면 service에 DTO를 작성해주어야한다.
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Lob;
import javax.persistence.Table;
@Entity
@Table(name="TABLE_NAME")
@IdClass(TABLE_NAME.class)
public class TABLE_NAME {
@Id
private Long column1;
@Id
private Long column2;
@Column
@Lob
private String content;
public Long getColumn1() {
return column1;
}
public void setcolumn1(Long column1) {
this.column1 = column1;
}
public Long getColumn2() {
return column2;
}
public void setcolumn2(Long column2) {
this.column2 = column2;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
@Lob 어노테이션을 사용하여 CLOB임을 알려준다
DTO를 작성하기 전에 오류가 떴는데 DTO 작성 후에는 저장이 잘 되었다..ㅎ
'study > 인턴일지' 카테고리의 다른 글
[javascript/에러]Unterminated <c:if tag (0) | 2020.05.07 |
---|---|
[ORACLE/DB]데이터 삭제 및 수정 (0) | 2020.04.21 |
[DB/ORACLE]ORACLE 컬럼 정보조회 (0) | 2020.04.13 |
[JAVA/BufferedReader/BufferedWriter]콘솔 입출력 (0) | 2020.03.31 |
[Chrome/openWax/웹접근성검사]openWax로 웹접근성 검사 해보기 (0) | 2020.03.27 |