** SELECT로 가져온 결과들을 하나씩 읽어들여 처리하고 싶을때 사용한다
** 커서의 사용방법은 OPEN, FETCH, CLOSE, DEALLOCATE등 4단계를 거친다
** FETCH에는 NEXT, PRIOR, FIRST, LAST, ABSOLUTE {n / @nvar}, RELATIVE {n / @nvar}가 있다

   SET NOCOUNT ON      /* SQL문의 영향을 받은 행수를 나타내는 메시지를 숨긴다 */
   DECLARE cStatus SCROLL CURSOR    /* 앞뒤로 움직이는 커서 선언 */
   FOR
       SELECT ID, Year, City FROM aPlane
   FOR READ ONLY
   OPEN cStatus      /* 커서를 연다 */
   DECLARE @ID varchar(50), @Year int, @City varchar(50), @Status char(1)
   FETCH FROM cStatus INTO @ID, @Year, @City /* 커서에서 데이타를 하나씩 가져온다 */
   WHILE @@FETCH_STATUS=0                    /* 커서가 가르키는 결과의 끝까지 */
   BEGIN
       IF      @Year <= 5              SET @Status='A'
       ELSE IF @Year> 6 AND @Year <= 9 SET @Status='B'
       ELSE                            SET @Status='C'
       INSERT INTO aPlane(ID, City, Status) VALUES(@ID, @Year, @Status)
       FETCH FROM cStatus INTO @ID, @Year, @City /* 커서에서 데이타를 하나씩 가져온다 */
   END
   CLOSE cStaus                              /* 커서를 닫는다 */
   DEALLOCATE cStatus                        /* 커서를 해제한다 */

'SQL Server' 카테고리의 다른 글

오브젝트 - Trigger(트리거)  (0) 2013.02.27
오브젝트 - Stored Procedure(저장 프로시저)  (0) 2013.02.27
오브젝트 - View(뷰)  (0) 2013.02.27
오브젝트 - Table (테이블)  (0) 2013.02.27
추가,업데이트,삭제  (0) 2013.02.26

** 한 테이블의 데이타가 편집(INSERT/UPDATE/DELETE)된 경우에 자동으로 다른 테이블의
   데이타를 삽입, 수정, 삭제한다
** 트리거 내용을 보고 싶으면 SP_HELPTRIGGER 트리거명 을 사용한다

CREATE TRIGGER 트리거명 ON 테이블명 FOR INSERT AS SQL문 /* INSERT 작업이 수행될때 */

CREATE TRIGGER 트리거명 ON 테이블명 AFTER UPDATE AS SQL문 /* UPDATE 작업이 수행되고 난 후 */

CREATE TRIGGER 트리거명 ON 테이블명 INSTEAD OF DELETE AS SQL문

DROP TRIGGER 트리거명

'SQL Server' 카테고리의 다른 글

오브젝트 - Cursor(커서)  (0) 2013.02.27
오브젝트 - Stored Procedure(저장 프로시저)  (0) 2013.02.27
오브젝트 - View(뷰)  (0) 2013.02.27
오브젝트 - Table (테이블)  (0) 2013.02.27
추가,업데이트,삭제  (0) 2013.02.26

--3. S tor e d P r oc e du r e ( 저장 프로시저)--
** 데이타베이스내에서 SQL 명령을 컴파일할때 캐시를 이용할 수 있으므로 처리가 매우 빠르다
    반복적으로 SQL 명령을 실행할 경우 매회 명령마다 네트워크를 경유할 필요가 없다
    어플리케이션마다 새로 만들 필요없이 이미 만들어진 프로시저를 반복 사용한다
    데이타베이스 로직을 수정시 프로시저는 서버측에 있으므로 어플리케이션을 다시 컴파일할 필요가 없다
** 저장 프로시저의 소스 코드를 보고 싶으면 SP_HELPTEXT 프로시저명 을 사용한다

CREATE PROC 프로시저명 AS SQL문 /* 저장 프로시저 */

CREATE PROC 프로시저명 변수선언 AS SQL문 /* 인수를 가지는 저장 프로시저 */

CREATE PROC 프로시저명 WITH ENCRYPTION AS SQL문 /* 저장 프로시저 보안 설정 */

CREATE PROC 프로시저명 /* RETURN 값을 가지는 저장 프로시저 */

ex)-------------------------------------------
   인수1 데이타형, ... 인수2 데이타형 OUTPUT
 AS
   SQL문
   RETURN 리턴값
----------------------------------------------

DROP PROCEDURE 프로시저명1, 프로시저명2, ... /* 저장 프로시저 삭제 */

명령어
  BEGIN ... END /* 문장의 블록 지정 */
  
  DECLARE @변수명 데이타형 /* 변수 선언 */
  
  SET @변수명=값 /* 변수에 값 지정 */

  PRINT @변수명 /* 한개의 변수 출력 */

  SELECT @변수1, @변수2 /* 여러개의 변수 출력 */
  
ex)--------------------------------------------------
  IF 조건 /* 조건 수행 */
      수행1
  ELSE
      수행2
  WHILE 조건1 /* 반복 수행 */
      BEGIN
         IF 조건2
       BREAK - WHILE 루프를 빠져 나간다
       CONTINUE - 수행을 처리하지 않고 조건1로 되돌아간다
   수행
      END
------------------------------------------------------

EXEC 저장프로시저 /* SQL문을 실행 */

EXEC @(변수로 지정된 SQL문)

GO /* BATCH를 구분 지정 */


예제
--1. 기본 저장 프로시저--
CREATE PROC pUpdateSalary AS UPDATE Employee SET salary=salary*2

--2. 인수를 가지는 저장 프로시저--
CREATE PROC pUpdateSalary
    @mul float=2, @mul2 int
AS
    UPDATE Employee SET salary=salary* @M ul* @mul2
EXEC pUpdateSalary 0.5, 2 /* 모든 변수에 값을 대입 */
EXEC pUpdateSalary @mul2=2 /* 원하는 변수에만 값을 대입 */

--3. 리턴값을 가지는 저장 프로시저--
CREATE PROC pToday
    @Today varchar(4) OUTPUT
AS
    SELECT @Today=CONVERT(varchar(2), DATEPART(dd, GETDATE()))
    RETURN @Today
DECLARE @answ er varchar(4)
EXEC pToday @answ er OUTPUT
SELECT @answ er AS 오늘날짜

--4. 변수 선언과 대입, 출력--
** @는 사용자 변수이고 @@는 시스템에서 사용하는 변수이다
DECLARE @EmpNum int, @t_name VARCHAR(20)
SET @EmpNum=10
SET @t_name = '강우정'
SELECT @EmpNum

         이런식으로 다중입력도 가능함.
SELECT @no = no, @name = name, @level = level
FROM OF_M ember
WHERE userId ='"

'SQL Server' 카테고리의 다른 글

