유디의 공간정보·개발일기

5. 0813_session, Collection, sql문 연동 본문

JSP & Servlet

5. 0813_session, Collection, sql문 연동

55yudi 2021. 8. 13. 17:51

JSP Model1 & Model2
- 웹 애플리케이션의 뼈대 --> 소프트웨어 아키텍쳐
- 서블릿이 모든 요청을 받아서 처리한다 = Model2

- 어제는 2.5 버전으로 만들고 web.xml생성이 돼서 여기에서 url 형태를 지정했음
<url-pattern>*.do</url-pattern>
- 오늘은 3.1 버전으로 만들고 web.xml생성 안함
 대신 url형태를 @WebServlet("/MainController")의 ()안에 지정하면 된다.
@WebServlet("*.do")



과제3(과일목록) + myservlet2 > webapp > first2.jsp, result2.jsp
로직(무엇을 해야 하는지 말하기) + 코드
seesion
HashSet

- 세션 초기화

//세션 전부 삭제시
session.invalidate();
//세션에서 key값을 제거할 때
session.removeAttribute(String key);

 

- 세션 유지

//문자열로 지정되는 key값에 해당하는 세션값을
//Object형으로 설정해 줌
setAttribute(String key, Object value);
//세션으로 설정된 값 중에 key에 해당하는 값을 가져오며,
//값이 없을 경우 null을 리턴한다.
getAttribute(String key);

- Java Collection의 주요 인터페이스 : List, Map, Set --> [Java]Collection 게시물 [JAVA] Collection : List, Set, Map


- 인터페이스를 구분하는 가장 중요한 개념은 '순서', '데이터의 중복여부'
List : 순서O, 데이터중복O / add로 넣고 인덱스[]로 가져온다. / List인터페이스를 구현한 클래스 : ArrayList, AttributeList, LinkedList, Stack 등
Set : 순서X, 데이터중복X / 중복해서 관리하지 않도록 할 때 사용 / Set인터페이스 구현하는 클래스 : HashSet, Linked HashSet, TreeSet
Map : Key&Value 저장, Key중복 X, Value중복 O / 구현하는 클래스 : HashMap, TreeMap, LinkedHashMap, Hashtable
KeySet : 맵의 목록


오라클 sql
DDL
- 테이블을 생성하고
- 직접 값을 insert
- 테이블 생성시 기본키와 외래키 주의해서 적을 것

 

-- 두 개 이상의 테이블이 연동될 때 --

-- 주문아이템과 주문
-- 하나의 주문에서 여러 아이템을 주문한다.
-- 주문번호, 주문일자(date), 주문고객아이디 이다.
-- 주문번호, 아이템번호, 아이템명, 주문수량(number)
-- 테이블과 컬럼
-- 하나의 테이블? 여러 테이블에 들어갈까?
   -- 테이블 : 엑셀시트
create table edu_order ( --테이블 생성--
  order_no varchar2(50), --컬럼들--
  order_date date,
  customer_id varchar2(100),
  primary key (order_no) --기본키 지정해 줘야 한다--
);
drop table edu_order;
insert into edu_order(order_no, order_date, customer_id) values('1111', sysdate, 'c-001');
select * from edu_order;

-- sqlplus로 커맨드창을 열어서 데이터를 조회해보면 없을 것이다.
-- 거기서도 데이터가 조회되게 하려면? --> Commit; 사용
create table edu_order_item (
  order_no varchar2(50),
  item_no varchar2(100),
  item_name varchar2(100),
  amount number(5),
  primary key (order_no, item_no), --Primary Key가 두 개 이상의 키로 구성될 수 있다.--
  foreign key (order_no) references edu_order (order_no)
);
select * from edu_order;
insert into edu_order_item(order_no, item_no, item_name, amount)
  values('1111', 'i-13', 'iphone13', 10);
select * from edu_order_item;

drop table edu_order_item;

commit;

eclipse
+ OrderDAO.java + JDBC 커넥션 데이터 연동시키기

package myweb3;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class OrderDAO {

	//주문생성, 주문 메서드
	//이름, 매개변수, 리턴타입
	//이름 : order,
	//매개변수 : OrderVO (전달받을 데이터가 여러개이므로 하나로 객체화해주기)
	//리턴타입 : 
	public boolean order(OrderVO vo) throws Exception {
		boolean result = false;
		
		Class.forName("oracle.jdbc.driver.OracleDriver");
		Connection con = DriverManager.getConnection(
				"jdbc:oracle:thin:@localhost:1521:xe","hr","hr");
							
		System.out.println(con.getClass().getName());
		String sql = "insert into edu_order(order_no, order_date, customer_id)"
				+ "values(?, ?, ?)";
		PreparedStatement stmt = con.prepareStatement(sql);
		stmt.setString(1, vo.orderNo);
		Date date = new Date(vo.orderDate.getTime());
		stmt.setDate(2, date);
		stmt.setString(3, vo.customerId);
		//오라클가서 테이블 select해보면 새 데이터가 들어간 것을 확인할 수 있다.
		result = stmt.execute();//execute로 결과를 알려주고 / boolean으로 닫음
		return result;
	}
}


+ OrderVO.java

package myweb3;

import java.util.Date;

public class OrderVO { //아래쪽에 각각의 객체를 적고 OrderVO로 한개의 객체화하여 깔끔하게 코드 정리
	public String orderNo;
	public String customerId;
	public Date orderDate;
}


+ OrderDAOTest.java

package myweb3;

import java.util.Date;

public class OrderDAOTest {
	public static void main(String[] args) throws Exception {
		OrderDAO dao = new OrderDAO();
		OrderVO vo = new OrderVO();
		vo.orderNo = "3333";
		vo.customerId = "yudi";
		vo.orderDate = new Date();
//		dao.order(vo); //이 코드로 데이터를 넘겨준다.
		System.out.println(dao.order(vo));//정상실행되면 true가 나올 것임
	}
}