검색결과 리스트
글
자바 스크립트
1. 자바 스크립트
-HTML 에 포함 되어 웹 페이지에 동적인 효과를 주거나 사용자가 입력한 데이터의 유효성 검사를 위해 사용
(유효성 검사: id가 맞는지 pw가 맞는지)
-주석 ://사용
첫번째 사용법
<script language="JavaScript">
자바스크립트 프로그램
</script>
두번째 사용법
<script language="JavaScript"src="hello.js"> (src를 이용하여 필요한 파일 불러온다)
</script>
2. 자바 스크립트 함수
-C나 자바와 같이 함수 선언하여 사용가능
3. 자바스크립트에서 HTML 객체 접근
-DOM(Document Object Model)방식을 이용해 HTML 문서의 내부 구조에 접근, 변경 가능
-웹 브라우저는 HTML문서, 그림, 폼 등의 각 객체를 대표하는 객체 인스턴스를 생성 관리
4. 사용자 입력을 처리 하는 함수
-alert() : 경고 메시지를 보여주기 위해 사용
-confirm() : 확인 버튼과 취소버튼이 있는 메시지 창을 보여주기 위해 사용
확인-> true 취소->false 값을 리턴
-prompt() : 사용자가 입력한 값을 받기 위해 창을 보여준다
확인->입력값 취소 -> null값이 리턴
설정
트랙백
댓글
글
유용한 HTML태그들
1. iframe
-HTML문서에 다른 HTML문서 삽입
-속성 (align, frameborder,height, width, marginheight, margiwidth,name, scorolling,src)
2. marquee
-IE(인터넷 익스플로어)에서 메시지 스크롤
-속성(behavior, direction, scrollamount, scrolldelay, height, width, onmouseover, onmouseout)
3. meta
-웹브라우저의 행동제어, 검색 키워드 저장
-head 태그 내에 저장
-속성
"http-equiv","name" :이름
-"content" :값
4. form
-HTML에서 사용자가 값을 입력할 수 있도록 제공
- input, select, textarea 사용할 수 있다
-속성(action, method, enctype, target, onsubmit, onreset) on이 붙은건 이벤트라 본다
* GET방식 - 문서를 요청하는 방식, 페이지를 이동하고자 할때
*POST - 데이터를 전달하는 방식
5. input (form 태그 안에 있다)
-사용자가 값을 입력
-속성( name, type, value, checked, size, maxlength
-type종류 (button, text, password, chechbox, radio, submit, reset, hidden, image, file)
6. 폼 관련 태그들( select, option)
-드롭 다운 형태의 메뉴
-아이템을 표기하기 위해 option 태그 사용
-속성(name, size, multiple, onfocus, onblur, onchange)
7.폼 관련 태그들(textarea)
-여러 줄에 걸쳐 글을 입력할 때 사용
-<textarea>와</textarea>태그 사에이 있는 글을 기본 텍스트로 화면 표시
-속성(name, rows, cols, readonly, onfocus, onblur, onselect)
설정
트랙백
댓글
글
JSP 디렉티브1
1. 디렉티브란?
-해당 JSP 페이지와 관련된 정보를 나타낼 때 쓰는 태그
-형식
<%& 디렉티브 속성1="값1" 속성2="값2"...%>
2.디렉티브 종류
-page : 해당 페이지의 전체적인 특성을 나타냄
-include : 다른 페이지를 포함하고 싶을때
-taglib : 기능확장을 위해 상용할 커스텀 태그의 경로를 지정할때
'개발 > 코딩' 카테고리의 다른 글
자바 스크립트 (0) | 2013.11.19 |
---|---|
유용한 HTML태그들 (0) | 2013.11.19 |
서블릿 설명 홈피 (0) | 2013.11.18 |
JSP 스크립트 1 (0) | 2013.11.15 |
JSP 작동방식 (1) | 2013.11.15 |
설정
트랙백
댓글
글
서블릿 설명 홈피
'개발 > 코딩' 카테고리의 다른 글
유용한 HTML태그들 (0) | 2013.11.19 |
---|---|
JSP 디렉티브1 (0) | 2013.11.19 |
JSP 스크립트 1 (0) | 2013.11.15 |
JSP 작동방식 (1) | 2013.11.15 |
JSP특징 (0) | 2013.11.15 |
설정
트랙백
댓글
글
JSP 스크립트 1
1.선언부
-형식
<%!
//변수 또는 메소드를 선언하는 문장들
%>
ex)
<%!
private int num=0;
public static int count=0;
double getDistance() 메소드
{
return distance;
}
%>
2.표현식
-형식
<%=
//변수 메소드 특정객체 수식등 (특정객체, toString등)
%>
ex)
<%!
String s="This is a test";
int i=1000;
Point2D.Double myPoint=new Point2D.Double(5.0,10.0);
<%=s%> <%=i%> <%=myPoint%>
3.스크립트릿
-형식
<%
선언부와 표현식을 제외한 모든 자바코드 (반복문, 제어문 등)
%>
ex)
<%
int i=0; 선언부 이지만 들어갈수 있다
for(i=0;i<5;i++){
%>
//여기에 반복되는 문장이 들어간다
<%
}
%>
설정
트랙백
댓글
글
JSP 작동방식
1.JSP의 작동 원리
-사용자가 서버에 JSP페이지를 요청
-해당 페이지에 대한 서블릿이 있는지 검사
-서블릿이 존재할 경우 메모리에 로드시켜 해당 페이지에 대한 응답객체 생성
요청 객체 (request) 응답객체 (response)
-서블릿이 없을 경우 해당 페이지에 대한 서블릿을 생성
-특정 폴더에 서블릿을 저장 (페이지요청을 할때마다 이미 작성된 자바 파일을 불러온다)
-이후 같은 페이지 요청시 메모리 상의 서블릿을 실행시켜 응답 객체를 생성
2. 간단한 예제
-톰캣으로 서버를 시작
-Hello.jsp 페이지를 작성
<html>
<head>
<title>예제</title>
</head>
<body>
<h3>안녕하세요</h3>
</body>
</html>
-웹사이트의 모든 파일이 시작되는 폴더인 ROOT폴더에 저장(폼캣 폴더에 있다 )
-브라우저를 열어 http://localhost:8080/폴더명/파일명.jsp 포트로 접속(톰캣이 제공하는 기본포트)
-파일명을 쳐주고, 실행된 화면을 확인후 서블릿이 저장되는 WORK폴더에 가서 서블릿을 확인
설정
트랙백
댓글
글
JSP특징
1. HTML의 한계
-사용자의 요청에 의해 이미 작성되어진 정적인 페이지만을 일방적으로 전달
-데이터 베이스와의 연동 불가
-지속적인 연결이 이루어지지 않음
2.CGI(Common Gateway Interface)의 활용과 한계
-데이터 베이스와 연동 가능
-사용자가 입력한 값 또는 정보에 따라 서버에서 동적인 결과를 생성
-사용자의 요청에 대해서 각각의 프로세스를 생성
-접속자가 많을 수록 메모리를 많이 사용하여 서버에 부담 증가
3.서블릿의 활용과 한계
-자바를 기반으로 작성하므로 자바에서 제공하는 풍부한 API를 사용할 수 있고 객체 지향적으로 작성 가능
-멀티스레드 방식의 사용으로 각각의 사용자마다 스레드를 생성하며 서버의 부담을 극소화
-디자인을 표현하는 표현부와 논리적인 부분을 구성하는 구현부가 분리되지 않음
4.JSP의 장점
-자바 가상머신(JVM)이 설치된 어떠한 운영체제에서도 플랫폼에 독립적으로 실행 가능
-자바기반의 언어이므로 자바에서 제공하는 API,멀티스레드,객체 지향 프로그래밍의 기법을 그대로 사용가능
-보여주는 표현부와 내부적인 로직을 나타내는 구현부를 분리하여 각각의 영역에서 효율적으로 작업 가능
-작성한 컴포넌트는 언제든지 재사용 가능
설정
트랙백
댓글
글
ORACLE 이론 및 코딩하는방법
DBMS( Data Base Management System)- 오라클, My SQL(오라클에서 인수), SQL server
: 데이터를 효과적으로 이용할 수 있도록 정리,보관하기 위한 소프트 웨어
SQL ( Structed Query Language)
: 구조화된 질의어
DB : 데이터를 관리하는 방법의 하나 ( 기존 데이터 결함 => 중복된 데이터를 없애서 관리)
SQL용어 : 1. DDL ( Data Definition Language)-CREATE, ALTER, DROP
2. DML ( Data Manipulation Language)-SELECT, INSERT, UPDATA, DELETE
3. DCL
데이터 형식의 종류
1. 숫자 - NUMBER
2. 문자 - ' ' 1. VARCHAR2(50) - 최대 50개 가변길이의 문자
2. NVARCHAR2 - 가변길이의 유니코드 문자
3. CHAR -고정길이의 문자
4. NCHAR - 고정길이의 유니코드 문자
3. 날짜 - DATE
4. 날짜+시간 - TIMESTAMP
" " 용도 1. 띄어쓰기 할때 "AB CD"
2. 허락되지 않은 컬럼명을 사용하기 위해
메타 데이터 : 사용자 데이터를 저장하기 위한 데이터, 데이터를 위한 데이터
Dictionary : 메타 데이터의 저장소
NVL(AVG(AGE),0) NULL값을 0으로 바꿔준다,
CREATE TABLE STUDENTS(
"SID" VARCHAR2(15),
"PWD" VARCHAR2(15),
"NAME" VARCHAR2(20),
"GENDER" VARCHAR2(10),
"AGE" NUMBER,
"BIRTHDAY" CHAR(10),
"MAJOR" VARCHAR2(50) ,
"ADDRESS" VARCHAR2(100),
"PHONE" VARCHAR2(13),
"SSN" CHAR(14),
"IP" VARCHAR2(15),
"REGDATE" DATE
)
컬럼을 추가할 경우
ALTER TABLE "STUDENTS" ADD "CITY" VARCHAR2
컬럼을 삭제할 경우
ALTER TABLE "STUDENTS" DROP COLUMN"CITY"
컬럼의 스타일 변경할 경우
ALTER TABLE "STUDENTS" MODIFY "CITY" TIMESTAMP
테이블 생성
CREATE TABLE "STUDENTS"
테이블 삭제
DROP TABLE "STUDENTS"
칼럼에 값 넣기
INSERT INTO STUDENTS (SID,PWD) VALUES ('김창훈','777')
데이터 조회하기
SELECT * FROM STUDENTS : STUDENTS에 있는 데이터를 전부 조회.
조회하고 싶은것을 선택하고 싶은때는 * 대신 SID,PWD를 쓰면 된다.
DELETE STUDENTS WHERE SID='NA'
:SID의 NA가 포함된것 삭제
KCH가 있는 곳에 이름이랑 성별 업뎃
UPDATE STUDENTS SET NAME='창훈',GENDER='남' WHERE SID='KCH'
데이터 조회하기 이것들은 로그에 임시로 저장해 놓은 상태이다
ROLLBACK하면 쉬소, COMMIT 하면 완전 저장
SQL 연산자
나이에 +10 : SELECT AGE+10 FROM STUDENTS
원하는 컬럼만 조회 : SELECT SID,NAME FROM STUDENTS
원하는 컬럼을 별칭줘서 조회 : SELECT SID AS ID FROM STUDENTS
AS는 생략해도 된다
테이블 컬럼이 없을때 계산 방법
SELECT '3'+10 FROM DUAL : DUAL은 임의의 테이블
-> +는 무조건 숫자만 연산하려 하기 때문에
'3'을 숫자 3으로 변경
'3'을 'A'로 바꾸면 수치가 부족하다는 에러가 뜸
문자열을 더해주는 연산자 ||
SELECT 'A'||'BC' FROM DUAL : 계산결과 ABC
나이가 20이상인것만 조회하시오
SELECT * FROM STUDENTS WHERE AGE>20;
주소를 입력하지 않을것을 조회하시오
SELECT * FROM STUDENTS WHERE ADDRESS IS NULL
주소 입력한 것을 조회하시오
SELECT * FROM STUDENTS WHERE ADDRESS IS NOT NULL
나이가 20,21,22인 회원을 조회하시오
SELECT * FROM STUDENTS WHERE AGE=20 OR AGE=21 OR AGE=22;
SELECT * FROM STUDENTS WHERE 20<=AGE AND AGE<=22;
SELECT * FROM STUDENTS WHERE AGE BETWEEN 20 AND 22;
나이가 20,25,27인 회원을 조회하시오
SELECT * FROM STUDENTS WHERE AGE=20 OR AGE=25 OR AGE=27;
SELECT * FROM STUDENTS WHERE AGE IN (20,25,27);
나이가 20,25,27이 아닌 회원을 조회하시오
SELECT * FROM STUDENTS WHERE AGE NOT IN (20,25,27);
회원중에 김씨 성을 조회하시오
SELECT * FROM STUDENTS WHERE NAME LIKE '김%';
회원중에 김씨성을 제외한 회원을 조회하시오
SELECT * FROM STUDENTS WHERE NAME NOT LIKE '김%';
회원중에 박이 들어간 사람들 조회하시오
SELECT * FROM STUDENTS WHERE NAME LIKE '%박%';
: 앞뒤 어떤 길이의 문자가 와도 박이 들어가면 조회
SELECT * FROM STUDENTS WHERE NAME LIKE '박_';
: 박뒤에 한글자만 있는 사람을 조회(자릿수를 결정)
회원의 나이를 조회하고, 동일한 나이는 생략
SELECT DISTINCT AGE FROM STUDENTS;
모든 회원을 조회하시오. 단 레코드 번호를 함께 출력하시오
SELECT ROWNUM, STUDENTS.* FROM STUDENTS
ROWNUM 은 오라클에서 제공하는 행넘버
1번째 회원부터 5번째 회원까지만 조회하시오.
SELECT * FROM STUDENTS WHERE ROWNUM BETWEEN 1 AND 5;
SELECT ROWNUM, STUDENTS.* FROM STUDENTS WHERE ROWNUM BETWEEN 1 AND 5;
문자열 덧셈 함수
SELECT CONCAT('홍','길동')FROM DUAL
문자와 코드
SELECT ASCII('Q')FROM DUAL
73번째 문자
SELECT CHR(73) FROM DUAL;
문자열 추출함수 SUBSTR(문자열,시작위치,길이)
SELECT SUBSTR('HELLO',1,3)FROM DUAL : 결과 HEL
SELECT SUBSTR('HELLO',0,3)FROM DUAL : 0에서부터 글자를 만나는 순간부터 3개 뽑아냄
SELECT SUBSTR('HELLO',3)FROM DUAL :결과 LLO
이름과 생년월일에서 월만 조회
SELECT NAME,SUBSTR(BIRTHDAY,6,2) FROM STUDENTS
문자열을 소문자,대문자로 변경하기
SELECT LOWER('NeWIEC')FROM DUAL; : 다 소문자로 변경
SELECT UPPER('neWLec')FROM DUAL; : 다 대문자로 변경
회원의 아이디가 NEWLEC인 회원을 조회하시오(대소문자 안가림)
SELECT * FROM STUDENTS WHERE UPPER(SID)=UPPER('NEWLEC');
--다 대문자로 바꿔놓고 조회 (근데 왜 대문자로 안바뀌지??)
문자열 대치 함수 REPLACE(문자열,찾는문자열,대치할 문자열)/TRANSLATE()
SELECT REPLACE ('WHERE WE ARE','WE','YOU') FROM DUAL;
:WHERE YOU ARE (WE 를 YOU로 바꿔줌)
SELECT TRANSLATE ('WHERE WE ARE','WE','YOU') FROM DUAL;
:YHORO YO ARO (W를 Y로,E를 O로)
주소를 띄어쓰기 없이 출력
SELECT REPLACE (ADDRESS,' ','') FROM STUDENTS ;
첫글자를 대문자로 바꿔주는 역할
SELECT INITCAP('the most important thing is..')FROM DUAL;
: The Most Important Thing Is..
문자열 패딩 함수(5글자지만 10개로 늘리고싶다)
SELECT LPAD('HELLO',10,'0')FROM DUAL;
:00000HELLO
문자열의 길이를 얻는 함수
SELECT LENGTH('WHERE WE ARE')FROM DUAL;
: 12
모든 회원의 핸드폰 번호와 번호의 문자열 길이를 조회
SELECT PHONE,LENGTH(PHONE)FROM STUDENTS
문자열 검색함수 INSTR(문자열,검색문자열,위치,찾을수)
SELECT INSTR('ALL WE NEED TO IS JUST TO..','TO')FROM DUAL
: 13
SELECT INSTR('ALL WE NEED TO IS JUST TO..','TO',15)FROM DUAL
:여기서 15는 15번째부터 찾아라.
SELECT INSTR('ALL WE NEED TO IS JUST TO..','TO',1,2)FROM DUAL
:1번째부터 검색하고,2번째 TO를 찾아라
회원의 전화번호에서 두번째 -가 존재하는 위치를 조회
SELECT PHONE,INSTR(PHONE,'-',1,2)FROM STUDENTS
회원의 전화번호에서 첫번째-와 두번째- 문자 간격?
SELECT PHONE,INSTR(PHONE,'-',1,2)-INSTR(PHONE,'-',1,1)-1 FROM STUDENTS
회원의 전화번호에서 첫번째와 두번째 사이의 번호를 출력하시오.
SELECT PHONE,SUBSTR(PHONE,5,INSTR(PHONE,'-',1,2)-INSTR(PHONE,'-',1,1)-1) FROM STUDENTS;
회원중에서 앞번호가 016인거
SELECT * FROM STUDENTS WHERE PHONE LIKE'016%';
현재 시간을 얻는 함수
SELECT SYSDATE, CURRENT_DATE, SYSTIMESTAMP, CURRENT_TIMESTAMP FROM DUAL
:SYSDATE 현재 날짜
CURRENT_DATE 접속자의 시간
SYSTIMESTAMP 시간까지 나오는거
CURRENT_TIMESTAMP 시간,지역
날짜 추출함수 EXTRACT(YEAR/MONTH/DAY/HOUR/MINUTE/SECOND FROM)
SELECT EXTRACT(YEAR FROM SYSDATE)FROM DUAL
:년도만 출력
SELECT EXTRACT(DAY FROM SYSDATE)FROM DUAL
:월만 출력
가입 회원중에 2,3,11,12월달에 가입한 회원을 조회
SELECT * FROM STUDENTS WHERE EXTRACT(MONTH FROM BIRTHDAY)IN (2,3,11,12) ;
가입일이 현재로부터 6개월이 안된 회원 조회
SELECT * FROM STUDENTS WHERE EXTRACT(MONTH FROM SYSDATE)-EXTRACT(MONTH FROM REGDATE)<6;
: 현재 날짜에서 가입날짜를 빼고 6보다 작으면 출력
SELECT * FROM STUDENTS WHERE REGDATE>ADD_MONTHS(SYSDATE,-6);
구절문
SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY
순서가 바뀌면 안된다.
원하는 행을 필터링: WHERE
그룹으로 묶어서 조회하기 위한 구절
:GROUP BY/HAVING
정렬을 위한 구절
:ORDER BY
정렬순서
ASC(ascending,오름차순)DESC(descending,내림차순)
이름을 기준으로 역순으로 정렬해서 조회
SELECT*FROM STUDENTS ORDER BY NAME DESC
김씨성을 조회하고 나이는 오름차순으로 정렬
SELECT*FROM STUDENTS WHERE NAME LIKE '김%' ORDER BY AGE ASC
:1.FROM STUDENTS 가 먼저 실행
2.WHERE NAME LIKE 가 실행
3.ORDER BY 가 실행
4.SELECT 실행
나이를 기준으로 역순 정렬, 나이가 같을 경우 아이디를 기준으로 오름차순 정렬
SELECT*FROM STUDENTS ORDER BY AGE DESC,NAME ASC
집계 함수
SUM, MIN, MAX, COUNT, AVG
가입한 회원수를 조회
SELECT COUNT(SID) FROM STUDENTS
가입한 회원의 성별 회원수를 조회
SELECT GENDER,COUNT(SID) FROM STUDENTS GROUP BY GENDER
가입한 회원의 나이대별 회원수를 역정렬
SELECT AGE,COUNT(SID) FROM STUDENTS GROUP BY AGE ORDER BY COUNT(SID) DESC
성별 평균 나이
SELECT GENDER,AVG(AGE) FROM STUDENTS GROUP BY GENDER
성씨 몇명이 있는지 조회
SELECT SUBSTR(NAME,1,1),COUNT(NAME) FROM STUDENTS GROUP BY SUBSTR(NAME,1,1);
박씨성의 회원수
SELECT COUNT(SID)FROM STUDENTS WHERE NAME LIKE '박%';
SELECT COUNT(SID)FROM STUDENTS WHERE SUBSTR(NAME,1,1)='박';
부조회(서브쿼리)
값을 얻는 종류 :
단일형(스칼라, COUNT,SUM,MIN등. 서브 쿼리를 넣을 수 있는 공간 GROUP BY, ORDER BY),
목록형(서브 쿼리를 넣을 수 있는 공간 WHERE,HAVING)
격자형(서브 쿼리를 넣을수 있는 공간 FROM)
동적인 결과를 얻기위해 구절의 순서가 중요한경우
SELECT *FROM STUDENTS WHERE ROWNUM BETWEEN 1 AND 10;
이름 순으로 역정렬한 결과에서 상위 열명을 원하는 경우라면?
SELECT*FROM STUDENTS ORDER BY NAME DESC WHERE ROWNUM BETWEEN 1 AND 10
:정렬한후 10명을 뽑아라 근데, 명령어가 올바르게 종료되지 않는 에러
SELECT*FROM (SELECT*FROM STUDENTS ORDER BY NAME DESC)WHERE ROWNUM BETWEEN 1 AND 10;
단일 값을 반환하는 경우:비교연산에 사용
SELECT*FROM STUDENTS WHERE AGE>(SELECT AVG(AGE) FROM STUDENTS)
:평균 나이보다 높은 사람출력,(SELECT AVG(AGE) FROM STUDENTS)이게 단일값
목록을 반화하는 경우:목록형 연산에 사용
SELECT*FROM STUDENTS WHERE AGE IN(SELECT AVG(AGE) FROM STUDENTS GROUP BY ADDRESS)
:도시별 나이 평균을 구하기 위해
서브 쿼리 연산자
(), ANY,EXISTS,ALL
모든 성별의 평균 나이보다 큰 회원만 출력
SELECT*FROM STUDENTS WHERE AGE>ALL(SELECT AVG(AGE) FROM STUDENTS GROUP BY GENDER)
:ALL은 각 성별의 나이의 평균을 구하고 그 중 큰 값을 뽑아내서 그보다 큰 나이를 출력
하나 이상의 성별 평균키보다 큰 회원을 출력
SELECT*FROM STUDENTS WHERE AGE>ANY(SELECT AVG(AGE) FROM STUDENTS GROUP BY GENDER)
:ANY 는 각 성별의 나이의 평균을 구하고 그 중 작은 값을 뽑아내서 그보다 작은 나이를 출력
조인
INNER JOIN, OUTER JOIN, SELF JOIN, CORSS JOIN
NOTICES 와 STUDENTS를 연결시켜주는거
SELECT SEQ,TITLE,WRITER,NAME FROM
STUDENTS INNER JOIN NOTICES ON STUDENTS.SID=NOTICES.WRITER
:각각에서 SEQ,TITLE,WRITER,NAME을 연결.여기서 SID와 WRITER이 동일해야한다.
필드 이름이 같을 경우(WRITEH가 NAME으로 변경됐다고 했을 경우)
SELECT NOTICES.SEQ, NOTICES.TITLE, STUDENTS.NAME FROM
STUDENTS INNER JOIN NOTICES ON STUDENTS.SID=NOTICES.WRITERH
필드 이름이 너무 길어서 귀찮다면 테이블의 별칭을 사용
SELECT N.SEQ, N.TITLE, S.NAME FROM
STUDENTS S INNER JOIN NOTICES N ON S.SID=N.WRITER
:주의-별칭만 사용을 해야한다
회원별 작성한 게시글 수
SELECT S.SID,S.NAME,COUNT(N.SEQ)FROM
STUDENTS S INNER JOIN NOTICES N ON S.SID=N.WRITER GROUP BY S.SID,S.NAME
참조키를 기준으로 일치하지 않는 행도 포함시키는 조인
SELECT STUDENTS.SID,STUDENTS.NAME,NOTICES.SEQ FROM
STUDENTS LEFT OUTER JOIN NOTICES ON STUDENTS.SID=NOTICES.WRITER
:LEFT대신 RIGHT, FULL을 넣어도 된다.
LEFT면 STUDENTS에서 글을 남기지 않은 사람의 값도 출력(?)
회원수 게시글이 0인것도 같이 출력
SELECT S.SID,S.NAME,COUNT(N.SEQ)FROM
STUDENTS S LEFT OUTER JOIN NOTICES N ON S.SID=N.WRITER GROUP BY S.SID,S.NAME;
자기가 자신을 참조하는 조인
SELECT B.NAME BOSS, M.NAME "MEMBER" FROM
STUDENTS B JOIN STUDENTS M ON B.SID=M.BOSS ORDER BY B.NAME;
컬럼이 같은 테이블의 레코드를 합치는 연산
SELECT SEQ,CONTENT,WRITER FROM NOTICES UNION
SELECT SEQ,CONTENT,WRITER FROM COMMENTS;
합쳐서 검색했는데, 검색이 어디서 됐는지 위치 확인
SELECT*FROM(
SELECT SEQ,CONTENT,WRITER,'NOTICES'TBL FROM NOTICES UNION
SELECT SEQ,CONTENT,WRITER,'COMMENTS'TBL FROM COMMENTS
)
WHERE CONTENT LIKE '%d%';
:TBL의 별칭에서 COMMENTS와 NOTICES를 표시해준다
검색된 결과가 테이블당 몇개인지 확인
SELECT TBL, COUNT(SEQ) FROM (
SELECT SEQ, 'NOTICES' TBL FROM NOTICES UNION
SELECT SEQ, 'COMMENTS' TBL FROM COMMENTS
)
GROUP BY TBL;
VIEW
조인 문장을 VIEW로 만들어 놓기
CREATE VIEW NOTICESVIEW777 AS
SELECT N.SEQ,N.TITLE,N.WRITER,S.NAME,COUNT(C.SEQ)CNT FROM
STUDENTS S RIGHT OUTER JOIN NOTICES N ON S.SID=N.WRITER
LEFT OUTER JOIN COMMENTS C ON N.SEQ=C.NOTICESEQ
GROUP BY N.SEQ,N.TITLE,N.WRITER,S.NAME;
VIEW를 이용해 쿼리하기
SELECT*FROM NOTICESVIEW777 WHERE TITLE LIKE '%오%'ORDER BY SEQ DESC;
게시글 나눠서 보기
SELECT *
FROM (SELECT ROWNUM NUM,N.* FROM (SELECT * FROM NOTICES ORDER BY REGDATE DESC)N)
WHERE NUM BETWEEN 1 AND 15;
'개발 > DB' 카테고리의 다른 글
해당 숫자에 몇건이 있는가? (0) | 2014.06.25 |
---|---|
해당월의 마지막 날짜 구하는 쿼리 (0) | 2014.05.13 |
TABLESPACE, TRUCATE (0) | 2014.04.07 |
날짜 갖고 놀기 (0) | 2014.03.28 |
실전에서!!! (0) | 2014.03.11 |
설정
트랙백
댓글
글
비행기 겜 완성
package shooting;
public class Program {
public static void main(String[] args){
//GameBoard gameBoard=new GameBoard(); 안된다 Frame부터 띄워야한다.
MainFrame frm=new MainFrame();
frm.setSize(450,700);
frm.setVisible(true);
}
}
==============================================
package shooting;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
public class MainFrame extends JFrame {
private SplashBoard splashBoard;
private GameBoard gameBoard;
private JMenuBar mainMenu;
private JMenu mnFile; //메뉴바 선택
private JMenu mnWindow; //메뉴바 선택
private JMenuItem miFileExit;
private JMenuItem miWindowSplash;
private JMenuItem miWindowGame;
public MainFrame() {
mainMenu = new JMenuBar();
mnFile = new JMenu("File");
miFileExit = new JMenuItem("Exit");//file 메뉴바에 속해있는 메뉴
mnWindow=new JMenu("Window");
miWindowSplash = new JMenuItem("Splash"); //Window메뉴바에 속해있는 메뉴
miWindowSplash.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { //화면전환
/*JOptionPane.showMessageDialog
(MainFrame.this,"스플레시입니다");*/
gameBoard.pause();
gameBoard.setVisible(false);
splashBoard.setVisible(true);
MainFrame.this.revalidate();
}
});
miWindowGame = new JMenuItem("Gmae"); //Window메뉴바에 속해있는 메뉴
miWindowGame.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { //화면전환
/* JOptionPane.showMessageDialog
(MainFrame.this,"게임입니다");*/
splashBoard.setVisible(false);
MainFrame.this.add(gameBoard);
gameBoard.setVisible(true);
gameBoard.start();
MainFrame.this.revalidate(); //사라졌던 잔재가 다시 호출
}
});
splashBoard=new SplashBoard();
gameBoard=new GameBoard();
mnFile.add(miFileExit); //메뉴에 붙여준다
mnWindow.add(miWindowSplash);
mnWindow.add(miWindowGame);
mainMenu.add(mnFile);
mainMenu.add(mnWindow);
this.setJMenuBar(mainMenu);
gameBoard.setFocusable(true); //겜 시작하자 마자 움직일 수 있도록.클릭안해도 됨
this.add(gameBoard); //이걸 해줘야 게임이 뜬다. add는 프레임에 보드 붙여준다.
this.add(splashBoard);
addWindowListener(new WindowAdapter() { //윈도창에 X표로 닫을 수 있게
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
===================================================
package shooting;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Random;
public class GameBoard extends Canvas implements Runnable { // 겜보드가 세가지를 가지고 있다.
private Fighter fighter; // Canvas는 윈도우가 제공해주는거(도화지 역할)
private ArrayList enemies;
private ArrayList userMissiles;
private StatusBar statusBar; // 정의만 한다
private Image img; // 함수를 구현할때 필요한 이미지
// 게임 상태 변수들
// updateItems를 위한 입력 변수
private int hKey;
private int vKey;
private int timerToEnemyAppear; // 적기 출현 시간
private int timerToFire; //미사일 발사 카운터
private int key;
private int space;
private Thread thread;
public GameBoard() {
hKey = 0;
vKey = 0;
timerToEnemyAppear = 0;
fighter = new Fighter(); // 객체 생성
statusBar = new StatusBar();
Toolkit tk = Toolkit.getDefaultToolkit(); // 윈도우 제공
img = tk.getImage("res/우주.jpg"); // 이미지 불러오는거
addKeyListener(new KeyAdapter() { // KeyListener와 달리 어탭더 안에 세가지 기능이 있다.
// public void keyPressed(KeyEvent
// e)
// public void keyReleased(KeyEvent
// e) { }
// public void keyTyped(KeyEvent e)
// { }
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_LEFT: // 왼쪽키
case KeyEvent.VK_RIGHT: // 오른쪽키
case KeyEvent.VK_DOWN:
case KeyEvent.VK_UP:
hKey = key;
vKey = key;
GameBoard.this.key = key;
break;
}
if (key == KeyEvent.VK_SPACE) //화살표랑 다르게 써줘야한다
space = key;
}
public void keyReleased(KeyEvent e) {
hKey=0;
vKey=0;
int key = e.getKeyCode();
super.keyReleased(e);
switch (key) {
case KeyEvent.VK_LEFT: // 비행기를 왼쪽으로
if (GameBoard.this.key == KeyEvent.VK_LEFT)
GameBoard.this.key = 0;
break;
case KeyEvent.VK_RIGHT:
if (GameBoard.this.key == KeyEvent.VK_RIGHT)
GameBoard.this.key = 0;
break;
case KeyEvent.VK_DOWN:
if (GameBoard.this.key == KeyEvent.VK_DOWN)
GameBoard.this.key = 0;
break;
case KeyEvent.VK_UP:
if (GameBoard.this.key == KeyEvent.VK_UP)
GameBoard.this.key = 0;
break;
}
if (key == KeyEvent.VK_SPACE)
space = 0;
}
});
enemies = new ArrayList();
userMissiles = new ArrayList();
}
public void start(){ //스레드 시작
if(thread==null){
thread =new Thread(this);
thread.start();
}
else
thread.resume();//멈췄던것을 다시
}
public void pause(){
thread.suspend();
}
public void stop(){
thread.stop();
}
public void run() {
while (true) {
updateItems();
repaint();
try {
Thread.sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void updateItems() {
Random rand = new Random();
if (hKey != 0)
fighter.move(hKey);
for (int i = 0; i < enemies.size(); i++)
((Enemy)enemies.get(i)).move();
if (timerToEnemyAppear-- == 0) {
enemies.add(new Enemy(this));
timerToEnemyAppear = (rand.nextInt(500) + 500) / 17; // 스레드가 17
} // 스레드 500이면 05초 0.5초~1초 사이에 하나 생성
if(timerToFire>0)
timerToFire--;
if (space == KeyEvent.VK_SPACE){ //스페이스라면 발사
if(timerToFire ==0){ //미사일 발사 카운터
UserMissile um=fighter.fire(); //미사일
userMissiles.add(um);
timerToFire=10;
}
}
for(int i=0;i<userMissiles.size();i++)
((UserMissile)userMissiles.get(i)).move();
for(int ei=0;ei<enemies.size();ei++){ //적기에 물어본다 부딪혔냐
Enemy en=(Enemy)enemies.get(ei);
for(int i=0;i<userMissiles.size();i++){ //미사일이 여러개
UserMissile um=(UserMissile)userMissiles.get(i);
if(um.hasCrashed(en)){ //부딪혔다면
en.burst(); //터져! 터져! 터져!
userMissiles.remove(um); //미사일 지움
}
}
}
for(int ei=0;ei<enemies.size();ei++){
Enemy en=(Enemy)enemies.get(ei);
if(en.hasBurst()) { //너 터졌니?
enemies.remove(en); //적기 지우자
}
}
}
public void update(Graphics g) { // 윈도우에서 지원.지웠다 다시 그리는것을 재정의
// super.update(g); 부모클래래스 호출하면 소용없은게.
paint(g);
}
public void paint(Graphics g) {
// super.paint(g);
Image buf = createImage(this.getWidth(), this.getHeight());
Graphics g1 = buf.getGraphics(); // 비트맵에 그림을 그리고 프레임에 덮어서 깜빡임사라지게
g1.drawImage(img, 0, 0, this); // 그림을 그려달라 배경
fighter.paint(g1, this); // 파이터에 그림을 그려달라(그림 그리는 도구,도화지)
for (int i = 0; i < enemies.size(); i++)
((Enemy)enemies.get(i)).paint(g1);
for(int i=0;i<userMissiles.size();i++)
((UserMissile)userMissiles.get(i)).paint(g1);
g.drawImage(buf, 0, 0, this);
}
}
=================================================
package shooting;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
public class SplashBoard extends Canvas { //화면 전환.얘가 제일 먼저뜬다
private Image img;
public SplashBoard() {
Toolkit tk = Toolkit.getDefaultToolkit();
img = tk.getImage("res/title3.jpg"); // 이미지 불러오는거
// Toolkit tk=Tookit.getDefaultToolkit().getImage("res/start.png");
}
public void paint(Graphics g) {
super.paint(g);
g.drawImage(img,0, 0, this);
}
}
====================================================
package shooting;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
public class Fighter {
// private UserMissile missiles[];
private Image img;
private int x,y; //뱅기 좌표
private int speed;
public Fighter() {
// missiles=new UserMissile[100]; //미사일 보유
x=170;
y=500;
speed=5; //스피드 만큼 좌표를 바꾼다
Toolkit tk=Toolkit.getDefaultToolkit(); //윈도우 제공
img=tk.getImage("res/fighter.png"); //이미지 불러오는거
}
public void paint(Graphics g,GameBoard parent) {
g.drawImage(img,x,y,parent); //게임 보드에 그림을 그려달라
}
public void move(int key) {
switch(key){
case KeyEvent.VK_LEFT:
x -= speed;
break;
case KeyEvent.VK_RIGHT:
x += speed;
break;
case KeyEvent.VK_DOWN:
y += speed;
break;
case KeyEvent.VK_UP:
y -= speed;
break;
}
}
public UserMissile fire() {
UserMissile um=new UserMissile(); //미사일 무한
um.setX(this.x+25); //비행기 중앙 앞에서 나오게
um.setY(this.y-40);
return um;
}
}
=============================================
package shooting;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
public class UserMissile {
private int x;
private int y;
private static Image img; //미사일이 여러개
private GameBoard parent;
public UserMissile() { //생성자
this(0,0);
}
public UserMissile(int x,int y){ //오버로딩 생성자
this.x=x;
this.y=y;
this.parent=parent;
}
static{
Toolkit tk=Toolkit.getDefaultToolkit(); //윈도우 제공
img=tk.getImage("res/missile.png"); //이미지 불러오는거
}
public void paint(Graphics g) {
g.drawImage(img,x,y,parent); //게임 보드에 그림을 그려달라
}
public void move() {
y -= 7; //미사일 속도
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public boolean hasCrashed(Enemy en) { //충돌 알고리즘
int w=48;
int h=64;
if((en.getX()<x && x<en.getX()+w)
&& (en.getY()<y && y<en.getY()+h))
return true;
return false;
}
}
======================================
package shooting;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Random;
public class Enemy {
private static final int LEFT = 1; // static 하나만 선언해서 모든 객체가 공유
private static final int RIGHT = 2; //final은 정의를 해야하기때문에 연산자 가능.
private static Image img; //static으로 공유를 해야하기때문에 연산자 넣어줌
private static Image explosion;
private int x;
private int y;
private EnemyMissile[] missiles;
private int speed;
private GameBoard parent;
private int dir; // 적뱅기 움직이는 방향
private int rightWall;
private int leftWall;
private Random rand;
private boolean isBursting; //터지고 있다
private boolean doneBusrt; //터졌다
private int delayBurst;
private int offsetX;
private int offsetY;
static{ //스태틱 멤버 초기화, 그림 공통
Toolkit tk = Toolkit.getDefaultToolkit();
img = tk.getImage("res/enemy.png"); // 이미지 불러오는거
explosion=tk.getImage("res/explosion.png");
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Enemy(GameBoard parent) { // 태어날때부터 이 정보를 갖고 있는다.
rand = new Random();
this.parent = parent;
missiles = new EnemyMissile[100];
x =rand.nextInt(400) - 100; // 범위를 잡아주는것
y = -100;
speed = rand.nextInt(3)+1; // 스피드 만큼 좌표를 바꾼다
dir=rand.nextInt(2)+1; //LEFT,RIGHT 정해준다
rightWall=0;
leftWall=350;
isBursting=false;
doneBusrt=true;
offsetX=0;
offsetY=0;
delayBurst=2;
}
public void move() { // 움직일 수 있도록.
if(dir==LEFT){
x -= speed;
y += speed;
if(x < rightWall){ //창에 부딪히면 다시 오른쪽으로 이동
dir=RIGHT;
leftWall=rand.nextInt(350);
}
}
else if(dir==RIGHT){
x += speed;
y += speed;
if(x >= leftWall){
dir=LEFT;
rightWall=rand.nextInt(350);
}
}
}
public void paint(Graphics g) {
g.drawImage(img, x, y, parent); // 게임 보드에 그림을 그려달라
if(isBursting) //터지는 상황인가
g.drawImage(explosion,x-110,y-50,x+160,y+120,0+offsetX,0+offsetY,0+160+offsetX,0+120+offsetY,parent); //비행기 위에 그리는거다
}
//explosin x-110,y-50은 뱅기 가운데, x,y는 그림의 크기
public boolean hasBurst() {
if(isBursting){
if(--delayBurst>0) //터지는 그림이 빨라서 딜레이줌
return false;
delayBurst=2;
if(offsetX==640-160){ //뭐가 매끄럽지 않아서 -160
offsetY+=120;
offsetX=0;
}
offsetX+=160;
}
if(offsetY==600)
return true;
//offsetY=120;
return false;
}
public void burst() { //터지는 그림의 좌표
isBursting=true; //터지는 중이라면
}
}
============================================
package shooting;
public class EnemyCollection { //Enemy에 대한 정보
private int current;
private int max;
private Enemy[] enemies;
public EnemyCollection() {
current=0;
max=3;
enemies=new Enemy[max];
}
public void add(Enemy enemy){
if(current >= max){ //공간을 늘려준다
//1.배열을 temp라는 이름으로 max+10만큼의 배열을 새로 생성
//2.enemies 공간의 Enemy들을 새로운 temp배열로 이주 시킨다.
Enemy[] temp = new Enemy[max+10];
for(int i = 0; i < max ; i++)
temp[i] = enemies[i];
enemies=temp;
max += 10;
}
this.enemies[current++]=enemy;
}
public Enemy get(int idx){
return enemies[idx];
}
public int size(){ //현재 몇개가 있는가
return current;
}
}
========================================
package shooting;
public class EnemyMissile {
}
===================================
package shooting;
public class StatusBar {
}
설정
트랙백
댓글
글
숫자 맞추기 겜
import java.util.Random;
import java.util.Scanner;
public class 연습 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Random rand = new Random();
int j = rand.nextInt(100);
int k = 1;
int low=0;
int high=100;
while (k == 1) {
int i = scan.nextInt();
if (j < i) {
System.out.println("더 낮게");
high=i;
System.out.printf(low+"-"+high);
} else if (j > i) {
System.out.println("더 높게");
low=i;
System.out.printf(low+"-"+high);
}
else if (j == i) {
System.out.println("맞다");
System.out.println("다시 하겠습니까?(1/2)");
k = scan.nextInt();
if(k==1){
System.out.println("시작");
j = rand.nextInt(100);
high=100;
low=0;
}
else{
System.out.println("종료");
}
}
}
}
}