오브젝트 - Cursor(커서)  (0) 2013.02.27
오브젝트 - Trigger(트리거)  (0) 2013.02.27
오브젝트 - View(뷰)  (0) 2013.02.27
오브젝트 - Table (테이블)  (0) 2013.02.27
추가,업데이트,삭제  (0) 2013.02.26

2. V i e w ( 뷰)
** 자주 사용하는 SELECT문이 있을때 사용한다
    테이블에 존재하는 칼럼들중 특정 칼럼을 보이고 싶지 않을때 사용한다
    테이블간의 결합등으로 인해 복잡해진 SELECT문을 간단히 다루고 싶을때 사용한다
** 뷰를 만들때 COM PUTE, COM PUTE BY, SELECT INTO, ORDER BY는 사용할 수 없고
     #, ##으로 시작되는 임시 테이블도 뷰의 대상으로 사용할 수 없다
** 뷰의 내용을 보고 싶으면 SP_HELPTEXT 뷰명 을 사용한다

CREATE VIEW 뷰명 AS SELECT문 /* 뷰 만들기 */

CREATE VIEW 뷰명 (별칭1, 별칭2, ...) AS SELECT문 /* 칼럼의 별칭 붙이기 */

CREATE VIEW 뷰명 AS (SELECT 칼럼1 AS 별칭1, 칼럼2 AS 별칭2, ...)

ALTER VIEW 뷰명 AS SELECT문 /* 뷰 수정 */

DROP VIEW 뷰명 /* 뷰 삭제 */

CREATE VIEW 뷰명 WITH ENCRYPTION AS SELECT문 /* 뷰 암호 */

** 한번 암호화된 뷰는 소스 코드를 볼 수 없으므로 뷰를 암호화하기전에
    뷰의 내용을 스크립트 파일로 저장하여 보관한다

INSERT INTO 뷰명 (칼럼1, 칼럼2, ...) VALUES (값1, 값2, ...)

UPDATE 뷰명 SET 칼럼=값 WHERE 조건

** 원래 테이블에 있는 반드시 값을 입력해야 하는 칼럼이 포함되어 있지 않거나
    원래 칼럼을 사용하지 않고 변형된 칼럼을 사용하는 뷰는 데이타를 추가하거나
    갱신할 수 없다
** WHERE 조건을 지정한 뷰는 뷰를 만들었을때 WITH CHECK OPTION을 지정하지 않았다면
    조건에 맞지 않는 데이타를 추가할 수 있지만 뷰에서는 보이지 않는다
    또한 뷰를 통해서 가져온 조건을 만족하는 값도 뷰의 조건에 만족하지 않는 값으로도
    갱신할 수 있다

CREATE VIEW 뷰명 AS SELECT문 WITH CHECK OPTION

** 뷰의 조건에 맞지 않는 INSERT나 UPDATE를 막을려면 WITH CHECK OPTION을 설정한다

'SQL Server' 카테고리의 다른 글

오브젝트 - Trigger(트리거)  (0) 2013.02.27
오브젝트 - Stored Procedure(저장 프로시저)  (0) 2013.02.27
오브젝트 - Table (테이블)  (0) 2013.02.27
추가,업데이트,삭제  (0) 2013.02.26
조건  (0) 2013.02.26

** 데이타베이스는 아래 오브젝트들을 각각의 유저별로 관리를 하는데 Schema(스키마)는 각 유저별 소유 리스트이다
1. Table ( 테이블)
** CREATE일때 프라이머리 키를 설정하지 않는다면 (칼럼 int IDENTITY(1, 1) NOT NULL) 자동 칼럼을 만든다
    데이타들의 입력 순서와 중복된 데이타를 구별하기 위해서 반드시 필요하다
** 테이블 정보 SP_HELP 테이블명, 제약 조건은 SP_HELPCONSTRAINT 테이블명 을 사용한다

CREATE TABLE 데이타베이스이름.소유자이름.테이블이름 (칼럼 데이타형 제약, ...) /* 테이블 만들기 */

DROP TABLE 테이블명 /* 테이블 삭제 */

ALTER TABLE 테이블명 ADD 칼럼 데이타형 제약, ... /* 칼럼 추가 */

ALTER TABLE 테이블명 DROP COLUM N 칼럼 /* 칼럼 삭제 */

** DROP COLUM N으로 다음 칼럼은 삭제를 할 수 없다
    - 복제된 칼럼
    - 인덱스로 사용하는 칼럼
    - PRIM ARY KEY, FOREGIN KEY, UNIQUE, CHECK등의 제약 조건이 지정된 칼럼
    - DEFAULT 키워드로 정의된 기본값과 연결되거나 기본 개체에 바인딩된 칼럼
    - 규칙에 바인딩된 칼럼

CREATE TABLE 테이블명 (칼럼 데이타형 DEFAULT 디폴트값, ...) /* 디폴트 지정 */

CREATE TABLE 테이블명 (칼럼 데이타형 CONSTRAINT 이름 UNIQUE, ...) /* 유니크 설정 */

** UNIQUE란 지정한 칼럼에 같은 값이 들어가는것을 금지하는 제약으로 기본 키와 비슷하지만
    NULL 값을 하용하는것이 다르다

CREATE TABLE 테이블명 (칼럼 데이타형 CONSTRAINT 이름 NOT NULL, ...) /* NOT NULL 설정 */

CREATE TABLE 테이블명 (칼럼 데이타형 CONSTRAINT 이름 PRIM ARY KEY, ...) /* 기본 키 설정 */

** 기본 키는 유니크와 NOT NULL이 조합된 제약으로 색인이 자동적으로 지정되고 데이타를
    유일하게 만들어 준다
** 기본 키는 한 테이블에 한개의 칼럼만 가능하다

CREATE TABLE 테이블명 (칼럼 데이타형 CONSTRAINT 이름 FOREIGN KEY REFERENCES 부모테이블이름(부모칼럼), ...)

CREATE TABLE 테이블명 (칼럼 데이타형 CONSTRAINT 이름 CHECK(조건), ...) /* CHECK 설정 */

** CHECK는 조건을 임의로 정의할 수 있는 제약으로 설정되면 조건을 충족시키는 데이타만
    등록할 수 있고 SELECT의 WHERE구와 같은 조건을 지정한다
** CONSTRAINT와 제약 이름을 쓰지 않으면 데이타베이스가 알아서 이름을 붙이지만
    복잡한 이름이 되기 때문에 되도록이면 사용자가 지정하도록 한다
** CONSTRAINT는 칼럼과 데이타형을 모두 정의한 뒤에 맨 마지막에 설정할 수 있다

CREATE TABLE 테이블명 (칼럼1 데이타형,
        칼럼2 데이타형, ...
        CONSTRAINT 이름 PRIM ARY KEY(칼럼1)
                      CONSTRAINT 이름 CHECK(칼럼2 < a) ...)

ALTER TABLE 테이블명 ADD CONSTRAINT 이름 제약문 /* 제약 추가 */

ALTER TABLE 테이블명 DROP CONSTRAINT 제약명 /* 제약 삭제 */

