데이터베이스 긁어올때

헤이베이지 HeyBeige

·

2021. 3. 23. 17:43

package com.sist.dao;
 
import lombok.Getter;
import lombok.Setter;
 
/*
NO     NOT NULL NUMBER        
TITLE   NOT NULL VARCHAR2(300) 
SUBJECT NOT NULL VARCHAR2(300) 
POSTER  NOT NULL VARCHAR2(260) 
LINK    NOT NULL VARCHAR2(260) 
 */
 
@Getter
@Setter
public class FoodCategoryVO {
    private int no;
    private String title;
    private String subject;
    private String poster;
    private String link;
}
 
cs
package com.sist.dao;
import java.util.*;
import java.sql.*;
import com.sist.jdbc.*;
 
//DBCP => 웹에서만 가능
public class FoodDAO {
    private DAOManager dm = new DAOManager();
    private Connection conn;
    private PreparedStatement ps;
    public void foodCategoryInsert(FoodCategoryVO vo)
    {
        try 
        {
            conn=dm.getConnection();
            System.out.println("conn:"+conn);
            String sql = "INSERT INTO food_category VALUES("
                       + "(SELECT NVL(MAX(no)+1,1) FROM food_category),?,?,?,?)";
            ps=conn.prepareStatement(sql);
            ps.setString(1, vo.getTitle());
            ps.setString(2, vo.getSubject());
            ps.setString(3, vo.getPoster());
            ps.setString(4, vo.getLink());
            
            //실행
            ps.executeUpdate(); //Commit
            
            
            
            
            
        } 
        catch (Exception e) {e.printStackTrace();    }
        finally
        {
            dm.disConnection(conn, ps);
        }
    }
    
    public List<FoodCategoryVO> foodCategoryData(int index)
    {
        List<FoodCategoryVO> list = new ArrayList<FoodCategoryVO>();
        try 
        {
            conn =dm.getConnection();
            int start = 0;
            int end = 0;
            if(index==1)
            {
                start=1;
                end=12;
            }
            else if (index==2)
            {
                start=13;
                end=18;
            }
            else
            {
                start=19;
                end=30;
            }
            String sql = "SELECT * FROM food_category "
                       + "WHERE no BETWEEN ? AND ?";
            ps = conn.prepareStatement(sql);
            ps.setInt(1, start);
            ps.setInt(2, end);
            
            ResultSet rs = ps.executeQuery();
            while(rs.next())
            {
                FoodCategoryVO vo = new FoodCategoryVO();
                vo.setNo(rs.getInt(1));
                vo.setTitle(rs.getString(2));
                vo.setSubject(rs.getString(3));
                vo.setPoster(rs.getString(4));
                vo.setLink(rs.getString(5));
                
                list.add(vo);
            }
        } 
        catch (Exception e) 
        {        
            e.printStackTrace();
        }
        finally
        {
            dm.disConnection(conn, ps);
        }
        return list;
        
    }
}
cs
package com.sist.dao;
 
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
 
/*
NO     NOT NULL NUMBER        
TITLE   NOT NULL VARCHAR2(300) 
SUBJECT NOT NULL VARCHAR2(300) 
POSTER  NOT NULL VARCHAR2(260) 
LINK    NOT NULL VARCHAR2(260)
 
 */
 
public class FoodManager {
    
    private FoodDAO dao =new FoodDAO();
    
