- [memberdao]에 데이터 추가, 업데이트
SQL> col motive format a10
SQL> col id format a8
SQL> col pw format a8
SQL> col name format a8
SQL> col id format a15
SQL> select * from member;
NO ID PW NAME GENDER MOTIVE
---------- --------------- -------- -------- ---------- ----------
7 ccc ddd eee 남 fff
8 mero gumi haha 여 after
10 agcde abd ffe 남 dfaw
6 aaa bbb hong 남 친구추천
9 faa
> 데이터 보기 편하게
- 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
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 dao;
import java.lang.reflect.Member;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import vo.MemberVO;
public class MemberDAO {
// 1. 환경변수
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String username = "scott";
String password = "tiger";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
public MemberDAO() { // 생성자에서 1번~3번
// super(); // 부모 생성자 생략됨 (자바의 모든 개체는 object의 후손)
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로딩 실패");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("db 연결 실패");
e.printStackTrace();
}
System.out.println("conn : "+conn);
}
// id가 aaa인 데이터 가져오기
public MemberVO getOneById(String id) { // 4번 ~ 7번
// 4. sql문장
StringBuffer sb = new StringBuffer(); // String에 buffer 기능이 있어 사이즈 조절이 가능
sb.append("SELECT no, id, pw, name, gender, motive ");
sb.append("FROM MEMBER ");
sb.append("WHERE id = ? ");
System.out.println(sb.toString());
MemberVO vo = null; // 멤버변수 선언
try {
// 5. sql문장 객체
pstmt = conn.prepareStatement(sb.toString());
pstmt.setString(1, id);
// 6. 실행 (select ==> ResultSet)
rs = pstmt.executeQuery();
// 7. 레코드별 로직 처리
while(rs.next()) {
int no = rs.getInt("no");
String pw = rs.getString("pw");
String name = rs.getString("name");
String gender = rs.getString("gender");
String motive = rs.getString("motive");
vo = new MemberVO(no, id, pw, name, gender, motive); // vo 객체
}
} catch (SQLException e) {
e.printStackTrace();
}
return vo; // 값 전달 필수!
} // getOnebyId end
public ArrayList<MemberVO> getAll() {
ArrayList<MemberVO> list = new ArrayList<MemberVO>();
StringBuffer sb = new StringBuffer();
sb.append("SELECT * FROM member ");
System.out.println(sb.toString());
try {
pstmt = conn.prepareStatement(sb.toString());
rs = pstmt.executeQuery();
// NO ID PW NAME GENDER MOTIVE
while(rs.next()) {
int no = rs.getInt("no");
String id = rs.getString("id");
String pw = rs.getString("pw");
String name = rs.getString("name");
String gender = rs.getString("gender");
String motive = rs.getString("motive");
MemberVO vo = new MemberVO(no, id, pw, name, gender, motive); // 만들어둔 생성자로
// MemberVo vo = new MemberVO();// 기본 생성자로
// vo.setId(id);
// vo.setPw(pw);
// vo.setMotive(motive);
// vo.setName(name);
list.add(vo);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
} // arraylist end
public void addMember(MemberVO vo) {
// 4번. sql 문장
StringBuffer sb = new StringBuffer();
sb.append("INSERT INTO member ");
sb.append("VALUES (mem_no_seq.nextval, ?, ?, ?, ?, ?)");
System.out.println("SQL문 확인 : "+sb.toString());
try {
pstmt = conn.prepareStatement(sb.toString());
String id = vo.getId();
String pw = vo.getPw();
String name = vo.getName();
String Gender = vo.getGender();
String Motive = vo.getMotive();
pstmt.setString(1, id);
pstmt.setString(2, pw);
pstmt.setString(3, name);
pstmt.setString(4, Gender);
pstmt.setString(5, Motive);
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // addmember end
public void updateMember(MemberVO vo) {
StringBuffer sb = new StringBuffer();
sb.append("UPDATE member ");
sb.append("SET name = ? ");
sb.append("WHERE no = 12");
System.out.println("SQL문 확인 : "+sb.toString());
try {
pstmt = conn.prepareStatement(sb.toString());
// pstmt.setString(1, vo.getId());
// pstmt.setString(2, vo.getPw());
pstmt.setString(1, vo.getName());
// pstmt.setString(4, vo.getGender());
// pstmt.setString(5, vo.getMotive());
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // updatemember end
public void deleteMember(int no) {
StringBuffer sb = new StringBuffer();
sb.append("DELETE FROM member ");
sb.append("WHERE no = ?");
System.out.println("SQL문 확인 " + sb.toString());
try {
pstmt = conn.prepareStatement(sb.toString());
pstmt.setInt(1, no);
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // delete end
public void close() {
try {
if(rs!= null) rs.close();
if(pstmt!= null) pstmt.close();
if(conn!= null) conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} // class end
|
cs |
- [testmain2]
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
|
package dao;
import java.util.ArrayList;
import vo.MemberVO;
public class TestMain2 {
public static void main(String[] args) {
MemberDAO dao = new MemberDAO();
// conn : oracle.jdbc.driver.T4CConnection@3745e5c6
MemberVO vo = new MemberVO();
vo.setId("aaa");
System.out.println("id : "+vo.getId()); // id : aaa
System.out.println("--------------------------");
MemberVO vo2 = dao.getOneById("aaa"); // 멤버 테이블 객체(vo2) 생성하고 아이디가 aaa인 데이터 반환
System.out.println("id : "+vo2.getId());
System.out.println("pw : "+vo2.getPw());
System.out.println("name : "+vo2.getName());
System.out.println("--------------------------");
ArrayList<MemberVO> list = dao.getAll();
System.out.println("list : "+list);
for(MemberVO vo3 : list) {
System.out.println(vo3.getId()+" : "+vo3.getPw()+" : "+vo3.getName());
}
System.out.println("---------------------------------------");
// 추가
MemberVO vo4 = new MemberVO(0, "bbb", "ccc", "둘리", "남", "인터넷검색" );
dao.addMember(vo4);
vo4.setName("고길동");
vo4.setNo(12); // 방금 전에 추가했던 둘리의 번호를 지정
// 업데이트
MemberVO vo5 = new MemberVO(); // ..
dao.updateMember(vo5);
dao.deleteMember(12);
}
}
|
cs |
- [DeptDAO] 에 addOne추가
SQL> SELECT * FROM dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> CREATE SEQUENCE DEPT_DEPTNO_SEQ
2 START WITH 1
3 INCREMENT BY 1
4 NOCACHE
5 NOCYCLE;
시퀀스가 생성되었습니다.
>> DEPT에 먼저, 시퀀스 만듦
- cmd 데이터 업데이트
SQL> UPDATE DEPT
2 SET DNAME = '영업2', LOC = '강릉'
3 WHERE DEPTNO = 1;
1 행이 갱신되었습니다.
SQL> SELECT * FROM dept;
DEPTNO DNAME LOC
---------- -------------- -------------
1 영업2 강릉
2 기획 제주
3 기획 제주
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
7 개의 행이 선택되었습니다.
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
|
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import vo.DeptVO;
// * DAO : Data Access Object
// db 처리하는 순서가 같으니, 중복된 부분을 객체로 만들어 활용하는 것
public class DeptDAO {
// 1. 환경변수
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String username = "scott";
String password = "tiger";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
public DeptDAO() {
// 2. 드라이버 로딩
try {
Class.forName(driver);
// 3. Connection
conn = DriverManager.getConnection(url, username, password);
System.out.println("conn : "+conn);
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로딩 실패");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("db 연결 실패");
e.printStackTrace();
}
}
// 부서 전체 목록
public ArrayList<DeptVO> getAll() {// public 리턴타입 메서드명(매개변수) > 다 가져오면 매개변수 필요 x
// DeptVO만 담는 전용 ArrayList가 됨
ArrayList<DeptVO> list = new ArrayList<DeptVO>();
// 4. sql문장
String sql = "SELECT * FROM dept";
try {
// 5. sql문장 객체
pstmt = conn.prepareStatement(sql);
// 6. 실행 (select ==> ResultSet)
rs = pstmt.executeQuery();
while(rs.next()) {
int deptno = rs.getInt("deptno");
String dname = rs.getString("dname");
String loc = rs.getString("loc");
System.out.println(deptno+" : "+dname+" : "+loc);
DeptVO vo = new DeptVO(deptno, dname, loc); // 자바의 객체로 만듦
list.add(vo);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
// 10부서 정보 가져오기
public DeptVO getOne(int deptno) { // public 리턴타입 메소드이름(int 부서번호)
DeptVO vo = null;
// 4. sql문장
String sql = "SELECT * FROM dept WHERE deptno = ?"; // 내가 주는 부서번호(?)를 갖는 데이터
// 5. sql문장 객체
// 밑에서 오류 터지면 null이 되기 때문에, 밖의 변수로 지정
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, deptno); // 첫번째 부서번호에는 내가 준 번호 전달
// 6. 실행 (select ==> ResultSet)
rs = pstmt.executeQuery(); // resultset 받아오기
// 7. 레코드별 로직 처리
while(rs.next()) {
String dname = rs.getString("dname");
String loc = rs.getString("loc");
// System.out.println("dname : "+dname+", loc : "+loc);
vo = new DeptVO(deptno, dname, loc);
}
} catch (SQLException e) {
e.printStackTrace();
}
return vo; // vo 리턴
} // getOne end
// 8. 자원 반납
// addOne(DeptVO vo) : 데이터 추가
public void addOne(DeptVO vo) {
// 위에서 1~3번은 처리됨
// 4번.
StringBuffer sb = new StringBuffer();
sb.append("INSERT INTO dept "); // append는 공백 없이 붙기 때문에 문자열에 공백 넣어주기
sb.append("VALUES (dept_deptno_seq.nextval, ?, ?)");
System.out.println("SQL문 확인 : " + sb.toString());
try {
// 5번. 문장 객체
pstmt = conn.prepareStatement(sb.toString());
String dname = vo.getDname();
String loc = vo.getLoc(); // 변수 설정
pstmt.setString(1, dname);
pstmt.setString(2, loc);
// pstmt.setString(2, vo.getLoc()); > 변수 설정 생략하고 한번에 써도 ㄱㅊ
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // addOne end
public void updateOne(DeptVO vo) {
StringBuffer sb = new StringBuffer();
sb.append("UPDATE dept ");
sb.append("SET DNAME = ?, LOC = ? ");
sb.append("WHERE DEPTNO = ?");
System.out.println("SQL문 확인 : "+sb.toString());
try {
// 문장 객체
pstmt = conn.prepareStatement(sb.toString());
pstmt.setString(1, vo.getDname());
pstmt.setString(2, vo.getLoc());
pstmt.setInt(3, vo.getDeptno());
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // updateOne end
public void deleteOne(int deptno) { // TestMain에서 dao.deleteOne에 숫자 3을 줬기 때문에 int로 변수 생성
StringBuffer sb = new StringBuffer();
sb.append("DELETE FROM dept ");
sb.append("WHERE deptno = ?");
System.out.println("SQL문 확인 : "+sb.toString());
try {
pstmt = conn.prepareStatement(sb.toString());
pstmt.setInt(1, deptno);
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // deleteOne end
// 자원반납 > 한번에 몰아서
public void close() {
try {
if(rs!= null) rs.close();
if(pstmt!= null) pstmt.close();
if(conn!= null) conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} // class end
|
cs |
- [testmain]
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
|
package dao;
import java.util.ArrayList;
import vo.DeptVO;
public class TestMain {
public static void main(String[] args) {
DeptDAO dao = new DeptDAO(); // db연결할 때 이 한줄이면 끝남!
DeptVO vo = dao.getOne(10); // 10번 부서에 대한 정보 호출
System.out.println("vo : "+vo);
System.out.println("부서번호 : "+vo.getDeptno());
System.out.println("부서명 : "+vo.getDname());
System.out.println("부서위치 : "+vo.getLoc());
System.out.println("-------------------------");
// 전체 목록(네 개의 부서 정보가 하나에 출력)
// dao.getAll();
ArrayList<DeptVO> list = dao.getAll();
for(DeptVO vo2 : list) {
System.out.println(vo.getDeptno()+" : "+vo.getDname()+" : "+vo.getLoc());
}
System.out.println("-------------------");
// 추가
DeptVO vo3 = new DeptVO();
vo3.setDname("기획");
vo3.setLoc("제주");
// db에 데이터를 추가 > deptDAO에 메서드 만들기
dao.addOne(vo3);
// 변경
DeptVO vo4 = new DeptVO(10, "영업1", "인천");
dao.updateOne(vo4);
// dao.updateOne(0, "영업1", "인천"))// 매개변수를 변수로 줄 수도 있음
// 삭제
dao.deleteOne(3); // 3번 부서를 삭제
}
}
|
cs |
'Java' 카테고리의 다른 글
[Java] Paint Method (0) | 2023.04.06 |
---|---|
[Java] 부서 검색 창 + 부서 등록 (DAO, getOne, addOne) (0) | 2023.04.05 |
[Java] DAO(Data Access Object) / VO(Value Object) (0) | 2023.04.04 |
[Java] JDBC - 데이터 베이스 활용 (로그인, 회원가입 창 + 중복확인) (0) | 2023.03.31 |
[Java] JDBC - 데이터 베이스 (SELECT, INSERT, UPDATE, DELETE) / 시퀀스(SEQUENCE) 활용 / (+MYSql) (0) | 2023.03.31 |