ALTER TABLE 테이블명 NOCHECK CONSTRAINT 제약명 /* 제약 효력 정지 */

ALTER TABLE 테이블명 CHECK CONSTRAINT 제약명 /* 제약 효력 유효 */

** 제약명은 테이블을 만들때 사용자가 지정한 파일 이름을 말한다

'SQL Server' 카테고리의 다른 글

오브젝트 - Stored Procedure(저장 프로시저)  (0) 2013.02.27
오브젝트 - View(뷰)  (0) 2013.02.27
추가,업데이트,삭제  (0) 2013.02.26
조건  (0) 2013.02.26
그룹화 함수  (0) 2013.02.26
추가
   ** NULL 값을 허용하지도 않고 디폴트 값도 지정되어 있지 않은 칼럼에 값을 지정하지 않은채
      INSERT를 수행하면 에러가 발생한다
   ** 수치값은 그대로 문자값은 ''(작은따옴표)로 마무리 한다
   ** SELECT INTO는 칼럼과 데이타는 복사하지만 칼럼에 설정된 프라이머리, 포린 키등등의 제약 조건은
      복사되지 않기 때문에 복사가 끝난후 새로 설정해 주어야 한다
   
INSERT INTO 테이블명 VALUES (값1, 값2, ...)     /* 모든 필드에 데이타를 넣을 때 */
   
INSERT INTO 테이블명 (칼럼1, 칼럼2, ...) VALUES (값1, 값2, ...)   /* 특정 칼럼에만 데이타를 넣을 때 */
   
INSERT INTO 테이블명 SELECT * FROM 테이블명2  /* 이미 존재하는 테이블에 데이타 추가 */
   
INSERT INTO 테이블명(칼럼1, 칼럼2, ...) SELECT 칼럼1, 칼럼2, ...) FROM 테이블명2
   
SELECT * INTO 테이블명 FROM 테이블명2   /* 새로 만든 테이블에 데이타 추가 */
   
SELECT 칼럼1, 칼럼2, ... 테이블명 FROM 테이블명2
갱신
  
   UPDATE 테이블명 SET 칼럼1=값1, 칼럼2=값2   /* 전체 데이타 갱신 */      
   UPDATE 테이블명 SET 칼럼1=값1, 칼럼2=값2 WHERE 조건    /* 조건에 해당되는 데이타 갱신 */
 
UPDATE~SELECT
UPDATE A SET A.cyberLectures = B.bizAddress
FROM OF_Member A, OF_Member B
WHERE A.no = B.no
삭제
   DELETE FROM 테이블명    /* 전체 데이타 삭제 */
   DELETE FROM 테이블명 WHERE 조건       /* 조건에 해당되는 데이타 삭제 */


'SQL Server' 카테고리의 다른 글

오브젝트 - View(뷰)  (0) 2013.02.27
오브젝트 - Table (테이블)  (0) 2013.02.27
조건  (0) 2013.02.26
그룹화 함수  (0) 2013.02.26
함수  (0) 2013.02.26
SELECT 칼럼1, SUM(칼럼2) FROM 테이블명 GROUP BY 칼럼1 HAVING SUM(칼럼2) < a
SELECT 칼럼1, SUM(칼럼2) FROM 테이블명 ORDER BY 칼럼1 COMPUTE SUM(칼럼2)
    ** HAVING:        그룹 함수를 사용할 경우의 조건을 지정한다
       HAVING의 위치: GROUP BY의 뒤 ORDER BY의 앞에 지정한다
       COMPUTE:       각 그룹의 소계를 요약해서 보여준다
                      ORDER BY가 항상 선행해서 나와야 한다
조건절의 서브 쿼리
   ** SELECT 또는 INSERTY, UPDATE, DELETE 같은 문의 조건절에서 SELECT문을 또 사용하는 것이다
      SELECT문 안에 또 다른 SELECT문이 포함되어 있다고 중첩 SELECT문(NESTED SELECT)이라고 한다
   ** 데이타베이스에는 여러명이 엑세스하고 있기 때문에 쿼리를 여러개 나누어서 사용하면 데이타의 값이
      달라질수 있기때문에 트랜잭션 처리를 하지 않는다면 복수의 쿼리를 하나의 쿼리로 만들어 사용해야 한다
    
SELECT 칼럼1, 칼럼2 FROM 테이블명 WHERE 칼럼2 = (SELECT 칼럼2 FROM 테이블명 WHERE 조건)
    
SELECT 칼럼1, 칼럼2 FROM 테이블명 WHERE 칼럼1 IN (SELECT 칼럼1 FROM 테이블명 WHERE 조건)
   
   ** 서브 쿼리에서는 다른 테이블을 포함할 수 있다
      두개의 테이블에서 읽어오는 서브쿼리의 경우 서브 쿼리쪽에 데이타가 적은 테이블을 주 쿼리쪽에 데이타가
      많은 테이블을 지정해야 처리 속도가 빨라진다
    SELECT 칼럼1, 칼럼2 FROM 테이블명 WHERE 칼럼1 IN (SELECT 칼럼2-1 FROM 테이블명2 WHERE 조건)
   ** FROM구에서 서브 쿼리를 사용할 수 있다
      사용시 반드시 별칭을 붙여야 하고 처리 속도가 빨라진다
    
SELECT 칼럼1, 칼럼2 FROM 테이블명 WHERE 조건1 AND 조건2
    
SELECT 칼럼1, 칼럼2 FROM (SELECT 칼럼1, 칼럼2 FROM 테이블명 WHERE 조건1) 별칭 WHERE 조건2
 데이타 편집

'SQL Server' 카테고리의 다른 글

오브젝트 - Table (테이블)  (0) 2013.02.27
추가,업데이트,삭제  (0) 2013.02.26
그룹화 함수  (0) 2013.02.26
함수  (0) 2013.02.26
연산자  (0) 2013.02.26
SELECT COUNT(*) FROM 테이블명               /* 전체 데이타의 갯수 가져오기 */
   
SELECT COUNT(칼럼) FROM 테이블명           /* NULL은 제외한 칼럼의 데이타 갯수 가져오기 */
   
SELECT SUM(칼럼) FROM 테이블명              /* 칼럼의 합계 구하기 */
   
SELECT MAX(칼럼) FROM 테이블명              /* 칼럼의 최대값 구하기 */

SELECT MIN(칼럼) FROM 테이블명              /* 칼럼의 최소값 구하기 */

SELECT AVG(칼럼) FROM 테이블명              /* 칼럼의 평균값 구하기 */
  
--GROUP BY문--
SELECT 칼럼 FROM 테이블명 GROUP BY 칼럼   
   
SELECT 칼럼1, SUM(칼럼2) FROM 테이블명 GROUP BY 칼럼1
   
SELECT 칼럼1, COUNT(*) FROM 테이블명 GROUP BY 칼럼1
   
SELECT 칼럼1, 칼럼2, MAX(칼럼3) FROM 테이블명 GROUP BY 칼럼1, 칼럼2
    
