봉봉의 개인 블로그
2017-05-22-P 본문
Data Types 에는
Exact Numeric Data Types : 정수타입
Approximate Numeric Data Types : 실수타입
Date and Time Data Types : 날짜타입
Character String Data Types : 글자타입
Binary Data Types : 기계어타입
Misc Data Types
등이 있다.
연산자
연산자는
+ , - , * , / , % 등등이있고
데이터의 값은 비연산자라고 한다.
비교연산자
=,!=,<>,<,>,>= 등등이있고
= 는 같다라는 뜻이다.
논리연산자
ALL,AND,ANY,BETWEEN,EXISTS,IN,LIKE,NOT,OR,IS NULL,UNIQUE 등등이있고
ALL = AND와 비슷하고 ANY=OR 와 비슷하다.
CREATE Database
DB생성 문장은 CREATE 이고 SHOW는 DB를 보여줍니다.
DROP or DELETE Database
DB를 삭제할때는 DROP을 사용합니다.
SELECT Database
USE는 DB를 검색합니다.
CREATE Table
Table생성 문장은 CREATE 이다
DROP or DELETE Table
Table를 삭제할때는 DROP을 사용합니다.
INSERT Query
INSERT는 테이블에 값을 입력할때 사용된다.
SELECT Query
SELECT는 테이블에 값을 검색할때 사용된다.
WHERE Clause
WHERE는 쿼리문에 조건을 거는것이다.
ex : update 등 뒤에 오는 where은 어디에 있는 이라는 느낌이 크고 select 등 뒤에 오는 where 어떤걸이라는 느낌이 강하다.
AND and OR operators
AND는 둘다 일때 해당된다.
ex : where age = 10 and name = '홍길동' 이면 나이는 10이고 이름은 홍길동인 사람이 된다.
OR은 둘중하나일때 해당된다
ex : where age = 10 or name = '홍길동' 이면 나이가 10 또는 이름이 홍길동인 사람이 된다.
UPDATE Query
UPDATE는 테이블에 값을 수정할때 사용된다.
DELETE Query
DELETE는 테이블에 값을 삭제할때 사용된다.
LIKE Clause
LIKE는 검색할때 같이 사용한다.
ex : select from table_name where name like '박%'
이런식으로 적게 되면 table_name 테이블 안에 name에 성이 박이 인것을 검색하고
반대로 '%박'이 되면 박으로 끝나는 사람을 검색하고
'%박%'이렇게 적으면 이름에 박이 들어간 사람을 검색하는것이다.
*'박?' 면 성이 박이고 이름은 2글자여야만 한다.
ORDER BY Clause
ORDER BY 는 순서에 관련된것이다
ex : ORDER BY age ASC 라고 적으면 오름차순으로 정렬되고
ORDER BY age desc 라고 적으면 내림차순으로 정렬된다.
Group By
Group By는 그룹 지어서 결과를 검색한다.(이때 중복은 제외한다)
Distinct Keyword
Distinct 는 중복되는걸 지우는것이다.(지운다기보다는 제외한다에 가깝다)
예를들면 금암동 사는사람이 2명이고 효자동 사는 사람이 3명일때
count(address)를이용해 select하면 5개의 값이 나오는데
select distinct count(address) from Table 이라고 적으면 겹치는건 제외하고 2가 된다
Joins
Join는 Table 두개를 합쳐서 결과물을 내는것이다.
Join Type은 INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN,SELF JOIN,CARTESIAN JOIN 등이 있다
오늘은 INNER JOIN 에 대해서 알아보도록하자.
select o.id, o.date,o.amount,o.costomer_id,c.name
from orders o inner join customers c
on o.costomer_id = c.id;
INNER JOIN을 쓰게 되면 이런식으로 쿼리문을 만들수있다.
먼저 설명을 하자면orders 뒤와 customers 뒤의 o와 c는 알리오스로써(별명이라고생각하면된다)
그후 o.id 이런식으로 즉 orders안에 id 의 값이란뜻이다 이런식으로 불러올 컬럼명을 적어준후
on o.costomer_id = c.id;식으로 join에 대한 조건식을 걸어주워야한다 o.costomer_id 의 값과c.id의
값이 같은것만 출력하는것이다.
이제 수업시간에 한내용은
이런식으로 만들것이다.
먼저 LIKE를 이용해서 하나의 검색어를 받고 그게 포함되있는 데이터를 구하는데 여기서 name을 누르고 검색어 입력하고 검색하면 이름의 값중에 검색어를 포함하는것들을 구하고
address를 누르면 주소의 값중에 검색어를 포함하는 것들을 구하고 두개다 체크햇을때에는
이름또는 주소의 값중에 검색어를 포함하는것들을 구하게 만들것이다.
먼저 CustomersLike.jsp 파일을 만든다.그리고 그 파일안을
이와같이 만들어줍니다
설명을 하자면 먼저 실행을 하게 되면 처음 word의 값이 null 이기 때문에 24번문의 if 절이 실행되고 리턴값을 list안에 담습니다. 여기서 이제 만약 word의 값만 입력이 되었을경우 27번문의 else문 안에잇는 28번 if 문이 실행되고 리턴값을 list 안에 담습니다. 또한 여기서 카테고리 즉 name or address의 값을 체크하여 값을 가지고 올수도 있게 되는데 이때 체크 박스의 값은 여러개가 넘어올수 있고 여러개를 받기에는 request.getParameter는 값을 하나밖에 받지 못하기에 21번문과 같이 배열로
request.getParameterValues를 받아줍니다. 그후 만약 name or address 값 둘중 하나를 체크하여 넘어왔을 경우에는 배열의 값이 1개이기 때문에 1개일때의 문 32번 if 문이 실행되고 넘어온 체크 박스의 값이 만약에 name 의 값이 넘어오면 33번문의 if 문이 실행되고 리턴받은 값을 list 에 담습니다 또한 만약 address 가 체크 되어 넘어 왔을경우는 36번의 else 문이 실행되고 리턴받은 값을 list에 담습니다.
만약 name 과 address 둘다 체크 되어 넘어오게 되었을경우에는 값이 2개 즉 배열의 갯수가 2개가 되므로 40번 else 문이 실행되어 리턴받은 값을 list에 담게 됩니다.
그후 각각의 조건에 맞는 문이 실행되고 리턴받은 값을 담은 list를 57번의 for 문을 통해 그 안에 있는
데이터의 갯수만큼 반복하도록 Customer c : list 와 같이 조건을 걸고 60번문과 같이 데이터를 get하여 출력해줍니다. 여기서 필요한 select문을 알아보도록하자
먼저 service 패키지를 만들고 그안에 Customer.java 파일을 만듭니다.그리고 그안을
이렇게 채워줍니다 .이것은 DTO의 역활을합니다.
그후 같은 패키지 내에 CustomerDao.java 파일을 만들고 안을 아래와 같이 채워줍니다.
생략하고 메서드만 적겠다.
CustomersLike.jsp파일에서 카테고리의 값이없을때 출력 메서드이다.
그후 name의 값이 있을때 출력하는 메서드이다.
그후 address의 값이 있을때 출력하는 메서드이다.
그후 name과 address의 값이 넘어왔을때 둘중하나에 포함되면 값을 출력하는 메서드이다.
이런 메서드들을 이용해 값을 리턴받아 출력할수 있는것이다.
2번째로는 아래와 같이 만들것인데
전송옆 카테고리의 안에는 주소값이 겹치지 않게끔해서 들어오게 만들고 그값을 받아 데이터를 출력하는걸 하도록할것이다 .지금은 DB안에 데이터가 없어서 나오진 않는다.
src 를 확인해보자면 먼저
CostomersList2.jsp 파일을 만들고 그안을 아래와 같이 채워줍니다.
이런식으로 채워줍니다 설명을 하자면 먼저 17번문에서
ArrayList<String>을 통해서 String 배열을 만들고 그안에customerdao.selectaddresslist();
메서드에서 리턴받은 값들을 slist 에 담아줍니다.
그후 27번 for 문을 통해 배열안의 값들의 숫자만큼 option을 만들어줍니다.
그안에 값들로 value와 이름을 표시해주고 그값들의 name을 address로 25번줄에서 정해줍니다.
그후 받은 값이 null이 아니기 때문에 else문이 실행되고 리턴받은 값을 list에 담아서 44번줄의 for문을 통해 배열의 숫자만큼 반복하여 데이터를 출력합니다.
그후 CustomerDao.java 파일안에 메서드를 추가해줍니다
먼저 카테고리의 주소의 값을 받아 option에서 출력하기 위해 주소값을 받아오는 메서드는
이렇게 작성해주면 된다 여기서 쿼리문을 잠깐 설명하자면 distinct를 통해서 중복된 address 값을 select하고 그값을 String 타입으로 반복하여 list에 담아 리턴한것이다.
그후 그 받은 address를 통해 받은 값에 맞는 값을 출력하는 메서드는
이런식으로 작성해주면 된다 String 값으로 address를 받고 쿼리문을 작성하여 실행하고 그걸 Customer 타입의 c 안에 set 을 통해 데이터를 담고 list 를 통해 계속 값을 담은후 리턴하여 출력하면 되는것이다.
그 다음으로는 INNNER 조인을 통해서 검색을 해보도록 하겠다. 즉 아래의 사진과 같이
ID , DATE , AMOUNT 의 값은 mysql DB안에 order 테이블에서 데이터를 가지고오고 NAME의 값은
mysql DB안에 customers 테이블에서 데이터를 가지고 와서 화면에 뿌려 줍니다.
(2개의 테이블을 join해서 화면에 뿌려준다)
이와같이 Order.java , OrderAndCustomer.java , OrderDao.java 파일을 만들어줍니다
약간의 설명을 하자면 Order.java 는 Order에 DTO 역활을 할것이고
OrderDao.java는 Order와 관련된 메서드들을 선언하고 사용할것이고
OrderAndCustomer.java 에서는 Order.java 의 객체의 주소값과 Customer.java에 데이터를 set과 get을
할수 있는 중간 역활을 하게 만들것이다. 즉 OrderAndCustomer.java 안에는 Order클레스 타입의 객체참조변수와 Customer클레스 타입의 객체참조변수가 선언되있고 각각의 생성자 메서드도 선언되 생성,선언,할당의 역활을 하는것이다.
그렇다면 먼저 Order.java 파일 안을 아래와 같이 적어줍니다.
이런식으로 적어서 Dto로써의 역활을 하도록 만들어줍니다.
Order 테이블의 값을 get하여 set할수있는 역활을 합니다.
그후 OrderAndCustomer.java 안을 아래와 같이 작성해줍니다.
설명을 조금하자면 먼저 이파일은 order의 객체와 customer 객체의 중간 역활을 하기 위해서 만들었기 때문에 4,5번문과 클레스파일의 타입으로 각각의 객체참조변수 order,customer를 선언하고 생성자 메서드를 통해 새로운 객체를 만들어 객체참조변수에 주소값을 할당해줍니다.
(여기서 사용할 메서드는 get의 메서드만 사용되었다)
이렇게 적어주게 되면 OrderAndCustomer클레스 내에 getOrder 메서드를 통해서 order타입의 객체를 get할수있다 즉 호출한곳으로 order타입의 객체가 리턴되어 지는것이다. 이걸 이용해서 OrderDao.java파일에서는 DB에서 가지고온 데이터를 set하고 화면에서는 데이터를 get 할수있다.
그러면 OrderDao.java 파일 안을 아래와 같이 적어준다.
이런식으로 적어준다 설명을 하자면 먼저11번의 문부터28번까지의 문은 드라이버로딩과 DB를 연결하기 위해서 사용하였다.
그후 29,30번의 줄은 각각의 타입으로 객체를 선언한것이고 31번부터 41번까지의 문은 close에 관한 문이다. 그후 42번부터 66번까지의 문처럼 메서드를 선언해준다.
리턴타입은 먼저 ArrayList<OrderAndCustomer> 가 되고 OrderAndCustomer 을통해 데이터를 셋하고 get 하기 때문에 Dto로써의 역활을 하게 되므로 ArrayList<OrderAndCustomer> 처럼 적어 리턴받아준다 그후 43번과 같이 ArrayList<OrderAndCustomer>의 객체를 생성 선언 할당해주고
INNER JOIN의 쿼리문을 완성 시켜준다. 44번의 쿼리문의 설명은 이 게시글 위에 적혀있다.
그후 다른 select 문과 같게 적어준후에 49번 while문에서
OrderAndCustomer orderandcustomer = new OrderAndCustomer(); 를 통해 객체를 선언 생성 할당해줍니다. 그후 아래 51번~54번의 문과 같이 49번에서 생성된 객체의 안을 찾아가서 그안에 getOrder메서드를 통해서 OrderAndCustomer.java파일안에 Order 클레스 타입으로 생성된 객체 order를 get 하고 그안에 order 안에 set 메서드를 통해 db 안에 데이터를 get하여 order 안에 set해줍니다. 그렇게 한 주소값을 list 에 담는 과정을 while 문을 통해 검색된 행만큼 반복한후 그 주소값 뭉치를 리턴해줍니다.
이제 리턴 받은 값을 화면에 뿌려주기 위해서 화면을 만들고 받은 데이터를 뿌려줍니다
먼저 OrderList.jsp 파일을 만들고 그안을 아래와 같이 채워줍니다.
이런식으로 작성해준다음 14번 15번문에서 메서드를 호출하고 리턴받은 데이터를 list에 담아줍니다.
그후 25번줄에서 for 문을 통해 OrderAndCustomer안에 데이터를 get할것이데 list 안에 배열의 갯수와 주소값안을 찾아가서 데이터get해와서 28번줄과 같이 데이터를 뿌려줍니다.
'학원에서 배운것들 > TEA - P' 카테고리의 다른 글
2017-05-25-P (0) | 2017.05.25 |
---|---|
2017-05-24-P (0) | 2017.05.24 |
2017-05-19-P (0) | 2017.05.19 |
2017-05-18-P (0) | 2017.05.18 |
2017-05-17-P (0) | 2017.05.17 |