JDBC 기본 방법으로 DB연결하기
이클립스 sql 편집기 실행
쿼리문 저장경로
주석 : ctrl+/
실행 : alt + x
product.sql
-- private String productId; //상품 아이디
-- private String pname; //상품
-- private Integer unitprice; //상품가격
-- private String description; //상품 설명
-- private String menufecturer; //제조사
-- private String category; //분류
-- private long numberOfstock; //재고 수
-- private String condition; //신상품 or 중고품 or 재생품
-- private String filename; //제품이미지
-- product 테이블 생성
drop table if exists product;
create table product(
productId varchar(10) not null,
pname varchar(20),
unitprice integer,
description varchar(200),
menufecturer varchar(20),
category varchar(20),
numberOfstock long,
conditions varchar(20),
filename varchar(200),
primary key(productId)
)default charset=utf8mb4;
-- DAO ProductRepository.java
-- Product phone = new Product("P1234", "iPhone 12 Pro Max", 1490000);
-- phone.setDescription("6.7-unch, 2778*1284-pixel, OLED Super Retina XDR display, cameras");
-- phone.setCategory("Smart Phone");
-- phone.setMenufecturer("Apple");
-- phone.setUnitprice(1490000);
-- phone.setNumberOfstock(7000);
-- phone.setCondition("New");
-- phone.setFilename("iphone-12-pro-max-gold-hero.jpg");
insert into product values("P1234", "iPhone 12 Pro Max", 1490000,
"6.7-unch, 2778*1284-pixel, OLED Super Retina XDR display, cameras",
"Apple",
"Smart Phone",
7000,
"New",
"iphone-12-pro-max-gold-hero.jpg");
-- DAO ProductRepository.java
-- Product notebook = new Product("P1235", "LG 울트라 기어", 1930000);
-- notebook.setDescription("15-unch, 1920*1080-pixel, IPS LED display, 10세대 인텔 코어 i7-10510U 프로세서");
-- notebook.setCategory("notebook");
-- notebook.setMenufecturer("LG");
-- notebook.setUnitprice(1930000);
-- notebook.setNumberOfstock(5000);
-- notebook.setCondition("Refurbished");
-- notebook.setFilename("usp_0103.jpg");
insert into product values("P1235", "LG 울트라 기어", 1930000,
"15-unch, 1920*1080-pixel, IPS LED display, 10세대 인텔 코어 i7-10510U 프로세서",
"LG",
"notebook",
5000,
"Refurbished",
"usp_0103.jpg");
-- DAO ProductRepository.java
-- Product tablet = new Product("P1236", "갤럭시 탭 S7+", 1149500);
-- tablet.setDescription("12-unch, 2800*1752-pixel, Super AMOLED display, Octa-Core 프로세서");
-- tablet.setCategory("Tablet");
-- tablet.setMenufecturer("SAMSUNG");
-- tablet.setUnitprice(1149500);
-- tablet.setNumberOfstock(3000);
-- tablet.setCondition("Old");
-- tablet.setFilename("b008b623-6fe8-4191-82bd-d988db87e6e6.jpg");
insert into product values("P1236", "갤럭시 탭 S7+", 1149500,
"12-unch, 2800*1752-pixel, Super AMOLED display, Octa-Core 프로세서",
"SAMSUNG",
"Tablet",
3000,
"Old",
"b008b623-6fe8-4191-82bd-d988db87e6e6.jpg");
실행 : alt + x
생성확인 DBever
dao에 있던 더미데이터를 DB에 insert하기
DAO ProductRepository.java
product.sql
DBever 확인
이클립스 화면
DB연동 위해서 파일 추가
dbconn.jsp
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 상품 조회, 등록, 수정, 삭제하기 (DB연동) -->
<%
try {
Connection conn = null;
String url = "jdbc:mysql://localhost:3306/webstoredb?serverTimezone=UTC";
String user = "root";
String password = "7496";
Class.forName("com.mysql.cj.jdbc.Driver"); //드라이버명
DriverManager.getConnection(url, user, password); //연결객체생성
System.out.println("데이터베이스 연결 되었습니다.");
}catch(SQLException e) {
System.out.println("데이터베이스 연결 실패했습니다.");
e.printStackTrace();
}
%>
메뉴 만들기
기존 메뉴에서 내용추가
메뉴 가로로 나오게 만들기 - 부트스트랩 css 적용
menu.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<nav class="navbar navbar-expand navbar-dark bg-dark"><!-- 네비게이션 바를 만듬 -->
<div class="container"> <!-- container라는 클래스부터 내용을 표시함 -->
<div class="navbar-header"> <!-- 네비게이션 헤더 -->
<a class="navbar-brand" href="./welcome.jsp">HOME</a>
</div>
<!-- 네비게이션 바 요소를 추가등록 -->
<div>
<ul class="navbar-nav mr-auto"> <!-- mr-auto : 마진공간 자동설정 -->
<li class="nav-item"><a href="products.jsp" class="nav-link">상품목록</a></li>
<li class="nav-item"><a href="addProduct.jsp" class="nav-link">상품등록</a></li>
<li class="nav-item"><a href="#" class="nav-link">상품수정</a></li>
<li class="nav-item"><a href="#" class="nav-link">상품삭제</a></li>
</ul>
</div>
</div>
</nav>
연동 순서 참고
수정
DB연결 추가
products.jsp
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.text.DecimalFormat"%>
<%@page import="kr.gov.dao.ProductRepository"%>
<%@page import="kr.gov.dto.Product"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- <jsp:useBean id="productDAO" class="kr.gov.dao.ProductRepository" scope="session"/> --%>
<%
request.setCharacterEncoding("UTF-8");
DecimalFormat dfFormat = new DecimalFormat("###,###"); //숫자 천단위 구분 표시
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>상품 목록</title>
<!-- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css"> -->
<link rel="stylesheet" href="./resources/css/bootstrap.min.css">
</head>
<body>
<jsp:include page="menu.jsp"/>
<div class="jumbotron">
<div class="container">
<h1 class="display-3">상품 목록</h1>
</div>
</div>
<%--
<%
//싱글톤 객체사용
ProductRepository dao = ProductRepository.getInstance();
//상품목록 가져옴
ArrayList<Product> listOfProducts = dao.getAllProducts();
%>
--%>
<div class="container">
<div class="row" align="center">
<%-- <%@ include file="dbconn.jsp" %> --%>
<%
/*
for(int i = 0; i<listOfProducts.size(); i++){
Product product = listOfProducts.get(i);
*/
Connection conn = null;
String url = "jdbc:mysql://localhost:3306/webstoredb?serverTimezone=UTC";
String user = "root";
String password = "7496";
Class.forName("com.mysql.cj.jdbc.Driver"); //드라이버명
conn = DriverManager.getConnection(url, user, password); //연결객체생성
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "select * from product";
pstmt = conn.prepareStatement(sql); /* Connection객체에 쿼리문을 넘겨주고 prepareStatement를 얻음 */
rs = pstmt.executeQuery(); /* 쿼리문 결과 받아옴 */
while(rs.next()) {
%>
<div class="col-md-4">
<!-- 경로를 지정해서 이미지를 출력 -->
<%-- <img alt="" src="C:/workspace-jsp/upload/<%=product.getFilename() %>" style="width:100%"> --%>
<img alt="" src="${pageContext.request.contextPath}/resources/images/<%=rs.getString("filename") %>" style="width:100%">
<h3><%=rs.getString("pname") %></h3>
<p><%=rs.getString("description") %></p>
<p><%=dfFormat.format(Integer.parseInt(rs.getString("unitprice"))) %>원</p>
<p><a href="./product.jsp?id=<%=rs.getString("productId") %>"
class="btn btn-secondary" role="button">상세 정보 »</a></p>
</div>
<%
}
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
%>
</div>
<hr>
</div>
<jsp:include page="footer.jsp"/>
</body>
</html>