본문 바로가기
Develop/JSP

공공데이터 API JSP에 적용하기, DB 저장하기 (최종)

by ys2ys2 2024. 9. 28.

선택한 콘텐츠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. 충남사람이니까 충남으로 지역 검색!

inputApi


2. 나온 20개 전체선택해서 상세정보 얻기

processCodeApi

 


3. 나온 20개 전체선택해서 상세정보 얻기

processDetailApi


4. DB에 저장하고 테이블 확인

insertDB
새로고침 하기 전 table
정상으로 저장됐다!

 

 

result = 저장됐다!!!!!!!!! 이제 기쁜 마음으로 잘 수 있다!!

 

다음 할일 : 페이지 중간에 있는 구글 맵 API에 위도와 경도를 DB에서 받아서 마커 표시하기