로그인을 하고 다음 대기화면(WaitRoomUI.java)에서의 메뉴바에 회원 수정과 탈퇴 기능을 추가하였다.

회원수정하는 것 또한 새로운 창이 필요하여 이렇게 만들어봤다.

id는 변경이 불가능하게 하였고, pw와 이름 생년월일을 수정하여 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
public class DBRevise implements MouseListener {
 
    String id = null;
    String pw, name, birth;
 
    JFrame frame;
    JPanel logPanel;
    JPanel logPanel1;
    JPanel logPanel2;
    JPanel logPanel3;
    JTextField idTf, pwTf, nameTf, birthTf = null;
    JButton okBtn;
 
    MsgeBox msgbox = new MsgeBox();
 
    Statement stmt = null;
    ResultSet rs = null;
    String url = "jdbc:oracle:thin:@203.236.209.197:1521:xe"// 오라클 포트번호1521/@이후에는 IP주소
    String sql = null;
    String sql2 = null;
    Properties info = null;
    Connection cnn = null;
 
    // id를 받아와서 그것의 정보로 pw/name/barth 수정및 삭제
    void myInfo(String id) {
        this.id = id;
 
        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);
 
            while (rs.next() == true) { // 다음값의
                pw = rs.getString(2);
                name = rs.getString(3);
                birth = rs.getString(4);
            }
        } catch (Exception ee) {
            System.out.println("문제있음");
            ee.printStackTrace();
        }
 
        frame = new JFrame("회원수정");
        logPanel = new JPanel();
        logPanel1 = new JPanel(new GridLayout(41));
        logPanel2 = new JPanel(new GridLayout(41));
        logPanel3 = new JPanel();
 
        JLabel idLabel = new JLabel(" I   D   ", JLabel.CENTER);
        JLabel pwLabel = new JLabel(" P  W  ", JLabel.CENTER);
        JLabel nameLabel = new JLabel("이 름", JLabel.CENTER);
        JLabel baLabel = new JLabel("생 년 월 일 ", JLabel.CENTER);
        logPanel1.add(idLabel);
        logPanel1.add(pwLabel);
        logPanel1.add(nameLabel);
        logPanel1.add(baLabel);
 
        idTf = new JTextField(20);
        idTf.setText(id);
        idTf.setEditable(false);
        pwTf = new JTextField(20);
        pwTf.setText(pw);
        nameTf = new JTextField(20);
        nameTf.setText(name);
        birthTf = new JTextField(20);
        birthTf.setText(birth);
        logPanel2.add(idTf);
        logPanel2.add(pwTf);
        logPanel2.add(nameTf);
        logPanel2.add(birthTf);
 
        frame.add(logPanel, BorderLayout.NORTH);
        frame.add(logPanel1, BorderLayout.WEST);
        frame.add(logPanel2, BorderLayout.CENTER);
        frame.add(logPanel3, BorderLayout.EAST);
 
        JPanel logPanel4 = new JPanel();
        JLabel askLabel = new JLabel("변경하시겠습니까?");
        okBtn = new JButton("확인");
        JButton cancleBtn = new JButton("취소");
        okBtn.addMouseListener(this);         // addMouseListener이벤트
        logPanel4.add(askLabel);
        logPanel4.add(okBtn);
        logPanel4.add(cancleBtn);
        frame.add(logPanel4, BorderLayout.SOUTH);
 
        // 취소 버튼
        cancleBtn.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                frame.dispose();
                dbClose();
            }
        });
 
        frame.setBounds(450250350200);
        frame.setResizable(false);
        frame.setVisible(true);
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    }
 
    @Override
    public void mouseClicked(MouseEvent e) {
        try {
            // 확인 버튼
            if (e.getSource().equals(okBtn)) {
                if ((idTf.getText().isEmpty()) == true || (pwTf.getText().isEmpty()) == true
                        || (nameTf.getText().isEmpty()) || (birthTf.getText().isEmpty())) {
                    msgbox.messageBox(logPanel3, "비어있는 칸이 존재합니다.");
                } else if ((birthTf.getText().length()) != 6) {
                    msgbox.messageBox(logPanel3, "생년월일 서식이 잘못되었습니다."); // 아닌경우
                } else {
                    sql = "update joinDB set pw='" + pwTf.getText() + "',name='" + nameTf.getText() + "',birth='"
                            + birthTf.getText() + "' where id='" + id + "'";
                    System.out.println(sql);
                    stmt.executeUpdate(sql);
                    msgbox.messageBox(logPanel3, "변경 되셨습니다.");
                    frame.dispose(); // 창 닫기
                    dbClose();
                }
            }
 
        } catch (Exception ee) {
            System.out.println("문제있음");
            ee.printStackTrace();
        }
    }
 
    @Override
    public void mousePressed(MouseEvent e) {
    }
    @Override
    public void mouseReleased(MouseEvent e) {
    }
    @Override
    public void mouseEntered(MouseEvent e) {
    }
    @Override
    public void mouseExited(MouseEvent e) {
    }
    public void dbClose() {
        try {
            if (rs != null)
                rs.close();
            if (stmt != null)
                stmt.close();
            if (cnn != null)
                cnn.close();
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
    }
}
cs

현재 로그인된 아이디를 가져와서 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
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
import java.util.Scanner;
 
public class DBDelete {
    MsgeBox msgbox = new MsgeBox();
 
    String id = null;
 
    Statement stmt = null;
    ResultSet rs = null;
    String url = "jdbc:oracle:thin:@203.236.209.197:1521:xe"// 오라클 포트번호1521/@이후에는 IP주소
    String sql = null;
    String sql2 = null;
    Properties info = null;
    Connection cnn = null;
 
    // id를 받아와서 그것의 정보로 pw/name/birth 삭제
    int InfoDel(String id) {
        int result = 0;
        this.id = id;
        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 = "delete from joinDB where id='" + id + "'";
            stmt.executeUpdate(sql);
 
            sql = "select * from joinDB where id='" + id + "'";
            rs = stmt.executeQuery(sql);
            if (rs.next() == true) { // 다음값의
                result = 0// 실패
            } else {
                result = 1// 성공
            }
        } catch (Exception ee) {
            System.out.println("문제있음");
            ee.printStackTrace();
        }
 
        return result;
    }
 
}
cs


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

서버  (0) 2016.09.07
대기화면 소스(WaitRoomUI.java)  (0) 2016.09.07
로그인 체크 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