<14:30 5교시>
window > preference > java > editor > templates > new 로 syso 컨트롤 스페이스 하면 자동으로 문구 작성되는 기능처럼 탬플릿을 만들 수 있다.
package test.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import test.dto.MemberDto;
import test.util.DBConnector;
/*
* 회원 정보를 insert, update, delete, select 할수 있는 기능을 가진 객체를 생성할 클래스 설계하기
*
* - 이런 기능을 가진 객체를 Data Access Object 라고 한다 DAO
*/
public class MemberDao {
//매개 변수에 전달된 MemberDto 객체에 담긴 회원 한명의 정보를 DB 에 저장하는 메소드
public boolean insert(MemberDto dto) {
Connection conn=null;
PreparedStatement pstmt=null;
int rowCount=0;
try {
conn=new DBConnector().getConn();
//실행할 sql 문
String sql="""
INSERT INTO member
(num, name, addr)
VALUES(member_seq.NEXTVAL, ?, ?)
""";
pstmt=conn.prepareStatement(sql);
// ? 에 값 바인딩
pstmt.setString(1, dto.getName());
pstmt.setString(2, dto.getAddr());
//sql 문 실행
rowCount=pstmt.executeUpdate();
}catch(SQLException se) {
se.printStackTrace();
}finally {
try {
if(pstmt!=null)pstmt.close();
if(conn!=null)conn.close();
}catch(Exception e) {}
}
if(rowCount > 0) {
return true;
}else {
return false;
}
}
//매개변수에 전달된 번호에 해당하는 회원 한명의 정보를 삭제하는 메소드
public boolean delete(int num) {
Connection conn = null;
PreparedStatement pstmt = null;
int rowCount = 0;
try {
conn = new DBConnector().getConn();
//실행할 sql 문
String sql = """
DELETE FROM member
WHERE num=?
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값 바인딩
pstmt.setInt(1, num);
//sql 문 실행
rowCount = pstmt.executeUpdate();
} catch (SQLException se) {
se.printStackTrace();
} finally {
try {
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (Exception e) {
}
}
if (rowCount > 0) {
return true;
} else {
return false;
}
}
//매개 변수에 전달된 MemberDto 객체에 담긴 회원 한명의 정보를 수정하는 메소드
public boolean update(MemberDto dto) {
Connection conn = null;
PreparedStatement pstmt = null;
int rowCount = 0;
try {
conn = new DBConnector().getConn();
//실행할 sql 문
String sql = """
UPDATE member
SET name=?, addr=?
WHERE num=?
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값 바인딩
pstmt.setString(1, dto.getName());
pstmt.setString(2, dto.getAddr());
pstmt.setInt(3, dto.getNum());
//sql 문 실행
rowCount = pstmt.executeUpdate();
} catch (SQLException se) {
se.printStackTrace();
} finally {
try {
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (Exception e) {
}
}
if (rowCount > 0) {
return true;
} else {
return false;
}
}
//전체 회원 목록을 리턴하는 메소드
public List<MemberDto> getList(){
List<MemberDto> list=new ArrayList<>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = new DBConnector().getConn();
String sql = """
SELECT num, name, addr
FROM member
ORDER BY num ASC
""";
pstmt = conn.prepareStatement(sql);
//? 에 값 바인딩 할게 있으면 여기서 한다.
//select 문 실행하고 결과를 ResultSet 객체로 리턴받기
rs = pstmt.executeQuery();
//반복문 돌면서
while (rs.next()) {
//MemberDto 객체를 생성해서
MemberDto dto=new MemberDto();
//ResultSet 에 담긴 정보를 추출해서 MemberDto 객체에 담은 다음
dto.setNum(rs.getInt("num"));
dto.setName(rs.getString("name"));
dto.setAddr(rs.getString("addr"));
//MemberDto 객체를 ArrayList 객체에 누적 시킨다.
list.add(dto);
}
} catch (SQLException se) {
se.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (Exception e) {
}
}
//회원정보가 누적된 ArrayList 객체를 리턴해준다.
//select 된 row 가 없으면 list.size() 는 0 이다.
return list;
}
//매개변수에 전달된 번호에 해당하는 회원 한명의 정보를 리턴하는 메소드
public MemberDto getData(int num) {
MemberDto dto=null;
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
conn=new DBConnector().getConn();
String sql="""
SELECT name, addr
FROM member
WHERE num=?
""";
pstmt=conn.prepareStatement(sql);
//? 에 값 바인딩 할게 있으면 여기서 한다.
pstmt.setInt(1, num);
//select 문 실행하고 결과를 ResultSet 객체로 리턴받기
rs=pstmt.executeQuery();
//만일 select 된 row 가 있다면
if(rs.next()) {
dto=new MemberDto();
dto.setNum(num);
dto.setName(rs.getString("name"));
dto.setAddr(rs.getString("addr"));
}
}catch(SQLException se) {
se.printStackTrace();
}finally {
try {
if(rs!=null)rs.close();
if(pstmt!=null)pstmt.close();
if(conn!=null)conn.close();
}catch(Exception e) {}
}
// select 된 정보가 없으면 dto 는 null 이다
return dto;
}
}
만든 DAO 가지고 쉽게 쉽게 하기!
package test.main;
import java.util.Scanner;
import test.dao.MemberDao;
import test.dto.MemberDto;
public class MainClass14 {
public static void main(String[] args) {
//이름과 주소를 Scanner 객체로 입력 받아서 DB에 저장하는 프로그래밍 하기
Scanner scan = new Scanner(System.in);
System.out.println("이름 입력: ");
String name=scan.nextLine();
System.out.println("주소 입력: ");
String addr=scan.nextLine();
//입력한 이름과 주소를 MemberDto 객체에 담기
MemberDto dto=new MemberDto();
dto.setName(name);
dto.setAddr(addr);
MemberDao dao = new MemberDao();
boolean isSuccess=dao.insert(dto);
if(isSuccess) {
System.out.printf("%s 님의 정보가 저장되었습니다", name);
}else {
System.out.println("회원 정보 저장 실패");
}
}
}
<15:30 6교시>
package test.main;
import test.dao.MemberDao;
import test.dto.MemberDto;
public class MainClass15 {
public static void main(String[] args) {
/*
* MemberDao 객체를 이용해서 1번 회원의 이름을 "김구라", 주소를 "노량진"으로 수정하기
* 단) 성공 여부를 콘솔창에 출력하기
*/
//int num=1; //내가쓴 줄인데 안 써도 됨
//String name= "김구라";//내가쓴 줄인데 안 써도 됨
//String addr= "노량진";//내가쓴 줄인데 안 써도 됨
MemberDto dto=new MemberDto();
dto.setName("김구라");
dto.setAddr("노량진");
dto.setNum(1);
MemberDao dao=new MemberDao();
boolean isSuccess = dao.update(dto);
if(isSuccess) {
System.out.println("정보가 수정되었습니다.");
}else {
System.out.println("정보를 수정할 수 없습니다.");
}
}
}
삭제하기
이번에도 또 MemberDto 만들어서 dto.setNum(1); 부터 할 뻔 했다.
package test.main;
import test.dao.MemberDao;
import test.dto.MemberDto;
public class MainClass16 {
public static void main(String[] args) {
/*
*MemberDao 객체를 이용해서 1번 회원의 정보를 삭제하기
*단, 성공 여부를 콘솔창에 출력하세요
*/
MemberDao dao=new MemberDao(); //대신에 var dao라고 선언할 수도 있다(타입 추론이 가능해서)
boolean isSuccess = dao.delete(1);//대신에 var isSuccess라고 선언할 수도 있다(타입 추론이 가능해서)
if(isSuccess) {
System.out.println("회원정보를 삭제했습니다");
}else {
System.out.println("회원정보를 삭제할 수 없습니다.");
}
}
}
혼자 해본 코드 : else에서 에러가 나서 처리가 되지 않음
package test.main;
import java.util.Scanner;
import java.util.function.ToIntBiFunction;
import test.dao.MemberDao;
import test.dto.MemberDto;
public class MainClass17 {
public static void main(String[] args) {
/*
* Scanner 객체를 이용해서 불러올 회원의 번호를 입력받은 다음
* 입력한 번호에 해당하는 회원의 정보를 MemberDao 객체를 이용해서 얻어온 다음
*
* 해당 회원이 존재하면 해당회원의 정보를 콘솔에 출력하고
*
* 존재하지 않으면 "X번 회원이 존재하지 않습니다."를 콘솔창에 출력하는 프로그래밍을 해보세요
*/
Scanner scan = new Scanner(System.in);
System.out.println("번호 입력: ");
int num=scan.nextInt();
MemberDao dao= new MemberDao();
MemberDto dto= dao.getData(num);
if(dto!=null) {
System.out.printf("번호 : %d, 이름 : %s, 주소 : %s", dto.getNum(), dto.getName(), dto.getAddr());
}else {
System.out.printf("%d 번 회원이 존재하지 않습니다", dto.getNum());
}
}
}
선생님이랑 한거
회원이 존재하지 않습니다 옆에 dto.getNum()이 아니라 num으로 했어야 함
MemberDao 객체를 이용해서 회원 목록을 얻고 전체 목록을 반복문 돌면서 출력하기
for문 for(데이터 타입 tmp: 리스트의지역변수){ }형태로 출력하는거 복습하면서 다시 주의 깊게 보기 자꾸 이걸 잊어먹음(복습을 안했으니까 당연하지 임ㅁ 읍읍)
package test.main;
import java.util.List;
import test.dao.MemberDao;
import test.dto.MemberDto;
public class MainClass18 {
public static void main(String[] args) {
/*
* MemberDao 객체를 이용해서 회원 목록을 얻어온 다음
* 전체 목록을 반복문 돌면서 이쁘게 출력해보세요.
*/
List<MemberDto> list = new MemberDao().getList();
for(MemberDto tmp: list) {
System.out.printf("번호:%d, 이름: %s, 주소: %s", tmp.getNum(), tmp.getName(), tmp.getAddr());
System.out.println();
}
}
}
<16:30~~ 7교시, 8교시>
7교시, 8교시 동안 아래 세 가지 하기, 단 복사 붙여넣기 최소화 하기
1. id, title, content를 담을 수 있는 PostDto 클래스를 test.dto 패키지에 만들어보기
일단 Dto는 혼자 만들 수 있는 느낌...인데 맞게 했겠지?
package test.dto;
public class PostDto {
private int id;
private String title;
private String content;
public PostDto() {}
public PostDto(int id, String title, String content) {
super();
this.id = id;
this.title = title;
this.content = content;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
};
}
2. PostDto를 활용한 PostDao클래스를 test.dao 패키지에 만들기
insert, update, delete, getData, getList 메소드가 있어야 함
package test.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import test.dto.MemberDto;
import test.dto.PostDto;
import test.util.DBConnector;
public class PostDao {
public boolean insert(PostDto dto) {
Connection conn =null;
PreparedStatement pstmt=null;
int rowcount = 0;
try {
conn= new DBConnector().getConn();
String sql="""
insert into posts
(id, title, content)
values(posts_seq.nextval, ?, ?)
""";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, dto.getTitle());
pstmt.setString(2, dto.getContent());
rowcount=pstmt.executeUpdate();
}catch(SQLException se){
se.printStackTrace();
}finally {
try {
if(pstmt!=null)pstmt.close();
if(conn!=null)conn.close();
}catch(Exception e) {}
}
if(rowcount>0) {
return true;
}else {
return false;
}
}
public boolean delete(int id) {
Connection conn =null;
PreparedStatement pstmt=null;
int rowcount=0;
try {
conn = new DBConnector().getConn();
String sql="""
delete from posts
where id=?
""";
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1, id);
rowcount=pstmt.executeUpdate();
}catch(SQLException se) {
se.printStackTrace();
}finally {
try {
if(pstmt!=null) pstmt.close();
if(conn!=null)conn.close();
}catch(Exception e) {
}
}
if(rowcount>0) {
return true;
}else {
return false;
}
}
public boolean update(PostDto dto) {
Connection conn=null;
PreparedStatement pstmt=null;
int rowcount=0;
try {
conn= new DBConnector().getConn();
String sql="""
update posts
set title=?, content=?
where id=?
""";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, dto.getTitle());
pstmt.setString(2, dto.getContent());
pstmt.setInt(3, dto.getId());
rowcount=pstmt.executeUpdate();
}catch(SQLException se) {
se.printStackTrace();
}finally {
try {
if(pstmt!=null) pstmt.close();
if(conn!=null)conn.close();
}catch(Exception e){
}
}
if(rowcount>0) {
return true;
}else {
return false;
}
}
public PostDto getData(int id) {
PostDto dto=null;
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
conn= new DBConnector().getConn();
String sql="""
select title, content
from posts
where id=?
""";
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1, id);
rs=pstmt.executeQuery();
if(rs.next()) {
dto=new PostDto();
dto.setId(id);
dto.setTitle("title");
dto.setContent("content");
}
}catch(SQLException se) {
se.printStackTrace();
}finally {
try {
if(rs!=null)rs.close();
if(pstmt!=null)pstmt.close();
if(conn!=null)conn.close();
}catch(Exception e) {}
}
return dto;
}
public List<PostDto> getList(){
List<PostDto> list=new ArrayList<>();
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
conn = new DBConnector().getConn();
String sql="""
select id, title, content
from posts
order by id asc
""";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()) {
PostDto dto=new PostDto();
dto.setId(rs.getInt("id"));
dto.setTitle(rs.getString("title"));
dto.setContent(rs.getString("content"));
list.add(dto);
}
}catch(SQLException se) {
se.printStackTrace();
}finally {
try {
if (rs!=null) rs.close();
if(pstmt!=null) pstmt.close();
if (conn!=null) conn.close();
}catch(Exception e) {}
}
return list;
}
}
기...기운 빠져...ㅇ<-<
3. MainClass14~MainClass18에서 했던 유사 작업 코드 작성하기
Quizmain01~QuizMain05라는 클래스 이름으로 순서대로 만들면 됨
으악 못했다 내일 일찍 와서 하는거 시도해보기 ㅠㅠㅠㅠㅠ
'공부의 기록 > 자바 풀 스택 : 수업내용정리' 카테고리의 다른 글
자바 풀 스택 12/31 오후 기록 028-2 (0) | 2024.12.31 |
---|---|
자바 풀 스택 12/31 오전 기록 028-1 (1) | 2024.12.31 |
자바 풀 스택 12/30 오전 기록 027-1 (0) | 2024.12.30 |
자바 풀 스택 12/27 오후 기록 026-2 (1) | 2024.12.27 |
자바 풀 스택 12/27 오전 기록 026-1 (1) | 2024.12.27 |