    public void foodCategoryData()
    {
        try 
        {
            int k=1//카테고리 번호
            //연결 => 소스읽기
            Document doc = Jsoup.connect("https://www.mangoplate.com/").get();
            //System.out.println(doc);
            Elements title = doc.select("div.toplist-slider span.title"); //CSS 선택자
            Elements poster = doc.select("div.toplist-slider img.center-croping");
            Elements subject = doc.select("div.toplist-slider p.desc");
            Elements link = doc.select("div.toplist-slider a");
            
            for(int i=0;i<title.size();i++)
            {
                System.out.println("번호: "+k);
                System.out.println("제목: "+title.get(i).text());
                System.out.println("부제목: "+subject.get(i).text());
                System.out.println("이미지: "+poster.get(i).attr("data-lazy"));
                System.out.println("링크: https://www.mangoplate.com"+link.get(i).attr("href"));
                System.out.println("==========================================");
                
                FoodCategoryVO vo = new FoodCategoryVO();
                vo.setTitle(title.get(i).text());
                vo.setSubject(subject.get(i).text());
                vo.setPoster(poster.get(i).attr("data-lazy"));
                vo.setLink("https://www.mangoplate.com"+link.get(i).attr("href"));
                dao.foodCategoryInsert(vo);
                k++;
            }
        }
        catch 
        (Exception e) 
        { 
            e.printStackTrace();
            }
    }
    public static void main(String[] args) {
        FoodManager fm = new FoodManager();
        fm.foodCategoryData();
    }
      
}
cs
package com.sist.jdbc;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
 
public class DAOManager {
 
    private Connection conn;
    private PreparedStatement ps;
    private final String URL = "jdbc:oracle:thin:@localhost:1521:XE";
 
    public DAOManager() {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (Exception ex) {
        }
    }
 
    public Connection getConnection() {
        try {
            conn = DriverManager.getConnection(URL, "hr""happy");
        } catch (Exception ex) {
        }
        return conn;
    }
 
    public void disConnection(Connection conn,PreparedStatement ps) {
        try {
            if (ps != null)
                ps.close();
            if (conn != null)
                ps.close();
        } catch (Exception ex) {
        }
    }
}
cs

jsp파일

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<style type="text/css">
.row{
    width: 960px;
    margin: 0px auto;
}
</style>
 
</head>
<body>
    <jsp:include page="header.jsp"></jsp:include>
    <div style="height: 30px"></div>
    <div class="container">
        <jsp:include page="home.jsp"></jsp:include>
    </div>
</body>
</html>
 
cs

header.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <div class="navbar-header">
      <class="navbar-brand" href="#">WebSiteName</a>
    </div>
    <ul class="nav navbar-nav">
      <li class="active"><a href="#">Home</a></li>
      <li><a href="#">Page 1</a></li>
      <li><a href="#">Page 2</a></li>
      <li><a href="#">Page 3</a></li>
    </ul>
  </div>
</nav>
</body>
</html>
cs

home.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="com.sist.dao.* , java.util.*"%>
<%
String index = request.getParameter("index");
if(index==null)
{
    index="1";
}
FoodDAO dao = new FoodDAO();
List<FoodCategoryVO> list = dao.foodCategoryData(Integer.parseInt(index));
 
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <div class="row">
        <a href="main.jsp?index=1" class="btn btn-sm btn-danger">믿고 보는 맛집리스트</a> 
        <a href="main.jsp?index=2" class="btn btn-sm btn-success">지역별 인기 맛집</a> 
        <a href="main.jsp?index=3" class="btn btn-sm btn-primary">메뉴별 인기 맛집</a>
    </div>
 
    <div class="row">
        <%
        for (FoodCategoryVO vo : list) 
        {
        %>
 
        <div class="col-md-4">
            <div class="thumbnail">
                <a href="#"> 
                <img src="<%=vo.getPoster() %>" alt="Lights" style="width: 100%">
                    <div class="caption">
                        <p><%=vo.getTitle()%></p>
                    </div>
                </a>
            </div>
        </div>
 
        <%
        }
        %>
    </div>
</body>
</html>
cs

 

<Context docBase="JSPBasicProject05" path="/JSPBasicProject05" reloadable="true" source="org.eclipse.jst.jee.server:JSPBasicProject05">
          <Resource
               auth="Container"
               driverClassName="oracle.jdbc.driver.OracleDriver"
               url="jdbc:oracle:thin:@localhost:1521:XE"
               username = "hr"
               password = "happy"
               name="jdbc/oracle"
               maxActive = "10"
               maxIdle="5"
               maxWait="-1"
               type="javax.sql.DataSource"
               
          />
</Context>
cs