순조롭지 않음
해당페이지를 만들려고 한다.
해당페이지에서 지역과 시간 두개로 정했던 콤보박스는 지역, 날짜, 시간 3개를 받아오는 것으로 수정되었다.
mapper에 insert, select, update, delete 다 넣었지만, 기능은 항상 부족하다.
해당 페이지에서 사용자가 지역을 설정하고 본인이 확인하고자 하는 날짜와 시간을 선택하려면
SELECT no FROM WEATHER1 WHERE no = 30;
SELECT TO_CHAR(regdate, 'YYYY-MM-DD') 날짜 FROM WEATHER1 WHERE no = 30;
SELECT TO_CHAR(regdate, 'HH24') 날짜 FROM WEATHER1 WHERE no = 30;
sql문은 일단 이렇게 적어뒀다.
그리고 이 세가지를 가지고 뷰를 만들었는데
CREATE OR REPLACE VIEW WEATHER1_LOCATION1_VIEW AS
SELECT
L.name,
W.no, TO_CHAR(regdate, 'YYYY-MM-DD') w_date, TO_CHAR(regdate, 'HH24') w_hour
FROM LOCATION1 L, WEATHER1 W
WHERE L.no = W.no;
나중에 쓸 일이 있을까 해서 만들었다.
VIEW를 만들때 SELECT에 TO_CHAR를 추가할때 W.TO_CHAR라고 써서 오류가 떴다.
SELECT TO_CHAR(regdate, 'HH24') 날짜 FROM WEATHER1 WHERE no = 30;
만드는데 순서는 상관없으니까 먼저 시간을 select하는 기능을 만들었다.
mapper
@Select({ " SELECT TO_CHAR(regdate, 'HH24') FROM WEATHER1 WHERE no = #{no} " }) public List<Weather> weatherSelectDATE(Weather w);
Junit test
@Test void weatherSelectDATE() { Weather w = new Weather(); List<Weather> list = mapper.weatherSelectDATE(w); for (Weather obj : list) { w.setNo(30); System.out.println(obj.toString()); } }
깃헙에서 받아서 개인브랜치에 넣은 뒤 자꾸 같은 오류가 났는데 "테이블 혹은 뷰가 없다" 였다. 기존에 사용하던 개인 DB를 연결해 둔 MyBatis가 문제였다. DB경로를 바꿔주니 해결되었다.
그리고 지금은
이렇게만 뜬다.
어째서
대체 왜
null값이라는 건 값을 못 가져왔다는 거 아닌가.
왜 못가져왔지?
mapper
// 시간가져오기 @Select({ " SELECT TO_CHAR(regdate, 'HH24') FROM WEATHER1 WHERE no = #{no} " }) public List<Weather> weatherSelectHOUR(int no); // //날짜가져오기 @Select({ " SELECT TO_CHAR(regdate, 'YYYY-MM-DD') A FROM WEATHER1 WHERE no = #{no} " }) public List<Weather> weatherSelectDATE(int no); // //뷰가져오기? @Select({ " SELECT wv.* FROM WEATHER1_LOCATION1_VIEW wv " }) public List<Map<String, Object>> weatherSelectWV();
뭐라도 되라는 심정으로 셋 다 만들어 봤다.
Junit test
@Test void weatherSelectWV() { List<Map<String, Object>> list = mapper.weatherSelectWV(); for(Map<String, Object> map : list) { System.out.println(map); } }
뷰는 돌아간다!
어째서?
아무래도 TO_CHAR() 부분이 문제가 아닐까 싶다.
수업시간에 이런 함수를 mybatis에서 어떻게 취급했는지 기억이 안난다.
.
.
..
어?
// 성별에 따른 구매수량 조회 (map)
@Select({
" SELECT usergender, COUNT(*), SUM(total)",
" FROM purchaseview1 ",
" GROUP BY usergender " })
public List<Map<String, Object>> selectPurchaseGroupByGender();
설마 GROUP BY를 써야했나?
SELECT TO_CHAR(regdate, 'HH24') FROM WEATHER1 GROUP BY no;
아닌것 같다.
...
근데.. 도중에 이런게 떴다.
IO 오류: The Network Adapter could not establish the connection
내가 mapper에 @mapper를 임포트하지 않아서 나는 오류였다.
:) 짱인데
근데 이걸 고친다고 내 weatherSelectHOUR와 weatherSelectDATE가 돌아가는 건 아니었다.
둘다 짜고치듯 null만 뜬다. 24행이 null만 뜬다.
view는 잘 뜨는데... 이것만 가지고 어떻게 해 볼수는 없나.
JFrame이 안익숙해서 이걸 가지고 뭘 할 수 있을지 잘 가늠이 안간다.
{NO=37, W_DATE=2023-03-06, W_HOUR=17, NAME=세종특별자치시}
{NO=37, W_DATE=2023-03-06, W_HOUR=18, NAME=세종특별자치시}
{NO=37, W_DATE=2023-03-06, W_HOUR=19, NAME=세종특별자치시}
{NO=37, W_DATE=2023-03-06, W_HOUR=20, NAME=세종특별자치시}
{NO=37, W_DATE=2023-03-06, W_HOUR=21, NAME=세종특별자치시}
그래도 지역, 시간, 날짜 다 뜨는데 이거 칼럼 어찌저찌해서 쓸 수 없으려나.
내일 해봐야겠다.
아무리봐도 TO_CHAR가 문제인것 같은데...