** GROUP BY를 지정한 경우 SELECT 다음에는 반드시 GROUP BY에서 지정한 칼럼 또는
       그룹 함수만이 올 수 있다

'SQL Server' 카테고리의 다른 글

추가,업데이트,삭제  (0) 2013.02.26
조건  (0) 2013.02.26
함수  (0) 2013.02.26
연산자  (0) 2013.02.26
데이타 검색  (0) 2013.02.26
--1.수치 함수--
     ROUND(수치값, 반올림위치)            /* 반올림 및 자르기 */
     ABS(수치 데이타)                     /* 절대값 */   
     SIGN(수치 데이타)                    /* 부호 */
     SQRT(수치값)                         /* 제곱근 */
     POWER(수치값, n)                     /* n승 */
--2.문자열 함수 정리--
 
1)  Ascii() - 문자열의 제일 왼쪽 문자의 아스키 코드 값을 반환(Integer)
예) SELECT Ascii('abcd')
    >>  결과는 a의 아스키 코드값인 97 반환
 
2) Char() - 정수 아스키 코드를 문자로 반환(Char)
예) SELECT Char(97)
      >> 결과는 a 반환
 
3) Charindex() - 문자열에서 지정한 식의 위치를 반환
예)  SELECT Charindex('b','abcde')   >> 결과 : 2
     SELECT Charindex('b','abcde',2) >> 결과 : 2
     SELECT Charindex('b','abcde',3) >> 결과 : 0 
        --인수값이 3개일때 마지막은 abcde 에서의 문자열 검색 시작위치를 말하며
        --2인경우는 bcde 라는 문자열에 대해서 검색
        --3인 경우는 cde 라는 문자열에 대해서 검색 하게 된다.
 
4) Difference() - 두 문자식에 SUONDEX  값 간의 차이를 정수로 반환
예)  SELECT Difference('a','b')
 
5) Left() - 문자열에서 왼쪽에서부터 지정한 수만큼의 문자를 반환
예)  SELECT Left('abced',3)       결과 >> 3
 
6) Len() - 문자열의 길이 반환
예) SELECT Len('abced')         결과>>5
 
7) Lower() - 대문자를 소문자로 반환
예) SELECT Lower('ABCDE')    결과 >> abcde
 
8) Ltrim() - 문자열의 왼쪽 공백 제거
예)  SELECT Ltrim('   AB  CDE')    결과>> AB CDE
 
9)Nchar()  - 지정한 정수 코드의 유니코드 문자 반환
예)  SELECT Nchar(20)       결과  >>  
 
10) Replace -  문자열에서 바꾸고 싶은 문자 다른 문자로 변환
예) SELECT Replace('abcde','a','1')    결과>>1bcde
 
11) Replicate()  - 문자식을 지정한 횟수만큼 반복
예) SELECT Replicate('abc',3)              결과>> abcabcabc
 
12) Reverse() - 문자열을 역순으로 출력
예)   SELECT Reverse('abcde')             결과>> edcba
 
13) Right()  - 문자열의 오른쪽에서 부터 지정한 수 만큼 반환(Left() 와 비슷 )
예) SELECT Right('abcde',3)                 결과>> cde
 
14) Rtrim()  - 문자열의 오른쪽 공백 제거
예) SELECT Rtrim(' ab cde  ')               결과>>  ' ab cde'  -- 공백구분을위해 ' 표시
 
15)  Space()  -  지정한 수만큼의 공백 문자 반환
예)  SELECT Space(10)                  결과 >>   그냥 공백이 나옴 

16) Substring() - 문자/이진/텍스트 또는 이미지 식의 일부를 반환
예) SELECT Substring('abcde',2,3)   -- 결과>> bcd

17) Unicode() - 식에 있는 첫번째 문자의 유니코드 정수 값을 반환
예) SELECT Unicode('abcde')             결과>> 97

18) Upper() - 소문자를 대문자로 반환
예) SELECT Upper('abcde')         결과>> ABCDE
 --날짜및 시간함수 정리--
getdate()  >> 오늘 날짜를 반환(datetime)
 
1> DateAdd()   - 지정한 날짜에 일정 간격을 + 새 일정을 반환
예) SELECT Dateadd(s,2000,getdate())
 
2> Datediff()  - 지정한 두 날짜의 간의 겹치는 날짜 및 시간 범위 반환
예)SELECT DateDiff(d,getdate(),(getdate()+31))
 
3> Datename() -지정한 날짜에 특정 날짜부분을 나타내는 문자열을 반환
예) SELECT Datename(d,getdate())
 
4> Datepart() -지정한 날짜에 특정 날짜부분을 나타내는 정수를  반환
예) SELECT Datepart(d,getdate())
 ** 돌려주는값(약어)
      Year-yy, Quarter-qq, Month-mm, DayofYear-dy, Day-dd, Week-wk, 
      Hour-hh, Minute-mi, Second-ss, Milisecond-ms
      SELECT DATEADD(dd, 7, 날짜칼럼)  
>> Datename , Datepart 은 결과 값은 같으나 반환 값의 타입이 틀림.
 
5> Day() -지정한 날짜에 일 부분을 나타내는 정수를  반환
예) SELECT Day(getdate())    -- 일 반환
    
    SELECT Month(getdate())   -- 월 반환
      
    SELECT Year(getdate())     --  년 반환     

--4. 형변환 함수--
     CONVERT(데이타 타입, 칼럼)                 /* 칼럼을 원하는 데이타 타입으로 변환 */
    
     CONVERT(데이타 타입, 칼럼, 날짜형 스타일)  /* 원하는 날짜 스타일로 변환 */
     
     CAST(칼럼 AS 데이타 타입)                  /* 칼럼을 원하는 데이타 타입으로 변환 */ 
  
 ** 스타일
      1->mm/dd/yy, 2->yy.mm.dd, 3->dd/mm/yy, 4->dd.mm.yy, 5->dd-mm-yy,
      8->hh:mm:ss, 10->mm-dd-yy, 11->yy/mm/dd, 12->yymmdd
    
SELECT CONVERT(varchar(10), 날짜칼럼, 2)

'SQL Server' 카테고리의 다른 글

