[project] 미니프로젝트 03/07 Insert all만 써서 넣을 수 없는 데이터, for과 if써서 입력하기

kafa·2023년 3월 7일
0

프로젝트

목록 보기
5/6

계획 수정

수정의 연속이다. 지금도 수정 중이다.

당장 날씨데이터를 가져오지 못하는 관계로 처음엔 1일 단위로 출력하려던 날씨데이터를 새롭게 변경해 지역별, 날짜별로 24시간 1시간 간격으로 넣기로 결정했다.

정말 api연동이 절실한 순간이었다. 난 아직 근데 api가 뭔지 잘 모르겠다. 나중에 알게 되겠지.

하나하나 다 일일이 타이핑해서 넣기에는 지역 3개 하루치만 넣어도 무려 96개가 된다. 도저히 그렇게 할 자신이 없어서 방법을 찾아보기로 했다.

설계

  1. 지역별 24행 일괄추가
  2. 날짜를 해부해서 1시간단위로 for문 돌려서 넣자
  3. 기온은 임의로 넣을거니까 if문을 사용해서 시간대에 따라 변화를 주자

1. 일괄추가

INSERT ALL을 사용했다.

-- 일괄추가
INSERT ALL
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 1, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 2, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 3, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 4, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 5, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 6, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 7, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 8, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 9, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 10, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 11, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 12, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 1, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 2, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 3, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 4, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 5, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 6, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 7, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 8, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 9, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 10, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 11, 38)
INTO WEATHER1 (code, regdate, weather, temperature, no)
values(func_SEQ_WEATHER1_CODE_nextval, CURRENT_DATE, '비', 12, 38)
SELECT * FROM DUAL;

다 하고 나서 자바에 기능을 만들어뒀다는 걸 떠올렸다.
바쁜 와중에 거기서 다시 돌렸는데 안돌아갔다. mapper에 형식이 틀렸더라. 아직 못고쳤다.

2-1. [oracle] 날짜에 시간만 임의의 1시간 단위로 증가시키기

00~23시 24행에 알맞게 들어가야한다.

-- 우리가해냄 
UPDATE WEATHER1 
SET regdate = TO_DATE('2023-08-06-01', 'YYYY-MM-DD-HH24') 
WHERE CODE = 26;

한 이틀은 걸린것 같다.

TO_DATE를 사용해 date를 해부하고 code(날씨고유키)로 걸렀다.
no(지역넘버)로 하기엔 데이터에 불순물이 너무 많았다.

2-2. [java] 날짜에 시간만 임의의 1시간 단위로 증가시키기

mapper

@Update({ " UPDATE WEATHER1 SET regdate = TO_DATE(#{regdate}, 'YYYY-MM-DD-HH24') WHERE code = #{code} " })
	public int weatherUpdateHour(Weather w);

Junit test

// 시간 업데이트
	@Test
	void weatherUpdateHour() {
		for (int i = 1; i <= 24; i++) {
			Weather w = new Weather();
			w.setCode(34 + i);
			if (i < 10) {
				w.setRegdate2("2023-03-06-0" + i);
			} else {
				w.setRegdate2("2023-03-06-" + i);
			}
			System.out.println(mapper.weatherUpdateHour(w));
		}
	}

for문을 두번 돌릴 뻔했는데 훨씬 간단한 방법이 있었다.
w.setCode(34 + i);

3-1. [sql] 시간에 따라 기온 바꾸기

날짜를 하고나니 기온은 쉬웠다.

UPDATE WEATHER1 
SET temperature = 9.5 
WHERE code = 49;

3-2. [java] 시간에 따라 기온 바꾸기

mapper

@Update({ " UPDATE WEATHER1 SET temperature = #{temperature} WHERE code = #{code} " })
	public int weatherUpdateTemp(Weather w);

Junit test

// 날씨 업데이트
	@Test
	void weatherUpdateTemp() {
		for (int i = 1; i <= 24; i++) {
			Weather w = new Weather();
			w.setCode(34+i);
			if (i < 7) {
				w.setTemperature(9.7f);
			} else if (i >= 7 && i <= 12) {
				w.setTemperature(18f);
			} else if (i >= 11 && i <= 18) {
				w.setTemperature(22.9f);
			} else if (i >= 19 && i <= 24) {
				w.setTemperature(15f);
			}
			System.out.println(mapper.weatherUpdateTemp(w));
		}
	}
profile
kafa is kafa. not be something other.

0개의 댓글