반응형
일반적으로 배열의 값을 데이터베이스(DB)에 넣기 보다는, 별도의 테이블에 저장하고, 해당 테이블과 원래 테이블 간의 관계를 생성합니다. 즉 정규화를 하는 것인데 이를 통해 배열 요소의 개별 검색, 수정, 추가가 용이해지는 장점이 있지만, 배열의 크기가 크거나 굳이 정규화를 하지 않아도 될 경우에도 정규화를 하게 되면 성능 문제가 발생할 수 있습니다.
때문에 배열 그대로 테이블에 집어넣는 방법에 대해서 알아보도록 하겠습니다.
문자열로 저장하는 방법
`배열 자료형`을 `문자열`로 변환하고, 그대로 테이블에 문자열 컬럼으로 저장해버리는 방법입니다.
배열을 넣을 때는 문자열로 변환하여 저장하고, 가져올 때는 문자열을 불러와 파싱하여 배열 자료형으로 만들어 사용하면 됩니다.
1) org.json 라이브러리
의존성 추가
dependencies {
implementation 'org.json:json:20200518'
}
코드
// 배열 ➔ JSON 문자열
JSONArray jsonArray = new JSONArray(arrayData); // arrayData: {"1", "2", "3", "4", "5"}
String jsonString = jsonArray.toString(); // jsonString: ["1", "2", "3", "4", "5"]
// JSON 문자열 ➔ 배열
JSONArray jsonArray = new JSONArray(jsonString);
String[] arrayData = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
arrayData[i] = jsonArray.getString(i);
}
org.json 라이브러리에서는 JSONObject는 map, JSONArray는 vector 처럼 쓰면 된다 생각하면 됩니다.
참고. JSON 형식으로 만드는 예제
public class TEST { public static void main(String[] args) throws JSONException { JSONArray array = new JSONArray(); array.put("apple"); array.put("banana"); array.put("orange"); JSONObject obj = new JSONObject(); obj.put("fruits", array); System.out.println(obj); // {"fruits":["apple", "banana", "orange"]} } }
2) com.fasterxml.jackson 라이브러리
코드
List<String> array = new ArrayList<>();
// 배열 ➔ JSON 문자열
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(array); // jsonString: ["1", "2", "3", "4", "5"]
// JSON 문자열 ➔ 배열
ObjectMapper objectMapper = new ObjectMapper();
String[] arrayData = objectMapper.readValue(jsonString, String[].class);
JSON 배열로 바꾸는 방법은 위와 같은 라이브러리 말고도 Gson 라이브러리 등도 있습니다.
JSON 형식으로 저장하는 방법
MySQL Ver.5.7.8 / MariaDB Ver.10.2 이상에서는 JSON 데이터 유형을 지원합니다. 배열을 JSON 형식으로 저장하면 배열의 구조와 값을 유지할 수 있습니다. 물론 배열 뿐만 아니라 객체도 지원합니다.
CREATE TABLE demo_table (
id INT PRIMARY KEY,
json_data JSON
);
INSERT INTO demo_table (id, json_data) VALUES (1, '[1, 2, 3, 4, 5]');
INSERT INTO demo_table (id, json_data) VALUES (1, json_object('Name', 'Kim', 'Age', '30'));
위 코드는 단순히 JSON 형식의 데이터를 선언하고 테이블에 값을 INSERT하는 예시입니다. 자세한 JSON 형식 사용 방법은 추후에 포스팅하도록 하겠습니다.
반응형
'DBMS > SQL, RDBMS' 카테고리의 다른 글
SQL Transaction(트랜잭션): 데이터의 정합성을 보장하기 위한 방법 (1) | 2024.01.23 |
---|---|
SQL 조회 성능을 위한 인덱스(Index) (1) | 2024.01.22 |
[MySQL] port 변경하기 (0) | 2022.10.05 |
Maria DB 설치 (0) | 2022.10.04 |
[MyBatis + MySQL] INSERT 시 PK값 가져오기 (0) | 2022.09.27 |