추가,업데이트,삭제  (0) 2013.02.26
조건  (0) 2013.02.26
그룹화 함수  (0) 2013.02.26
연산자  (0) 2013.02.26
데이타 검색  (0) 2013.02.26
  ** 1순위는 수치 앞에 기술되는 + - 같은 단항 연산자
     2순위는 사칙 연산의 산술 연산자인  * / + -
     3순위는 = > 비교 연산자
     4순위는 AND OR 같은 논리 연산자
     ()을 붙이면 우선 순위를 바꿀수 있다

  --1. SELECT 문의 연산 --
     SELECT 칼럼1, 칼럼2, 칼럼3+칼럼4 AS '별명' FROM 테이블명
 
  --2. ORDER BY 구의 연산-- 
     SELECT 칼럼1, 칼럼2, 칼럼3+칼럼4 AS '별명' FROM 테이블명 ORDER BY 칼럼3+칼럼4 DESC

     SELECT 칼럼1, 칼럼2, 칼럼3+칼럼4 AS '별명' FROM 테이블명 ORDER BY 3 DESC

  --3. WHERE 구의 연산-- 
     SELECT 칼럼1, 칼럼2, 칼럼3+칼럼4 AS '별명' FROM 테이블명 WHERE 칼럼2>=(칼럼3+칼럼4)

  --4. NULL 연산-- 
     SELECT 칼럼1, 칼럼2, ISNULL(칼럼3, 0) + ISNULL(칼럼4, 0) AS '별명' FROM 테이블명

   ** 수치형 데이타와 NULL값과의 연산 결과는 항상 NULL이다
      만약 NULL 값을 원치 않으면 ISNULL(칼럼, 기준값) 함수를 사용해서 기준값을 변환시킨다
 
  --5. 날짜 연산--  
     SELECT GETDATE()     /* 서버의 현재 날짜를 구한다 */

     SELECT 날짜칼럼, 날짜칼럼-7 FROM 테이블명

     SELECT 날짜칼럼, 날짜칼럼+30 FROM 테이블명

     SELECT 날짜칼럼, DATEDIFF(day, 날짜칼럼, GETDATE()) FROM 테이블명

   ** 날짜의 가산과 감산은 + -로 할 수 있다
      날짜와 날짜 사이의 계산은 DATEDIFF(돌려주는값, 시작날짜, 끝날짜) 함수를 사용한다

  --6. 문자 연산--
     SELECT 칼럼1 + 칼럼2 FROM 테이블명

     SELECT 칼럼 + '문자열'  FROM 테이블명

     SELECT 칼럼1 + '문자열' + 칼럼2 FROM 테이블명

   ** 기본 연결은 문자와 문자이고 문자와 숫자의 연결은 CONVERT 함수를 사용해야 한다


'SQL Server' 카테고리의 다른 글

추가,업데이트,삭제  (0) 2013.02.26
조건  (0) 2013.02.26
그룹화 함수  (0) 2013.02.26
함수  (0) 2013.02.26
데이타 검색  (0) 2013.02.26
데이타 검색
 
USE 데이타베이스명     /* USE 문을 사용한 데이타베이스 선택 */
  
SELECT * FROM 데이블명     /* 모든 칼럼 불러오기 */
  
SELECT TOP n * FROM 테이블명    /* 상위 n개의 데이타만 가져오기 */
  
SELECT 칼럼1, 칼럼2, 칼럼3 FROM 테이블명  /* 특정 칼럼 가져오기 */
 
SELECT 칼럼1 별명1, 칼럼2 AS 별명2 FROM 테이블명 /* 칼럼에 별명 붙이기 */
 
SELECT 칼럼3 '별  명3' FROM 테이블명    /* 칼럼 별명에 스페이스가 들어갈 경우는 작은따옴표 사용 */
 
SELECT DISTINCT 칼럼 FROM 테이블명     /* 중복되지 않는 데이타만 가져오기 */

       ** 데이타는 오름차순으로 재배열된다.
       DISTINCT를 사용하면 재배열이 될때까지 데이타가 리턴되지 않으므로 수행 속도에 영향을 미친다. */

SELECT * FROM 테이블명 WHERE 조건절 /* 조건에 해당하는 데이타 가져오기 */

       ** 조건식에 사용하는 비교는 칼럼=값, 칼럼!=값, 칼럼>값, 칼럼>=값, 칼럼<값, 칼럼<=값이 있다
      문자열은 ''(작은따옴표)를 사용한다
      날짜 비교를 할때는 'yy-mm-dd' 형식의 문자열로 한다(날짜='1992-02-02', 날짜>'1992-02-02')
  
SELECT * FROM 테이블명 WHERE 칼럼 BETWEEN x AND y   /* 칼럼이 x>=와 y<=사이의 데이타 가져오기 */
  
SELECT * FROM 테이블명 WHERE 칼럼 IN (a, b...)  /* 칼럼이 a이거나 b인 데이타 가져오기 */
  
SELECT * FROM 테이블명 WHERE 칼럼 LIKE '패턴'  /* 칼럼이 패턴과 같은 데이타 가져오기 */


Like 패턴 주의점 - MSSQL LIKE 쿼리에서 와일드 카드(예약어) 문자가 들어간 결과 검색시 언더바(_)가 들어간 결과를 보기 위해 아래처럼 쿼리를 날리니

 
select * from 테이블명 where 컬럼명 like '%_%'
 

모든 데이터가 결과로 튀어나왔다. -_-;; 언더바가 와일드 카드(쿼리 예약어)이기 때문인데 이럴 땐

 
select * from 테이블명 where 컬럼명 like '%[_]%'

SELECT * FROM 테이블명 WHERE 칼럼 IS NULL      /* 칼럼이 NULL인 데이타 가져오기 */

SELECT * FROM 테이블명 WHERE 칼럼 NOT BETWEEN x AND y   /* 칼럼이 x와 y 사이가 아닌 데이타 가져오기 */

SELECT * FROM 테이블명 WHERE 칼럼 NOT IN (a, b...)      /* 칼럼이 a나 b가 아닌 데이타 가져오기 */

SELECT * FROM 테이블명 WHERE 칼럼 NOT LIKE '패턴'     /* 칼럼이 패턴과 같지 않은 데이타 가져오기 */

SELECT * FROM 테이블명 WHERE 칼럼 IS NOT NULL      /* 칼럼이 NULL이 아닌 데이타 가져오기 */

SELECT * FROM 테이블명 WHERE 칼럼>=x AND 칼럼<=y        

SELECT * FROM 테이블명 WHERE 칼럼=a or 칼럼=b

SELECT * FROM 데이블명 WHERE 칼럼1>=x AND (칼럼2=a OR 칼럼2=b)
   
     **복수 조건을 연결하는 연산자는 AND와 OR가 있다
        AND와 OR의 우선순위는 AND가 OR보다 높은데 우선 순위를 바꾸고 싶다면 ()을 사용한다

SELECT * FROM 테이블명 ORDER BY 칼럼      /* 칼럼을 오름차순으로 재배열하기 */

SELECT * FROM 테이블명 ORDER BY 칼럼 ASC                

SELECT * FROM 테이블명 ORDER BY 칼럼 DESC    /* 칼럼을 내림차순으로 재배열하기 */

SELECT * FROM 테이블명 ORDER BY 칼럼1 ASC, 칼럼2 DESC   /* 복수 칼럼 재배열하기 */

SELECT * FROM 테이블명 ORDER BY 1 ASC, DESC 3           /* 칼럼 순서로 재배열하기 */ 

   ** 기본적으로 SELECT 문에서는 출력순서가 보증되지 않기 때문에
      데이타의 등록 상태나 서버의 부하 상태에 따라 출력되는 순서가 달라질 수 있다
      따라서 출력하는 경우 되도록이면 ORDER BY를 지정한다
   ** 칼럼 번호는 전체 칼럼에서의 번호가 아니라 SELECT문에서 선택한 칼럼의 번호이고 1부터 시작한다

