Notice
Recent Posts
Recent Comments
Link
«   2026/03   »
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
Tags
more
Archives
Today
Total
관리 메뉴

brograming

[JAVA, Oracle] 게시판 만들기_Day18 본문

Kosta

[JAVA, Oracle] 게시판 만들기_Day18

brograming 2023. 3. 9. 17:50

board

전체검색

작성자로 검색(여러개)

제목으로 검색(제목에 단어 포함된 것 여러개 검색)

 

1. <회원관리>  2. <게시판>  3. <종료>

 

1. <회원관리> 

 

메뉴 - 1. 회원가입 2.로그인 3.내정보 확인 4. 내정보 수정 5.로그아웃 6. 탈퇴 7.이전메뉴

 

1. 회원가입 : id / pwd / name / email 입력받음 > db에 저장(dao.insert())

2. 로그인 : id / pwd 입력받음 > db에서 검색(dao.select(id) > MemberVo) > pwd비교 > 일치 : 로그인 성공

                                                                                         > null : 없는 id                 > 불일치 : 로그인 실패

3. 내정보 확인 : dao.select(loginId) > 정보출력

4. 내정보 수정

5. 로그아웃

6. 탈퇴

7. 이전메뉴

 

 

2. <게시판>

 

메뉴 - 1.글작성 2.글목록 3.번호로 검색 4.작성자로 검색 5. 제목으로 검색 6.이전메뉴

 

1. 글작성

2. 글전체목록

3. 번호로 검색

3-1. 내 글 수정

3-2. 내 글 삭제

4. 작성자로 검색

5. 제목으로 검색

6. 이전메뉴

 

<종료>

 

 

 

<회원관리>

 

▼MemberVo

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
package member;
 
public class MemberVo {
private String id;
private String pwd;
private String name;
private String email;
 
public MemberVo() {}
 
public MemberVo(String id, String pwd, String name, String email) {
 
    this.id = id;
    this.pwd = pwd;
    this.name = name;
    this.email = email;
}
 
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;
}
 
public String getName() {
    return name;
}
 
public void setName(String name) {
    this.name = name;
}
 
public String getEmail() {
    return email;
}
 
public void setEmail(String email) {
    this.email = email;
}
 
@Override
public String toString() {
    return "MemberVo [id=" + id + ", pwd=" + pwd + ", name=" + name + ", email=" + email + "]";
}
 
}
 
cs

 

▼MemberDao

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
package member;
 
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
import conn.DBConnect;
 
public class MemberDao {
        private DBConnect dbconn;
        
        public MemberDao(){
            dbconn = DBConnect.getInstance();
        }
        
