선택한 콘텐츠ID값을 잘 불러오는걸 확인했다!
이제 processCodeApi 페이지처럼 체크박스 넣고, 체크박스에 해당하는 공공데이터를 DB에 저장하면 끝!
DB에 저장 이라는 체크박스랑 뒤로가기 버튼정도 만들어서 추가했다. 이제 값들만 잘 db로 넘기면 된다.
DB에 저장 버튼을 누르면 inputDB.jsp가 실행되게 했다.
1. 전 페이지에서 입력받은 콘텐츠ID를 가져오게 한 후 →
(쉼표로 여러개 받으면 배열로 변환 후 공백은 제거)
// 사용자가 선택한 콘텐츠 ID 리스트 가져오기
String contentIds = request.getParameter("selectedContentIds"); // 콘텐츠ID 가져오기
if (contentIds == null || contentIds.isEmpty()) { // 없으면 out.println
out.println("<p>콘텐츠 ID를 선택해 주세요.</p>");
return;
}
String[] contentIdArray = contentIds.split(","); // 쉼표로 구분된 콘텐츠 ID 문자열을 배열(String[]) 로 변환
// 세션에서 'detailItemList'를 가져옴
List<Map<String, String>> detailItemList = (List<Map<String, String>>) request.getSession().getAttribute("detailItemList");
2. DBCP를 통해 DB랑 연결시키고 테이블 생성 →
테이블 생성 이름은 hotplace고 각각 해당하는 값을 넣어줬다.
// 테이블 생성 SQL 테이블 이름 = hotplace
String createTableSQL = "CREATE TABLE IF NOT EXISTS hotplace ("
+ "id INT AUTO_INCREMENT PRIMARY KEY," //id는 auto_increment
+ "contentid VARCHAR(255) NOT NULL," // 콘텐츠id
+ "title VARCHAR(255)," // 제목
+ "addr1 VARCHAR(255)," // 주소
+ "overview TEXT," // 설명
+ "mapx DOUBLE," // 경도
+ "mapy DOUBLE," // 위도
+ "firstimage VARCHAR(255)," // 이미지 url
+ "areacode VARCHAR(255)" // 지역코드
+ ")";
// 테이블 생성 실행
pstmt = conn.prepareStatement(createTableSQL); // createTableSQL 준비!
pstmt.executeUpdate(); // sql 실행해서 테이블 생성, 있으면 안함
out.println("<p>테이블 확인!</p>"); // 성공 메세지
id값은 자동으로 증가되게 했고, 필요한 값들을 다 넣어줬다. 그러고 테이블 생성 실행!
(contentid, title, addr1, overview, mapx, mapy, firstimage, areacode)
3. contentId로 불러온 값들을 DB에 insert → 끝!
// 선택된 콘텐츠 ID들을 데이터베이스에 삽입하기 위한 SQL
String insertSQL = "INSERT INTO hotplace (contentid, title, addr1, overview, mapx, mapy, firstimage, areacode) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
pstmt = conn.prepareStatement(insertSQL); // inserSQL 준비!
// 사용자가 선택한 콘텐츠 데이터를 삽입
for (String contentId : contentIdArray) { //for문으로 반복돌리자 contentIdArray의 각 콘텐츠 ID에 대해 반복
contentId = contentId.trim(); //공백을 제거하여 콘텐츠 ID를 정리.
// detailItemList에서 contentId에 맞는 데이터를 찾기
for (Map<String, String> detailData : detailItemList) { // detailItemList의 각 데이터에 대해 반복
if (contentId.equals(detailData.get("contentid"))) { // 현재 contentId와 같은 데이터를 찾았을 경우
// 데이터 삽입 준비
pstmt.setString(1, contentId); // 자동 증가 Id값 ? = 1
pstmt.setString(2, detailData.get("title")); // 실제 title 데이터 ? = 2
pstmt.setString(3, detailData.get("addr1")); // 실제 addr1 데이터 ? = 3
pstmt.setString(4, detailData.get("overview")); // 실제 overview 데이터 ? = 4
pstmt.setDouble(5, Double.parseDouble(detailData.get("mapx"))); // 실제 mapx 데이터 ? = 5
pstmt.setDouble(6, Double.parseDouble(detailData.get("mapy"))); // 실제 mapy 데이터 ? = 6
pstmt.setString(7, detailData.get("firstimage")); // 실제 이미지 URL 데이터 ? = 7
pstmt.setString(8, detailData.get("areacode")); // 실제 지역 코드 데이터 ? = 8
// 데이터 삽입 실행
pstmt.executeUpdate();
break; // 해당 contentId에 맞는 데이터를 찾으면 루프 종료
insertSQL로 hotplace 테이블에 넣게 만들었다.
처음부터 점검하고 쭉 해봤다.
흐름은 inputApi → processCodeApi → processDetailApi → inputDB!
1. 충남사람이니까 충남으로 지역 검색!
2. 나온 20개 전체선택해서 상세정보 얻기
3. 나온 20개 전체선택해서 상세정보 얻기
4. DB에 저장하고 테이블 확인
result = 저장됐다!!!!!!!!! 이제 기쁜 마음으로 잘 수 있다!!
다음 할일 : 페이지 중간에 있는 구글 맵 API에 위도와 경도를 DB에서 받아서 마커 표시하기
'Develop > JSP' 카테고리의 다른 글
핫플 페이지 마무리 겸 정리하기 (1) (10) | 2024.10.06 |
---|---|
페이지 댓글 구현하기 (4) | 2024.10.03 |
공공데이터 API JSP에 적용하기, DB 저장하기 (4) (3) | 2024.09.28 |
공공데이터 API JSP에 적용하기, 조회+DB 저장하기 (3) (1) | 2024.09.28 |
공공데이터 API JSP에 적용하기 (2) (3) | 2024.09.23 |