'SQL Server' 카테고리의 다른 글

추가,업데이트,삭제  (0) 2013.02.26
조건  (0) 2013.02.26
그룹화 함수  (0) 2013.02.26
함수  (0) 2013.02.26
연산자  (0) 2013.02.26

왜..웅천 주자창에...그냥 시청앞이나 거북호수 앞이나 주차해서 버스타고 오는건데...그놈의 셔틀버스...ㅡㅡ;


여기가 셔틀 버스타는 곳이 아니다.... 주차를 한 기사님(남편,아버지,남자친구등등..ㅡㅡ;)을 기다리는 곳, 셔틀버스를 타기위해서는 또 내려가야한다



날씨가 아주 더웠는데 셔틀 버스 타는데에도 시간이 오래 걸림....



셔틀 버스가 자산공원 앞에서 내려줌...여기는 엑스포 앞에 설치된 수영장?? 아무튼 무지 들어가고 싶었다...



호텔...과연 끝나고 얼마나 이용 될런지...




왠지 그늘막이 건어물 시장 같이 보였음...




우리는 비싸서 오후 티켓을 구매하여 들어갔다.....라이터 및 나이프 주류도 못들어 가게 하던데....웃긴건 안에서 맥주를 팔던데...



아쿠아리움.....볼려면 3~4시간 기다려야 한다고 해서...나중에 엑스포 끝나고 봐야겠다....





지자체관에서 게 한컷...




날씨 무지 더웠음...




베트남관...




와 보자마자 신기하다가 아니고 와 무지 덥겠다...




엄청난 사람들....


미네랄 물이라던데....




어디였지 아무튼 이게 전부였던....




전기세가 얼마나 나올까?



노출 좀 잘 조정해서 찍어야 했었는데...사람들이 많아서 얼른 찍고 가족 사진 찍느라... 노출이 ㅡㅡ;



LG관 앞이 였나?




삼성관....




악 이렇게 사람 많은 건 첨 봤다... 결국 여기서 도저히 볼수 없어서 뒤로 넘어 갔다..



하지만....역시나...뒤에서 봐서 그런지 잘 보이지도 않았고 바람 때문에 바닷물이...




여수엑스포....뭔가 많이 부족한거 같았다..대전 엑스포 때야 기술이 많이 발달하지 않아서 터치스크린 된는 패널만 보더라도 우와 하고 신기 했지만

너무 발달된 신기술 앞에서, 차라리 아날로그 감성적으로 다가왔으면 어땠을까 하는 아쉬움이 많이 남고, 왜 해양엑스포인지 뭔가 포인트가 많이 부족 한거 같았다 . 또한 전부 가보진 않았지만 대부분의 외국관들은 너무 준비가 허술 했고, 기념품을 판매하러 왔다는 인상이 너무 컸다.

아무튼 이걸로 해서 여수가 많이 발전해라..~~


아무튼 초중고생들은 맨날 소풍 여기로 오겠네...ㅎㅎㅎ 우린 오동도로 갔었는데...ㅋㅋㅋ

'解憂所' 카테고리의 다른 글

수원 화성..  (0) 2012.07.08
엑스포는 다음 기회에...ㅡㅡ;  (0) 2012.07.05
검은 대장장이?....  (0) 2012.07.05
HOT!!!!summer....  (0) 2012.06.17
많은 일들......  (0) 2012.06.16
Employee.java
package web.jdbc.test;

public class Employee {

	private int empno;
	private String ename;
	private int deptno;
	private String hiredate;
	private int sal;
	private int mgr;
	
	public int getEmpno() {
		return empno;
	}
	public void setEmpno(int empno) {
		this.empno = empno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public int getDeptno() {
		return deptno;
	}
	public void setDeptno(int deptno) {
		this.deptno = deptno;
	}
	public String getHiredate() {
		return hiredate;
	}
	public void setHiredate(String hiredate) {
		this.hiredate = hiredate;
	}
	public int getSal() {
		return sal;
	}
	public void setSal(int sal) {
		this.sal = sal;
	}
	public int getMgr() {
		return mgr;
	}
	public void setMgr(int mgr) {
		this.mgr = mgr;
	}
	
	
}

EmpDAO.java
package web.jdbc.test;

import java.sql.*;
import java.util.*;

public class EmpDAO {
	// 데이터베이스 연결관련정보를 문자열로 선언
	private String jdbc_driver = "oracle.jdbc.OracleDriver";
	private String db_url = "jdbc:oracle:thin:@211.183.3.5:1521:ORCL";

	private Connection getConn() throws Exception{
		// JDBC 드라이버 로드하여 DriverManager에 등록함
		Class.forName(jdbc_driver);

		// 로드된 드라이버를 이용하여 DB와 연결하고 Connection 인스턴스 구함
		Connection conn = DriverManager.getConnection(db_url,"user05","user05");
		return conn;
	}