        //id(primary key)로 검색
        public MemberVo select(String id) {
            MemberVo vo = null;
            Connection conn = dbconn.conn();
            
            String sql = "select * from member where id = ?";
            
            try {
                PreparedStatement pstmt = conn.prepareStatement(sql);
                
                pstmt.setString(1, id);
                ResultSet rs = pstmt.executeQuery(); // select 실행
                
                if(rs.next()) {  // 첫 줄로 이동하여 데이터 있는지 확인
                    
                    vo = new MemberVo(rs.getString(1),  rs.getString(2), rs.getString(3),  rs.getString(4));
                    
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            return vo;
        }
        
        // 회원가입 한 줄 추가
        public void insert(MemberVo vo) {
            Connection conn = dbconn.conn();
            
            String sql = "insert into member values(?,?,?,?)";
            
            try {
                PreparedStatement pstmt = conn.prepareStatement(sql);
                pstmt.setString(1, vo.getId());
                pstmt.setString(2, vo.getPwd());
                pstmt.setString(3, vo.getName());
                pstmt.setString(4, vo.getEmail());
                
                int num = pstmt.executeUpdate();//insert, update, delete는 executeUpdate로 실행, select는 executeQuery()
                System.out.println(num + "줄이 추가되었습니다.");
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            
        }
        
        //update : id로 찾아서 pwd, name을 새 값으로 수정
        public void update(MemberVo vo) {
            Connection conn = dbconn.conn();
            String sql = "update member set pwd = ?, name = ? where id = ?";
            
            try {
                PreparedStatement pstmt = conn.prepareStatement(sql);
                pstmt.setString(1, vo.getPwd());
                pstmt.setString(2, vo.getName());
                pstmt.setString(3, vo.getId());
                
                int num = pstmt.executeUpdate();
                System.out.println(num + "줄이 수정되었습니다.");
                
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            
        }
        
        //delete : id로 찾아서 삭제
        public void delete(String id) {
            Connection conn = dbconn.conn();
            String sql = "delete from member where id = ?";
            
            try {
                PreparedStatement pstmt = conn.prepareStatement(sql);
                pstmt.setString(1, id);
                
                int num = pstmt.executeUpdate();
                System.out.println(num + "줄이 삭제되었습니다.");
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
}
 
cs

 

▼MemberService

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
package member;
 
import java.util.Scanner;
 
public class MemberService {
    private MemberDao dao;
 
    public static String loginId; // 로그인한 사람의 아이디 저장. 이 값이 null이면 로그인 안한 상태
 
    public MemberService() {
        dao = new MemberDao();
    }
 
    // 회원가입
    public void join(Scanner sc) {
 
        System.out.println("회원가입");
        MemberVo vo = new MemberVo();
 
        String id = "";
        // id입력 및 중복체크
        while (true) {
            System.out.println("id를 입력하세요");
            id = sc.next();
            MemberVo m = dao.select(id); // 입력받은 id로 바로 검색. 반환값이 null이면 중복x > 루프 나감
            if (m == null) { // id로 검색 된 줄이 없음 > 중복안됨
                break// 루프 빠져나감
            } else { // id가 중복된 경우
                System.out.println("중복된 id. 다시 입력하세요");
            }
        }
        vo.setId(id);
        System.out.println("pwd를 입력하세요");
        vo.setPwd(sc.next());
        System.out.println("name을 입력하세요");
        vo.setName(sc.next());
        System.out.println("email을 입력하세요");
        vo.setEmail(sc.next());
 
        // db에 저장
        dao.insert(vo);
 
    }
 
    // 로그인
    public void login(Scanner sc) {
 
        System.out.println("로그인");
        System.out.println("id를 입력하세요");
        String id = sc.next();
        System.out.println("pwd를 입력하세요");
        String pwd = sc.next();
        MemberVo vo = dao.select(id);
 
        if (vo == null) {
            System.out.println("없는 아이디");
        } else {
            if (pwd.equals(vo.getPwd())) { // 문자열이므로 euqals로 비교
                loginId = id; // 로그인 처리
                System.out.println(loginId + "님 로그인 성공");
 
            } else {
                System.out.println("잘못된 비번");
            }
        }
 
    }
 
    // 로그아웃
    public void logout() {
        if (loginId == null) {
            System.out.println("로그인 먼저 하세요");
        } else {
            System.out.println(loginId + "님 로그아웃됨");
            loginId = null;
        }
    }
 
    // 내정보 확인
    public boolean printMyInfo() {
        System.out.println("내정보 확인");
        if (loginId == null) {
            
            System.out.println("로그인 먼저 하세요");
            return false;
        } else {
            System.out.println(dao.select(loginId));
            return true;
        }
    }
 
    // 내정보 수정
    public void editMyInfo(Scanner sc) {
        System.out.println("내정보 수정");
        boolean flag = printMyInfo(); // 수정 전 정보 확인
        if(flag == false) { // 로그인 상태 아니면 종료
            return;
        } 
             
            System.out.println("pwd를 수정합니다. new pwd : ");
            String pwd = sc.next(); // 변경할 새 pwd 입력받음
            System.out.println("name을 수정합니다. new name : ");
            String name = sc.next(); // 변경할 새 name 입력받음
        
            //db에서 수정
            dao.update(new MemberVo(loginId, pwd, name, "")); // vo에 수정할  사람id(로그인아이디), 새 pwd, 새 name 담아서 전달
    }
    
    // 탈퇴
    public void out() {
        System.out.println("탈퇴");
        if(loginId == null) {
            System.out.println("로그인 먼저 하세요");
        }else  {
            dao.delete(loginId);
            loginId = null;
        }
    }
}
 
 
cs

 

▼main(삭제)

확인용으로 만든 Member의 Main 삭제해줌.

 

<게시판>

 

▼BoardService

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
package member;
 
import java.util.ArrayList;
import java.util.Scanner;
 
public class BoardService {
        private BoardDao dao;
        
        public BoardService() {
            dao = new BoardDao();
        }
        
        // 글작성
        public void addBoard(Scanner sc) {
            System.out.println("글작성");
            System.out.println("title : ");
            sc.nextLine(); // Buffer에 남은 엔터 제거
            String title = sc.nextLine(); // 제목 입력
            System.out.println("content : ");
            String content = sc.nextLine(); // 글 내용 입력
            dao.insert(new BoardVo(0 ,MemberService.loginId, null, title, content));
            //                        ↑ static 멤버라 객체생성 없이 접근 가능
        }
        
        // 글 전체 목록. board테이블 전체 검색하여 글번호, 타이틀, 작성자
        public void getAll() {
            System.out.println("글 전체 목록");
            ArrayList<BoardVo> list = dao.selectAll(); 
            
            for(BoardVo vo : list) {
                System.out.println("|" + vo.getNum() + "|" + vo.getTitle() + "\t|" + vo.getWriter());
            }
        }
        
        //글 번호로 검색
            public void getByNum(Scanner sc) {
                System.out.println("글 번호로 검색");
                System.out.println("검색할 글번호를 입력하세요. 글번호 : ");
                int num = sc.nextInt(); //검색할 글번호 입력
                
                BoardVo vo = dao.select(num); //db에서 글번호로 검색. 있으면 vo, 없으면 null 반환
                if(vo == null) {
                    System.out.println("없는 글번호");
                } else {
                System.out.println(vo);
                if(MemberService.loginId.equals(vo.getWriter())) { // loginId == writer. 로그인한 사람이 작성한 글
                    System.out.println("1.수정 2.삭제 3.이전메뉴");
                    int m = sc.nextInt();
                    switch(m) {
                    case 1:
                        editBoard(sc, vo.getNum());
                        break;
                    case 2:
                        delBoard(vo.getNum());
                        break;
                        
                    }
                }
                }
                }
            
            // 글수정
            public void editBoard(Scanner sc, int num) {
                System.out.println("글수정");
                System.out.println("new title : ");
                sc.nextLine(); // Buffer에 남은 엔터 제거
                String title = sc.nextLine(); // 제목 입력
                System.out.println("new content : ");
                String content = sc.nextLine(); // 글 내용 입력
                dao.update(new BoardVo(num, nullnull, title, content)); // db에서 글 수정
            }
            
            //글삭제
            public void delBoard(int num) {
                dao.delete(num);
            }
}
cs

 

▼BoardDao

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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
package member;
 
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
 
import conn.DBConnect;
 
public class BoardDao {
 
    private DBConnect dbconn;
    
    public BoardDao() {
        dbconn = DBConnect.getInstance();
    }
    
    //글번호로 검색
    public BoardVo select(int num) {
        BoardVo vo = null;
        Connection conn = dbconn.conn();
        
        String sql = "select * from board where num = ?";
        
        try {
            PreparedStatement pstmt = conn.prepareStatement(sql);
            
            pstmt.setInt(1, num);
            ResultSet rs = pstmt.executeQuery(); // select 실행
            
            if(rs.next()) {  // 첫 줄로 이동하여 데이터 있는지 확인
                int num1 = rs.getInt(1);
                String name = rs.getString(2);
                Date w_date = rs.getDate(3);
                String title = rs.getString(4);
                String content = rs.getString(5);
                
                vo = new BoardVo(num1, name, w_date, title, content);
                
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return vo;
        
    }
    
    //작성자로 검색
    public BoardVo getByWriter(String writer) {
        BoardVo vo = null;
        Connection conn = dbconn.conn();
        
        String sql = "select * from board where writer = ?";
        
        try {
            PreparedStatement pstmt = conn.prepareStatement(sql);
            
            pstmt.setString(1, writer);
            ResultSet rs = pstmt.executeQuery(); // select 실행
            
            if(rs.next()) {  // 첫 줄로 이동하여 데이터 있는지 확인
                int num1 = rs.getInt(1);
                String name = rs.getString(2);
                Date w_date = rs.getDate(3);
                String title = rs.getString(4);
                String content = rs.getString(5);
                
                vo = new BoardVo(num1, name, w_date, title, content);
            }
            
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return vo;
    }
    
    //제목으로 검색
    
    //전체검색
    public  ArrayList<BoardVo> selectAll(){
        ArrayList<BoardVo> list = new ArrayList<>();
        Connection conn = dbconn.conn();
        String sql = "select * from board order by num desc";
        
        try {
            PreparedStatement pstmt = conn.prepareStatement(sql);
          ResultSet rs = pstmt.executeQuery();
          while(rs.next()) {
              list.add(new BoardVo(rs.getInt(1), rs.getString(2), rs.getDate(3), rs.getString(4), rs.getString(5)));
          }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    return list;
    }
    
    
    public void insert(BoardVo vo) {
        Connection conn = dbconn.conn();
        
        String sql = "insert into board values(seq_board.nextval,?,sysdate,?,?)";
        
        try {
            PreparedStatement pstmt = conn.prepareStatement(sql);
        
            pstmt.setString(1,vo.getWriter());
            pstmt.setString(2, vo.getTitle());
            pstmt.setString(3, vo.getContent());
            
        
            int num = pstmt.executeUpdate();
            System.out.println(num + "줄이 추가되었습니다.");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }    
    }
    
    //글번호 찾아서 title, content를 새 값으로 수정
    public void update(BoardVo vo) {
        Connection conn = dbconn.conn();
        String sql = "update board set title = ?, content = ? where num = ?";
        
        try {
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, vo.getTitle());
            pstmt.setString(2,vo.getContent());
            pstmt.setInt(3, vo.getNum());
            
            int num1 = pstmt.executeUpdate();
            System.out.println(num1 + "줄이 수정되었습니다.");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
    public void delete(int num) {
        Connection conn = dbconn.conn();
        String sql = "delete board where num = ?";
        
        try {
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, num);
            
            int num1 = pstmt.executeUpdate();
            System.out.println(num1 + "줄이 삭제되었습니다.");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}
cs

▼BoardVo

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
package member;
 
import java.sql.Date;
 
public class BoardVo {
 
    private int num;
    private String writer;
    private Date w_date;
    private String title;
    private String content;
    
    public BoardVo() {}
 
    public BoardVo(int num, String writer, Date w_date, String title, String content) {
        this.num = num;
        this.writer = writer;
        this.w_date = w_date;
        this.title = title;
        this.content = content;
    }
 
    public int getNum() {
        return num;
    }
 
    public void setNum(int num) {
        this.num = num;
    }
 
    public String getWriter() {
        return writer;
    }
 
    public void setWriter(String writer) {
        this.writer = writer;
    }
 
    public Date getW_date() {
        return w_date;
    }
 
    public void setW_date(Date w_date) {
        this.w_date = w_date;
    }
 
    public String getTitle() {
        return title;
    }
 
    public void setTitle(String title) {
        this.title = title;
    }
 
    public String getContent() {
        return content;
    }
 
    public void setContent(String content) {
        this.content = content;
    }
 
    @Override
    public String toString() {
        return "boardVo [num=" + num + ", writer=" + writer + ", w_date=" + w_date + ", title=" + title + ", content="
                + content + "]";
    }
    
    
}
cs

▼BoardMain(삭제)

▼Menu

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
package boardMain;
 
import java.util.Scanner;
 
import member.BoardService;
import member.MemberService;
 
//메뉴 돌림
public class Menu {
    private MemberService mService;
 
    private BoardService bService;
 
    public Menu() {
        mService = new MemberService();
        bService = new BoardService();
    }
 
    // board쪽 메뉴 돌림
    public void brun(Scanner sc) {
        if(MemberService.loginId == null) {
            System.out.println("게시판 메뉴는 로그인 후 사용가능");
            return;
        }
        boolean flag = true;
        int m = 0;
        while (flag) {
            System.out.println("1.글작성 2.글목록 3.번호로 검색 4.작성자로 검색 5. 제목으로 검색 6.이전메뉴");
            m = sc.nextInt();
            switch (m) {
            case 1:
                bService.addBoard(sc);
                break;
            case 2:
                bService.getAll();
                break;
            case 3:
                bService.getByNum(sc);
                break;
            case 4:
 
                break;
            case 5:
 
                break;
            case 6:
 
                flag = false;
            }
        }
    }
 
    // member쪽 메뉴 돌림
    public void mrun(Scanner sc) {
        boolean flag = true;
        int m = 0;
        while (flag) {
            System.out.println("1.회원가입 2.로그인 3.내정보 확인 4.내정보 수정 5.로그아웃 6.탈퇴 7.이전메뉴");
            m = sc.nextInt();
            switch (m) {
            case 1:
                mService.join(sc);
                break;
            case 2:
                mService.login(sc);
                break;
            case 3:
                mService.printMyInfo();
                break;
            case 4:
                mService.editMyInfo(sc);
                break;
            case 5:
                mService.logout();
                break;
            case 6:
                mService.out();
                break;
            case 7:
                flag = false;
            }
        }
    }
 
    public void run(Scanner sc) {
        boolean flag = true;
        int m = 0;
        while (flag) {
            System.out.println("1.회원관리 2.게시판 3.종료");
            m = sc.nextInt();
            switch (m) {
            case 1:
                mrun(sc); // 회원관리 하위 메뉴 돌림
                break;
            case 2:
                brun(sc); // 게시판 하위 메뉴 돌림
                break;
            case 3:
                System.out.println("프로그램 종료");
                flag = false;
            }
        }
    }
 
}
cs

▼Main

'Kosta' 카테고리의 다른 글

로그인(세션과 쿠키)_Day31, Day32  (0) 2023.03.30
[JAVASCRIPT]_Day25  (0) 2023.03.22
[JAVA, Oracle] emp vo, dao, main Day16  (0) 2023.03.08
[Oracle]JDBC_Day16  (0) 2023.03.08
[Oracle] 8강_Day16  (0) 2023.03.08