* text / textarea / checkbox / radio / select 등의 기능 추가


- ex08.jsp 파일


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<%@ 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>
    <h1>회원가입</h1>
    <form action="ex09.jsp" method="post">    <!-- 파라미터 (post방식은 주소표시뒤 감춰준다)-->
    <p>id:<input type="text" name="id" ></p>
    <p>pw:<input type="password" name="pw"></p>
    <p>content:<textarea rows="5" cols="20" name="con"></textarea></p>
    <p>취미:
        <input type="checkbox" name="chk1" value="ck1">야구
        <input type="checkbox" name="chk1" value="ck2">농구
        <input type="checkbox" name="chk1" value="ck3">배구
    </p>
    <p>지금수업:
        <input type="radio" name="lec" value="java">java
        <input type="radio" name="lec" value="web">web
        <input type="radio" name="lec" value="spring">spring
    </p>
    <p>
        <select name="sel">
            <option value="sel1">select1</option
            <option value="sel2">select2</option
            <option value="sel3">select3</option
            <option value="sel4">select4</option
            </select>
    <p><input type="submit" value="전송"></p>
    
    </form>
</body>
</html>
cs




- ex09.jsp 파일


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<%@page import="java.util.Enumeration"%>
<%@ page import="java.util.Map" %>
<%@ 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>
    <h1>전달받은 내용</h1>
    <h2>id:<%=request.getParameter("id"%></h2>
    <h2>pw:<%=request.getParameter("pw"%></h2>
    <h2>content:<%=request.getParameter("con"%></h2>
    <h2>오늘수업:<%=request.getParameter("lec"%></h2>
    <h2>선택:<%=request.getParameter("sel"%></h2>
    <h2>취미:<%
    String[] sts = request.getParameterValues("chk1"); 
    for(int i=0;i<sts.length;i++){
        out.print(sts[i]+"");
        
    }
    /////////////////////////////////////////////////////////
    //Map map = request.getParameterMap();
    //String[] val1 = (String[])map.get("chk1");
    //for(int i=0;i<val1.length;i++){
    //    System.out.println(val1[i]);
    //}
    /////////////////////////////////////////////////////////
    //Enumeration em = request.getParameterNames();
    //while(em.hasMoreElements()){
    //    String param = (String)em.nextElement();
    //    System.out.print(param+":");
    //    System.out.println(request.getParameter(param));
    //}
    %></h2>
    
</body>
</html>
cs



'* Programming > WEB' 카테고리의 다른 글

DB연동 데이터 입력  (0) 2016.09.08
Form(로그인창)  (0) 2016.09.08
기본 내장객체  (0) 2016.09.08
스크립트릿 특징  (0) 2016.09.08
Table사용(구구단 만들기)  (1) 2016.09.08

회원가입이 완료되었으면 축하한다는 메시지와 함께 로그인페이지로 다시 넘어간다.

로그인을 하기위해서는 DB안의 나의 정보와 일치하는지 확인이 필요하다.

그 확인을 위한 소스이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
 
public class DBLogin {
 
    String id = null;
    String pw = null;
 
    Statement stmt = null;
    ResultSet rs = null;
    String url = "jdbc:oracle:thin:@203.236.209.197:1521:xe"// 오라클 포트번호1521/@이후에는 IP주소
    String sql = null;
    Properties info = null;
    Connection cnn = null;
 
    int checkIDPW(String id, String pw) {
        this.id = id;
        this.pw = pw;
        int result = 1;
 
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver"); // 알아서 들어간다..conn로
            info = new Properties();
            info.setProperty("user""scott");
            info.setProperty("password""tiger");
            cnn = DriverManager.getConnection(url, info); // 연결할 정보를 가지고있는 드라이버매니저를 던진다
            stmt = cnn.createStatement();
 
            sql = "select * from joinDB where id='" + id + "'";
            rs = stmt.executeQuery(sql); // 읽어오는거라 다르다 비교해    //리턴타입이 ResultSet
 
            if (rs.next() == false || (id.isEmpty()) == true) { // id가 존재x
                result = 1;
            } else {
                sql = "select * from (select * from joinDB where id='" + id + "')";
                rs = stmt.executeQuery(sql);
                while (rs.next() == true) {         // 다음값의
                    if (rs.getString(2).equals(pw)) { // pw와 같은지 비교
                        result = 0;         // 같으면 로그인 성공
                    } else {                // 아이디는같고 pw가 다른경우
                        result = 1;
                    }
                }
            }
        } catch (Exception ee) {
            System.out.println("문제있음");
            ee.printStackTrace();
        }
        return result;
    }
}
cs


id와 pw를 받아와서 데이터베이스에 연결하여 일치하는지를 검사하는 소스이다.

id와 pw가 일치하여 로그인에 성공하면 "0"을 리턴하고, 하나라도 잘못작성한경우 "1"을 리턴한다.

스레드 파일(ServerThread.java)에서 스레드를 생성함과 동시에 적용이되는 메소드이다.

스레드 파일에서의 소스를 보면 아래와 같다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
    private void login(String id, String pw) {
        StringBuffer str = new StringBuffer();
        try {
 
            DBLogin logdb = new DBLogin();
            int result = logdb.checkIDPW(id, pw);
 
            if (result == 0) { // result가 0이면 성공
                for (int i = 0; i < userArray.size(); i++) {
                    if (id.equals(userArray.get(i).getId())) {
                        try {
                            System.out.println("접속중");
                            thisUser.writeUTF(User.LOGIN + "/fail/이미 접속 중입니다.");
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        return;
                    }
                }
                // 로그인 OK
                user.setId(id);
                user.setPw(pw);
                user.setNickName(id);
                thisUser.writeUTF(User.LOGIN + "/OK/" + user.getNickName());
                this.user.setOnline(true);
 
                // 대기실에 에코
                echoMsg(User.ECHO01 + "/" + user.toString() + "님이 입장하셨습니다.");
                jta.append(id + " : 님이 입장하셨습니다.\n");
 
                roomList(thisUser);
                for (int i = 0; i < userArray.size(); i++) {
                    userList(userArray.get(i).getDos());
                }
 
                jta.append("성공 : DB 읽기 : " + id);
            } else { // result가 1이면 실패
                thisUser.writeUTF(User.LOGIN + "/fail/아이디와 비밀번호를 확인해 주세요!");
            }
 
        } catch (Exception e) {
            try {
                thisUser.writeUTF(User.LOGIN + "/fail/아이디가 존재하지 않습니다!");
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            jta.append("실패 : DB 읽기\n");
            return;
        }
 
    }
cs


리턴받은 값 (0혹은1) 을 받아서 if문 else문으로 성공과 실패를 나눠준다.

성공 시 대기창으로 이동하고 실패시 앞의 메세지 박스와는 다른 방법인

thisUser.writeUTF(User.LOGIN + "/fail/아이디와 비밀번호를 확인해 주세요!");

이것으로 알림을 준다.




'* Project > Chatting_Pro' 카테고리의 다른 글

서버  (0) 2016.09.07
대기화면 소스(WaitRoomUI.java)  (0) 2016.09.07
회원 수정 DB / 회원 탈퇴 DB  (1) 2016.09.07
회원가입 DB / 메시지박스  (1) 2016.09.07
전체 파일  (0) 2016.09.07

오라클 설치 후

cmd창에서 실행


>sqlplus system/oracle

--sql 연결 id/pw 로서 여기서 pw는 오라클 설치시 내가 정해준 pw이다.

>SELECT  DBMS_XDB.GETHTTPPORT( ) FROM DUAL;

--포트번호 확인

>EXEC DBMS_XDB.SETHTTPPORT(9090);

--포트번호 변경

>ALTER USER HR IDENTIFIED BY HR ACCOUNT UNLOCK;

--HR계정 잠김 풀기(SYSTEM이상의 권한필요)

--첫번째 HR은 아이디, 두번째 HR은 비밀번호


>sqlplus scott/tiger

--scott계정은 교육용이다

--주석이다


1. 테이블 보기 (;꼭 붙이기)

>SELECT * FROM DEPT ;


2. 원하는 것만 보고자 할때는 SELECT 컬럼명, 컬럼명...FROM DEPT; 이런식으로 쓰면 된다

>SELECT * FROM EMP ;

>SELECT ENAME,HIREDATE,SAL FROM EMP;

--테이블 간에 연결이 되어 있음을 볼 수 있다. (관계형 데이터모델)


3. 컬럼명 변경하기

>SELECT ENAME AS "사원명", HIREDATE AS "입사일", SAL AS "연봉" FROM EMP;

--SELECT ENAME AS 사원명, HIREDATE AS 입사일, SAL AS 연봉 FROM EMP; 이렇게도 되지만 띄어쓰기를 쓰면 명령어로 인식하므로 문제 발생

--" "를 쓰면 대소문자, 특수문자 등을 쓸 수 있다


4. 중복된 데이터 걸러내기

>SELECT DISTINCT JOB FROM EMP;

>SELECT DISTINCT JOB ENAME FROM EMP;

>SELECT DISTINCT DEPTNO FROM EMP;


5. WHERE 조건과 비교연산자

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE SAL>=2000;

--SAL이 2000보다 크거나 같은 경우

--  = , > , < , >=,<=

--  NOT의 의미 3가지 !=, <>, ^= 


6. 문자 데이터 조회

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE ENAME='SMITH';

>SELECT ENAME,HIREDATE FROM EMP WHERE HIREDATE >='1985/01/01';

// 오라클에서 문자열은 ' ' . 그리고  밸류값이므로 대소문자 구분

--또는 '85/01/01'


7. 다중조건 

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE SAL>=2000 AND SAL<2500;

-- AND , OR 


8. 연산자가 아닌 키워드 NOT

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE NOT SAL>=2000;

--NOT이 붙었으므로 2000보다 작은 

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE NOT JOB='MANAGER';

--JOB이 MANAGER가 아닌


9. BETWEED AND 

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE SAL BETWEEN 1000  AND 2000;

--1000에서 2000사이의 값


10. IN

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE JOB IN('CLERK','MANAGE');

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE SAL IN(1300,1250); 

--정해진 두개의 값만


11. LIKE, 와일드카드

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE JOB LIKE '%A%';

--JOB에 대문자 A가 포함된것들이 나옴

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE JOB LIKE '_A%';

--두번째 자리에 A가 나오게 함. 첫번째, 세번째가 와일드. 무엇이 와도 상관없음

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE JOB LIKE 'A%';

--A 와일드 

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE JOB LIKE '_______';

--7자로 된 모든 것


12. NULL

>SELECT * FROM EMP WHERE COMM IS NULL;

--값이 없는 것들을 찾을때

>SELECT * FROM EMP WHERE COMM IS NOT NULL;

--값이 있는 것들을 찾을때. 0도 있는 것이다.


13. ORDER BY: 오름,내림차순 정렬하기

>SELECT * FROM DEPT ORDER BY DEPTNO;

>SELECT * FROM DEPT ORDER BY DEPTNO DESC;

--내림차순

>SELECT * FROM DEPT ORDER BY DEPTNO ASC;

>SELECT * FROM EMP ORDER BY SAL ASC;

--오름차순

>SELECT * FROM EMP ORDER BY SAL ASC,ENAME DESC;

--연봉순서에서 연봉 중복이 나올때 이름순서로 보고 싶으면




1. 테이블 생성

-- CREATE TALBE TABLENAME( 

--  컬럼명 자료형,

--  컬럼명 자료형,

--  ...

-- );

-- 타입: 숫자 number, number(38), number(전체, 소수점이후)

--        문자열 varchar2(), char(), varchar()

--        날짜 date

--        문자열 (특수) long, lob

*varchar2(10) 인 경우는 10의 메모리 공간을 사용할 수 있되 값이 들어가지 않는한 용량차지 없다 (동적으로 할당)

char(10) 인 경우에 10의 메모리를 주어진다 (비어있더라도)

varchar() 인경우는 오라클에서 사용하지 말라고 권한다 (2와 기능 동일)


long 가변적이라 크기지정 없다(최대 2G까지 저장). 그러나 제어 어렵고 느리다

lob(2G),바이너리,,파일을 직접넣는다.(이미지,,등) 느리고 db부하가 크다


> CREATE TALBE STUDENT( 

  NO NUMBER,

  KOR NUMBER,

  ENG NUMBER,

  MATH NUMBER

  NAME VARCHAR2(20)  

  );

--여기까지 스키마가 만들어졌다.


2. 값 입력  

--INSERT INTO TABLENAME(필드들) VALUES (필드와 매칭되는 VALUE값들);


> INSERT INTO STUDENT(NO,KOR,ENG,MATH,NAME) VALUES (1,90,80,70,'홍길동'); 

> INSERT INTO STUDENT VALUES(2,80,70,60,'홍길자');

> INSERT INTO STUDENT(NAME,KOR,NO,MATH,ENG) VALUES('이길자',50,3,60,80);

> INSERT INTO STUDENT(NO,NAME) VALUES(4,'박길동');

> INSERT INTO STUDENT VALUES (5,50,60,80,NULL);

> INSERT INTO STUDENT(NO,KOR,ENG,MATH) VALUES (5,50,60,80);

--입력할때 타입이 달라지면 오류

--쓰고 싶지 않으면 NULL을 넣으면 된다. 

> INSERT INTO STUDENT VALUES (5,50,60,80);

--오류. 


3. 테이블 확인하기

>DESC STUDENT; 

--테이블 정보 확인 

>SET LINESIZE 100 

--보기좋기 하기 위해 넓이를 넓게

>SELECT * FROM STUDENT; 

--내가 만든 테이블 전체 확인

>SELECT * FROM TAB; 

--어떤것들이 있는지 모른다하면 이것을 통해 테이블들을 확인할 수 있다.


/*

> SELECT * FROM STUDENT WHERE KOR=NULL;

> SELECT * FROM STUDENT WHERE KOR IS NULL;

> SELECT * FROM STUDENT WHERE KOR IN(NULL);

> SELECT * FROM STUDENT WHERE NAME=NULL;

//얘도 안된다.

*/


4. 수정

--UPDATE TABLENAME SET 바꿀필드명=바꿀 값들 ~~~WHERE 조건;


> UPDATE STUDENT SET KOR=90, ENG=80, MATH=70 WHERE NO=4;

--조건이 없으면 전체가 다 바뀌어버린다. 반드시, 수정 삭제때는 WHERE 조건을 사용 


5. 삭제

--DELETE FROM TABLENAME WHERE 조건;


> DELETE FROM STUDENT WHERE NO=4;

--조건반드시 필요


/* INSERT INTO STUDENT(NO,KOR,ENG,MATH,NAME) VALUES('6', '22' , '33' , '44', '홍길동');

    숫자에 문자를 주는것은 문제가 되지 않는다 

 하지만, 문자를 숫자로 주는 것은 문제가 된다

*/


/*

SELECT * FROM STUDENT WHERE NO=1;

만일 조건이 중복되어버리면? 

내 컴퓨터에서 데이터에 입력값을 주는데 다른 컴퓨터에서 또 입력을 해줘서 중복이 되버린다면? 

동일 학번을 다른값으로 줘버리는 문제가 생김. 

그럴 경우에는 DB에서 아예 입력오류를 냄. 

*/


'* DB > Oracle' 카테고리의 다른 글

LPAD, RPAD 함수  (0) 2018.08.17
테이블 이름이 존재하는지 확인하기  (0) 2016.08.24
nul(), decode(), case then  (0) 2016.08.18
Table 조작  (0) 2016.08.18
오라클(함수)  (0) 2016.08.11

+ Recent posts