	private void closeAll(ResultSet rs, Statement stmt, Connection conn){
		try {
			if(rs!=null)rs.close();
			if(stmt!=null)stmt.close();
			if(conn!=null)conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public ArrayList<Employee> getAllEmps(){
		String sql ="select * from employee";
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		try {
			conn = getConn();
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			Employee emp = null;
			ArrayList<Employee> list = new ArrayList<Employee>();
			while(rs.next()){
				emp = new Employee();
				emp.setEmpno(rs.getInt("EMPNO"));
				emp.setEname(rs.getString("ENAME"));
				emp.setDeptno(rs.getInt("DEPTNO"));
				list.add(emp);
			}
			return list;
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			closeAll(rs, stmt, conn);
		}
		return null;
	}

	// 사번을 전달받고 데이터베이스를 검색하여 해당 사원의 상세정보를 리턴한다
	// @param empno 검색할 사원의 사번
	// @return Employee 사원의 상세정보를 저장하고 있는 DTO
	public Employee getEmp(int empno){
		String sql = "select * from employee where empno="+empno;
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		try {
			conn = getConn();
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			if (rs.next()){
				Employee emp = new Employee();
				emp.setEmpno(rs.getInt("EMPNO"));
				emp.setEname(rs.getString("ENAME"));
				emp.setDeptno(rs.getInt("DEPTNO"));
				emp.setHiredate(rs.getString("HIREDATE"));
				emp.setSal(rs.getInt("SAL"));
				emp.setMgr(rs.getInt("MGR"));
				return emp;
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally{
			closeAll(rs, stmt, conn);
		}
		return null;
	}
}

empDesc.jsp
<%@page import="web.jdbc.test.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:useBean id="dao" class="web.jdbc.test.EmpDAO"/>
<% 
	int empno = Integer.valueOf(request.getParameter("empno")); 
	Employee emp = dao.getEmp(empno);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<style type="text/css">
	table {border: 1px solid black;}
	td {text-align: center;}
	th {border: 1px solid black; background-color: green; }
</style>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>사원의 상세정보 보기</title>
</head>
<body>
<table>
<tr>
	<td colspan="4"><h1>사번이 <%=empno %>인 사원의 상세정보</h1></td>
</tr>
<tr>
	<td>사번</td><td><%=empno %></td>
	<td>이름</td><td><%=emp.getEname() %></td>
</tr>
<tr>
	<td>부서</td><td><%=emp.getDeptno()%></td>
	<td>입사일</td><td><%=emp.getHiredate()%></td>
</tr>
<tr>
	<td>급여</td><td><%=emp.getSal()%></td>
	<td>매니져</td><td><%=emp.getMgr()%></td>
</tr>
</table>
</body>
</html>
empList.jsp
<%@page import="web.jdbc.test.Employee"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:useBean id="dao" class="web.jdbc.test.EmpDAO"/>
<%
	ArrayList<Employee> list = dao.getAllEmps();
%>

<!DOCTYPE html>
<html>
<head>
<style type="text/css">
	table {border: 1px solid black;}
	td {text-align: center;}
	th {border: 1px solid black; background-color: green; }
</style>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>오라클 접속 테스트</title>
</head>
<body>
<table rules="rows">
<tr>
	<th>Empno</th>
	<th>Ename</th>
	<th>Deptno</th>
</tr>
<%
	for(int i=0;i<list.size();i++){
		Employee emp = list.get(i);
		int empno = emp.getEmpno();
		%>
		<tr>
		<td><%=empno %></td> 
		<td><a href="empDesc.jsp?empno=<%=empno%>"><%=emp.getEname() %></a></td> 
		<td><%=emp.getDeptno() %></td>
		</tr>
	<%}
%>
</table>
</body>
</html>






http://dl.dropbox.com/u/92046264/303jsp/


JDBC Test in Oracle


Java 프로그램과 연결할 때 사용할 JDBC Driver는 설치된 Oracle 디렉토리에서 검색해보면 해당 오라클 버전의 JDBC Driver를 찾을 수가 있다. 만약 찾지 못하면 아래에서 다운로드할 수 있다.

ojdbc14.jar


package web.jdbc.test;
import java.sql.*;

public class OracleTest {
	public static void main(String[] args)  {
		// 데이터베이스 연결관련 변수 선언
		Connection conn = null;
		Statement stmt = null;

		// 데이터베이스 연결관련정보를 문자열로 선언
		String jdbc_driver = "oracle.jdbc.OracleDriver";
		String db_url = "jdbc:oracle:thin:@211.183.3.5:1521:ORCL";

		try{
			// JDBC 드라이버 로드하여 DriverManager에 등록함
			Class.forName(jdbc_driver);

			// 로드된 드라이버를 이용하여 DB와 연결하고 Connection 인스턴스 구함
			conn = DriverManager.getConnection(db_url,"user09","user09");

			// Connection 객체로 부터 SQL문 작성을 위한 Statement 준비
			stmt = conn.createStatement();

			ResultSet rs = stmt.executeQuery("select * from emp");
			while(rs.next()) {
				System.out.println(rs.getString(1)+" " +rs.getString(2)+" " +rs.getString(3)+" " +rs.getString(4)+" " +rs.getString(5));
			}
			rs.close();
			stmt.close();
			conn.close();
		}
		catch(Exception e) {
			System.out.println(e);
		}
		System.out.println("테스트 끝");
	}
}



오라클 디비랑 잘 연결 되어서 요렇게 출력된다~~







DAO - data access object

DTO - data transfer object

ORM - (Object-relational mapping)








oracleTest.jsp
<%@page import="web.jdbc.test.Employee"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<jsp:useBean id="dao" class="web.jdbc.test.EmpDAO"/>
<%
	ArrayList<Employee> list = dao.getAllEmps();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>오라클 접속 테스트</title>
</head>
<body>
<ol>
<%
	for(int i=0;i<list.size();i++){
		Employee emp = list.get(i);%>
		<li><%=emp.getEmpno() %> / <%=emp.getEname() %> / <%=emp.getDeptno() %>
	<%}
%>
</ol>
</body>
</html>
Employee.java
package web.jdbc.test;

public class Employee {
	
	private int empno; //사원번호
	private String ename;//사원이름
	private int deptno;//부서번호
	private String hiredate;//고용날짜
	private int sal;//봉급
	private int mgr;//매니져
	
	public int getEmpno() {
		return empno;
	}
	public void setEmpno(int empno) {
		this.empno = empno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String eanme) {
		this.ename = eanme;
	}
	public int getDeptno() {
		return deptno;
	}
	public void setDeptno(int deptno) {
		this.deptno = deptno;
	}
	public String getHiredate() {
		return hiredate;
	}
	public void setHiredate(String hiredate) {
		this.hiredate = hiredate;
	}
	public int getSal() {
		return sal;
	}
	public void setSal(int sal) {
		this.sal = sal;
	}
	public int getMgr() {
		return mgr;
	}
	public void setMgr(int mgr) {
		this.mgr = mgr;
	}	
}

EmpDAO.java
package web.jdbc.test;

import java.sql.*;
import java.util.ArrayList;

public class EmpDAO {
	// 데이터베이스 연결관련 변수 선언
	private Connection conn = null;
	private Statement stmt = null;
	private ResultSet rs = null;

	// 데이터베이스 연결관련정보를 문자열로 선언
	String jdbc_driver = "oracle.jdbc.OracleDriver";//ojdbc14.jar에 있다.
	String db_url = "jdbc:oracle:thin:@211.183.3.5:1521:ORCL";

	private Connection getConn() throws Exception{

		// JDBC 드라이버 로드하여 DriverManager에 등록함
		Class.forName(jdbc_driver);

		// 로드된 드라이버를 이용하여 DB와 연결하고 Connection 인스턴스 구함
		Connection conn = DriverManager.getConnection(db_url,"user09","user09");
		return conn;
	}

	private void closeAll(ResultSet rs,Statement stmt,Connection conn){
		try{
			if(rs!=null)rs.close();
			if(stmt!=null)stmt.close();
			if(conn!=null)conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public ArrayList<Employee> getAllEmps(){
		String sql="select * from emp";
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs =null;
		try {
			conn = getConn();
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			Employee emp = null;
			ArrayList<Employee> list = new ArrayList<Employee>();
			while(rs.next()){
				emp = new Employee();
				emp.setEmpno(rs.getInt("EMPNO"));
				emp.setEname(rs.getString("ENAME"));
				emp.setDeptno(rs.getInt("DEPTNO"));
				list.add(emp);
			}
			return list;
		} catch (Exception e) {
			e.printStackTrace();
		}finally{//오류와 관련없이 항상 실행
			closeAll(rs,stmt,conn);
		}
		return null;
	}
}



'JSP > 2012.04강의(MySQL)' 카테고리의 다른 글

복습10  (0) 2012.07.17
복습8  (0) 2012.07.13
복습7 회원 정보 저장 폼  (0) 2012.07.12
복습6 Cookie,Session을 이용한 login 처리,자바빈(JavaBeans)  (0) 2012.07.11
복습5 페이지 모듈화,error page,Cookie  (0) 2012.07.10

표현 언어


Expression Language

JSP에서 사용가능한 새로운 스크립트 언어

EL의 주요 기능

JSP의 네 가지 기본 객체가 제공하는 영역의 속성 사용

Collection 객체, 배열에 대한 접근 방법 제공

수치 연산, 관계 연산, 논리 연산자 제공

자바 클래스 메서드 호출 기능 제공

표현언어만의 기본 객체 제공

간단한 구문 때문에 표현식 대신 사용

기본 문법

${expr}, #{expr}

사용예

<jsp:include page="/module/${skin.id}/header.jsp" />

<b>${sessionScope.member.id}</b>님 환영합니다.

${expr}은 표현식이 실행되는 시점에 바로 값 계산

#{expr}은 값이 실제로 필요한 시점에 값 계산

JSP 템플릿 텍스트에서는 사용 불가

스크립트 요소(스크립트릿, 표현식, 선언부)를 제외한 나머지 부분에서 사용




${expr}#{expr}의 동작 방식 예

<% 
    Member m = new Member();
    m.setName("이름1");
%>
<c:set var="m" value="<%= m %>" /><%--선언시의 값을 가짐--%> 

<%-- 이 시점에는 값 생성하지 않음 --%>
<c:set var="name" value="#{m.name}" /><%--현재 값을 가지지 않음--%>

<% m.setName("이름2"); %>

${name} <%-- 사용될 때 값 계산, "이름2" 출력 --%>

<% m.setName("이름3"); %>

${name} <%-- 사용될 때 값 계산, "이름3" 출력 --%>




EL에서 기본 객체





예제
EL은 영역 개체에 있어야 인식한다.
package test.bean;

public class Member {
	
	private String name;
	private String id;
	private String pwd;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
	
}

<%@ page import="test.bean.Member" %>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%
	Member m = new Member();
	m.setId("myID");
	m.setPwd("myPWD");
	m.setName("김연아");
	pageContext.setAttribute("m", m);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title></title>
</head>
<body>
회원 이름:[${m.name }]
</body>
</html>
<%@ page import="test.bean.Member" %>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<jsp:useBean id="m" class="test.bean.Member">
	<jsp:setProperty name="m" property="name" value="김연아"/>
	<jsp:setProperty name="m" property="id" value="myID"/>
	<jsp:setProperty name="m" property="pwd" value="myPWD"/>
</jsp:useBean>    
<%-- <%
	Member m = new Member();
	m.setId("myID");
	m.setPwd("myPWD");
	m.setName("김연아");
	pageContext.setAttribute("m", m);
%> --%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title></title>
</head>
<body>
회원 이름:[${m.name }]
<%=m.getName() %>
</body>
</html>




<%@ page import="test.bean.Member" %>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%
	String[] name={"강호동","이수근","김종민"};
	pageContext.setAttribute("arr", name);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title></title>
</head>
<body>
<%=name[0] %><p/>
${arr[0]}
</body>
</html>


<%@ page import="test.bean.Member" %>
<%@ page import="java.util.*" %>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%
	//String[] name={"강호동","이수근","김종민"};
	ArrayList<String> name= new ArrayList<String>();
	name.add("강호동");
	name.add("이수근");
	name.add("김종민");
	HashMap<String,String> map = new HashMap<String,String>();
	map.put("1", "강호동");
	map.put("2", "이수근");
	map.put("three", "김종민");
	pageContext.setAttribute("map", map);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title></title>
</head>
<body>
<%=map.get("1") %><p/>
${ map["1"]}<p/>
${ map.three }<!-- map에 영문이 아니면 오류가 난다. -->
</body>
</html>
<%@ page import="test.bean.Member" %>
<%@ page import="java.util.*" %>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%
	//String[] name={"강호동","이수근","김종민"};
	ArrayList<String> name= new ArrayList<String>();
	name.add("강호동");
	name.add("이수근");
	name.add("김종민");
	HashMap<String,String> map = new HashMap<String,String>();
	map.put("강호동", "123-12321");
	map.put("이수근", "123-1232-2323");
	map.put("김종민", "234-2343-3242");
	pageContext.setAttribute("map", map);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title></title>
</head>
<body>
<%=map.get("김종민") %><p/>
${ map["김종민"]}<p/>
</body>
</html>



session 영역에서 값을 가져와서 nextPage에 출력

<%@ page import="test.bean.Member" %>
<%@ page import="java.util.*" %>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%
	//String[] name={"강호동","이수근","김종민"};
	ArrayList<String> name= new ArrayList<String>();
	name.add("강호동");
	name.add("이수근");
	name.add("김종민");
	HashMap<String,String> map = new HashMap<String,String>();
	map.put("강호동", "123-12321");
	map.put("이수근", "123-1232-2323");
	map.put("김종민", "234-2343-3242");
	session.setAttribute("map", map);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title></title>
</head>
<body>
<a href="nextPage.jsp">다음페이지로 이동</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
&lt연락처&gt <p/>
강호동:${ map["강호동"]}<p/>
이수근:${ map["이수근"]}<p/>
김종민:${ map["김종민"]}<p/>
</body>
</html>


01


<%@ page import="test.bean.Member" %>
<%@ page import="java.util.*" %>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%
	//String[] name={"강호동","이수근","김종민"};
	ArrayList<String> name= new ArrayList<String>();
	name.add("강호동");
	name.add("이수근");
	name.add("김종민");
	HashMap<String,String> map = new HashMap<String,String>();
	map.put("강호동", "123-12321");
	map.put("이수근", "123-1232-2323");
	map.put("김종민", "234-2343-3242");
	request.setAttribute("map", map);
%>
<jsp:forward page="nextPage.jsp"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title></title>
</head>
<body>
<a href="nextPage.jsp">다음페이지로 이동</a>
</body>
</html>




<%@ page import="test.bean.*, java.util.*" %>
<%@ page contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<jsp:useBean id="m" class="test.bean.Member" scope="request">
	<jsp:setProperty name="m" property="name" value="김종민"/>
	<jsp:setProperty name="m" property="id" value="myID"/>
	<jsp:setProperty name="m" property="pwd" value="myPWD"/>
</jsp:useBean>
<jsp:forward page="nextPage.jsp"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title></title>
</head>
<body>
<a href="nextPage.jsp">다음페이지로 이동</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<jsp:useBean id="m" class="test.bean.Member"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
${m.name}<p/>
${m.id}<p/>
${m.pwd}<p/>
</body>
</html>




<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>브라우저에서 전달된 파라미터</title>
</head>
<body>
아이디 : ${param.id }<br/>
암호 : ${param.pwd }<br/>
</body>
</html>



+ Recent posts