공부의 기록/자바 풀 스택 : 수업내용정리

자바 풀 스택 12/30 오전 기록 027-1

파티피플지선 2024. 12. 30. 13:14

9:20 경 학원 도착
주말에 복습하던 내용 조금 더 정리하고 수업 들을 준비
 
 
<9:30 1교시>
로컬에서 새로 만든 폴더에 대해 vs code에서 terminal로 새로운 "혈통"의 깃허브 저장소 만들기
git  init
git  add  .
git  commit  -m  "index.html added"
git  remote  add  origin   저장소의위치(깃허브링크)
git  push  origin  master
 
올린 파일 변경하고 다시
 
git  add  .
git  commit  -m  "p1 added"
git  push  origin  master
 
깃허브에서 README.md 작성하고
commit changes 눌러서 README.md를 만든 다음
로컬에서 README.md를 받으려면
 
git  fetch  origin  master
git  checkout  master
 
를 하면 README.md가 보일 것이고,
 
git  merge  origin/master
 
방금 만든 원격 저장소를 MyHome 폴더에서 clone 하려면 새로운 폴더 만들 필요 없이 그냥 바로 git bash를 열고
 
git   clone   저장소위치(깃허브링크)
 
를 입력하면 끝난다.
 
나는 새로운 폴더를 만들어서 시도했는데, 굳이 그럴 필요가 없었던게, git init을 하지 않으면 그 폴더 전체가 git에 의해 관리되겠다는 의미가 아니기 때문에 그냥 git bash를 여는 거 자체는 전혀 문제가 아니어서 걱정할 필요가 없었다.
그냥 git bash 열자마자 clone 하면 바로 복제된 폴더가 나타난다. 
 
local 폴더에 있는 것은 학원에서 만든 것 그리고 이걸 
Remote로 연결한 깃허브저장소의 "혈통의 시작"이자 기원이 된 것이 local의 폴더.
MyHome 폴더에 있는 것은 복제된 것


 
 
로컬(처음 만들어진 곳)에서 변경된 내용이 있다면 add, commit 하고 push 한 다음 깃허브에서 확인해보고
MyHome 폴더에서는 fetch origin master 하고 merge origin/master 하면 된다.(또는 pull로 fetch와 merge를 한번에 할 수 있다)
거꾸로 MyHome 폴더에서 변경된 내용이 있다면 add commit 하고 push 한 다음 깃허브에서 확인해보고
로컬에서 fetch origin master 하고 merge origin/master 하면 된다.(마찬가지로 pull로 한 번에 할 수 있다)
 
 
<10:30 2교시>

package test.main;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import test.dto.MemberDto;
import test.util.DBConnector;

public class MainClass10 {
	public static void main(String[] args) {
		//추가할 회원 정보라고 가정하자
		String name="이름1";
		String addr="노량진";
		
		//추가할 회원정보를 MemberDto 객체에 담고
		MemberDto dto=new MemberDto();
		dto.setName(name);
		dto.setAddr(addr);
		
		//미리 준비된 메소드를 이용해서 DB에 저장하고 성공여부를 리턴받기
		boolean isSuccess=insert(dto);
		if(isSuccess) {
			System.out.println("저장했습니다");
		}else {
			System.out.println("저장하지 못했습니다");
		}
		
	}
	//매개변수에 전달된 MemberDto 객체에 담긴 name과 addr을 DB에 저장하고
	//작업의 성공여부를 리턴하는 메소드
	public static boolean insert(MemberDto dto) { //리턴 값이 boolean이라서 boolean 값이 나오기 전까지는 에러가 난 상태
		//필요한 객체를 담을 지역변수 미리 만들기
		Connection conn=null;
		PreparedStatement pstmt=null;
		//변경된 row 갯수를 저장할 변수를 0을 대입하여 미리 만들어두기
		int rowCount=0;
		try {
			//Connection 객체의 참조값 얻어내기
			conn=new DBConnector().getConn();
			//실행할 미완성의 sql 문
			String sql= """
						Insert into member
						(num, name, addr)
						values(member_seq.Nextval, ?, ?)
					""";
			//미완성의 sql 문을 전달하면서 PreparedStatement객체의 참조값 얻어내기
			pstmt = conn.prepareStatement(sql);
			//?에 값 바인딩하기
			pstmt.setString(1, dto.getName());
			pstmt.setString(2, dto.getAddr());
			//sql문 실행하고 추가(Insert)되거나, 변경(Update)되거나, 삭제(Delete)된 row의 갯수(int 값)를 리턴 받음
			rowCount= pstmt.executeUpdate();
		}catch(SQLException se) {
			se.printStackTrace();
		}finally {
			try {
				if(pstmt!=null)pstmt.close();
				if(conn!=null)conn.close();
			}catch(Exception e) {}
		}
		//rowCount 변수에 들어 있는 값을 확인해서 작업의 성공 여부를 리턴해줌
		if(rowCount>0) {
			return true;
		}else {
			return false;
		}	
		
		
		
	}
}

 
 
 
예제 풀어보기

* 수정할 회원의 정보(번호, 이름, 주소)가 MemberDto 객체에 담겨서 전달되는 메소드

* 성공여부가 리턴되는 메소드

 
 
<11:30 3교시>
2교시 예제 답

package test.main;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import test.dto.MemberDto;
import test.util.DBConnector;

public class MainClass11 {
	public static void main(String[] args) {
		//수정할 회원 정보라고 가정하자
		String name="이름3";
		String addr="다른 주소";
		int num = 1;
		
		//수정할 회원정보를 MemberDto 객체에 담고
		MemberDto dto=new MemberDto();
		dto.setName(name);
		dto.setAddr(addr);
		dto.setNum(num);
		//미리 준비된 메소드를 이용해서 DB에 저장하고 성공여부를 리턴받기
		boolean isSuccess=update(dto);
		if(isSuccess) {
			System.out.println("수정했습니다");
		}else {
			System.out.println("수정하지 못했습니다");
		}
	}
	/*
	 * 수정할 회원의 정보(번호, 이름, 주소)가 MemberDto 객체에 담겨서 전달되는 메소드
	 * 성공여부가 리턴되는 메소드
	 */
	public static boolean update(MemberDto dto) {
		//필요한 객체를 담을 지역변수 미리 만들기
				Connection conn=null;
				PreparedStatement pstmt=null;
				//변경된 row 갯수를 저장할 변수를 0을 대입하여 미리 만들어두기
				int rowCount=0;
				try {
					//Connection 객체의 참조값 얻어내기
					conn=new DBConnector().getConn();
					//실행할 미완성의 sql 문
					String sql= """
								Update member
								set name=?, addr=?
								where num=?
							""";
					//미완성의 sql 문을 전달하면서 PreparedStatement객체의 참조값 얻어내기
					pstmt = conn.prepareStatement(sql);
					//?에 값 바인딩하기
					pstmt.setString(1, dto.getName());
					pstmt.setString(2, dto.getAddr());
					pstmt.setInt(3,	dto.getNum());
					//sql문 실행하고 추가(Insert)되거나, 변경(Update)되거나, 삭제(Delete)된 row의 갯수(int 값)를 리턴 받음
					rowCount= pstmt.executeUpdate();
				}catch(SQLException se) {
					se.printStackTrace();
				}finally {
					try {
						if(pstmt!=null)pstmt.close();
						if(conn!=null)conn.close();
					}catch(Exception e) {}
				}
				//rowCount 변수에 들어 있는 값을 확인해서 작업의 성공 여부를 리턴해줌
				if(rowCount>0) {
					return true;
				}else {
					return false;
				}	
				
				
		
	}
}

 
 
row를 delete 하는 예제
처음에 앞에 두 개 때 복사 붙여넣기 했던 부분 때문에 int num을 바꾼 부분 때문에
pstmt.setInt(1, num);
부분에 num 대신 dto.getNum();을 썻는데 그렇게 할 필요가 없던 거임.

package test.main;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import test.dto.MemberDto;
import test.util.DBConnector;

public class MainClass12 {
	public static void main(String[] args) {
		//삭제할 회원 정보
		int num = 2;
		
	
		//미리 준비된 메소드를 이용해서 DB에 저장하고 성공여부를 리턴받기
		boolean isSuccess=delete(num);
		if(isSuccess) {
			System.out.println("수정했습니다");
		}else {
			System.out.println("수정하지 못했습니다");
		}
	}
	
	//매개변수로 전달되는 회원의 번호를 이용해서 회원 한명의 정보를 삭제하고 성공여부를 리턴하는 메소드
	public static boolean delete(int num) {
		//필요한 객체를 담을 지역변수 미리 만들기
		Connection conn=null;
		PreparedStatement pstmt=null;
	
		//변경된 row 갯수를 저장할 변수를 0을 대입하여 미리 만들어두기
		int rowCount=0;
		try {
			//Connection 객체의 참조값 얻어내기
			conn=new DBConnector().getConn();
			//실행할 미완성의 sql 문
			String sql= """
						delete from member
						where num=?
					""";
			//미완성의 sql 문을 전달하면서 PreparedStatement객체의 참조값 얻어내기
			pstmt = conn.prepareStatement(sql);
			//?에 값 바인딩하기
			pstmt.setInt(1,	num);
			//sql문 실행하고 추가(Insert)되거나, 변경(Update)되거나, 삭제(Delete)된 row의 갯수(int 값)를 리턴 받음
			rowCount= pstmt.executeUpdate();
		}catch(SQLException se) {
			se.printStackTrace();
		}finally {
			try {
				if(pstmt!=null)pstmt.close();
				if(conn!=null)conn.close();
			}catch(Exception e) {}
		}
		//rowCount 변수에 들어 있는 값을 확인해서 작업의 성공 여부를 리턴해줌
		if(rowCount>0) {
			return true;
		}else {
			return false;
		}	
		
		

	}
	
}

 
 
 
회원 한명의 정보만 select 해오기

package test.main;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import test.dto.MemberDto;
import test.util.DBConnector;

public class MainClass13 {
	public static void main(String[] args) {
		//select 할 회원 번호
		int num = 2;
		
		//미리 준비된 메소드를 이용해서 회원번호를 전달하고 해당하는 회원 정보를 DB에서리턴받기
		MemberDto dto=getData(num);
		if(dto!=null) {
			System.out.printf("번호:%d, 이름:%s, 주소:%s" , dto.getNum(),dto.getName(), dto.getAddr());
		}else {
			System.out.printf("요청한 %d 회원의 정보를 찾을 수 없습니다", num);
		}
	}
	//매개변수로 전달되는 번호에 해당하는 회원 정보를 select 해서 MemberDto 객체에 담아서 리턴해주는 메소드
	public static MemberDto getData(int num) {
		//memberdto 객체를 담을 변수를 미리 선언
		MemberDto dto=null;
		
		//필요한 객체를 담을 지역변수 미리 만들기
		Connection conn=null;
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		try {
			//Connection 객체의 참조값 얻어내기
			conn=new DBConnector().getConn();
			//실행할 미완성의 sql 문
			String sql= """
						select name, addr 
						from member
						where num=?
					""";
			//미완성의 sql 문을 전달하면서 PreparedStatement객체의 참조값 얻어내기
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, num);
			rs=pstmt.executeQuery();
			//만일 select 된 row가 있다면 if 안으로 들어가서 실행, 없으면 바깥으로 빠져서 null return
			if(rs.next()) {
				//MemberDto 객체를 생성해서
				dto=new MemberDto();
				//select 된 정보를 담는다
				dto.setNum(num);
				dto.setName(rs.getString("name"));
				dto.setAddr(rs.getString("addr"));
				
			}
		}catch(SQLException se) {
			se.printStackTrace();
		}finally {
			try {
				if(pstmt!=null)pstmt.close();
				if(conn!=null)conn.close();
				if(rs!=null)rs.close();
			}catch(Exception e) {}
		}
		return dto;
	}
	
}

 
 
<12:30 4교시>

 
주말에 java 복습 정리하던 거 이어서 정리할려고 했는데 과제가 주어졌다.
 
 
 
과제

package test.dao;

import test.dto.MemberDto;

/*
 * 회원정보를 insert, update, delete, select(getData, getList)할 수있는 기능을 가진 객체를 생성할 클래스 설계하기 = 편하다
 * -이런 기능을 가진 객체를 Data Access Object 라고 한다 DAO
 */
public class MemberDao {
	//매개 변수에 전달된 MemberDto 객체에 담긴 회원 한명의 정보를 DB에 저장하는 메소드
	public boolean insert(MemberDto dto) {
		
	}
	//매개 변수에 전달된 번호에 해당하는 회원 한명의 정보를 삭제하는 메소드
	public boolean delete(int num) {
		
	}
	//매개 변수에 전달된 MemberDto 객체에 담긴 회원 한명의 정보를 수정하는 메소드
	public boolean update(MemberDto dto) {
		
	}
	// 전체 회원 목록을 리턴하는 메소드
	public List<MemberDto> getList(){
		
	}
	//매개변수에 전달된 번호에 해당하는 회원 한명의 정보를 리턴하는 메소드
	public MemberDto getData(int num) {
		
	}	
}

 
 
주말에 하던거 마저 정리하고 과제 해보러 감.

 
 
과제 시도 (복사 붙여넣기의 향연)

더보기
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(getData, getList)할 수있는 기능을 가진 객체를 생성할 클래스 설계하기 = 편하다
 * -이런 기능을 가진 객체를 Data Access Object 라고 한다 DAO
 */
public class MemberDao {
	//매개 변수에 전달된 MemberDto 객체에 담긴 회원 한명의 정보를 DB에 저장하는 메소드
	public boolean insert(MemberDto dto) {
		//필요한 객체를 담을 지역변수 미리 만들기
				Connection conn=null;
				PreparedStatement pstmt=null;
				//변경된 row 갯수를 저장할 변수를 0을 대입하여 미리 만들어두기
				int rowCount=0;
				try {
					//Connection 객체의 참조값 얻어내기
					conn=new DBConnector().getConn();
					//실행할 미완성의 sql 문
					String sql= """
								Insert into member
								(num, name, addr)
								values(member_seq.Nextval, ?, ?)
							""";
					//미완성의 sql 문을 전달하면서 PreparedStatement객체의 참조값 얻어내기
					pstmt = conn.prepareStatement(sql);
					//?에 값 바인딩하기
					pstmt.setString(1, dto.getName());
					pstmt.setString(2, dto.getAddr());
					//sql문 실행하고 추가(Insert)되거나, 변경(Update)되거나, 삭제(Delete)된 row의 갯수(int 값)를 리턴 받음
					rowCount= pstmt.executeUpdate();
				}catch(SQLException se) {
					se.printStackTrace();
				}finally {
					try {
						if(pstmt!=null)pstmt.close();
						if(conn!=null)conn.close();
					}catch(Exception e) {}
				}
				//rowCount 변수에 들어 있는 값을 확인해서 작업의 성공 여부를 리턴해줌
				if(rowCount>0) {
					return true;
				}else {
					return false;
				}	
	}
	
	//매개 변수에 전달된 번호에 해당하는 회원 한명의 정보를 삭제하는 메소드
	public boolean delete(int num) {
		//필요한 객체를 담을 지역변수 미리 만들기
				Connection conn=null;
				PreparedStatement pstmt=null;
			
				//변경된 row 갯수를 저장할 변수를 0을 대입하여 미리 만들어두기
				int rowCount=0;
				try {
					//Connection 객체의 참조값 얻어내기
					conn=new DBConnector().getConn();
					//실행할 미완성의 sql 문
					String sql= """
								delete from member
								where num=?
							""";
					//미완성의 sql 문을 전달하면서 PreparedStatement객체의 참조값 얻어내기
					pstmt = conn.prepareStatement(sql);
					//?에 값 바인딩하기
					pstmt.setInt(1,	num);
					//sql문 실행하고 추가(Insert)되거나, 변경(Update)되거나, 삭제(Delete)된 row의 갯수(int 값)를 리턴 받음
					rowCount= pstmt.executeUpdate();
				}catch(SQLException se) {
					se.printStackTrace();
				}finally {
					try {
						if(pstmt!=null)pstmt.close();
						if(conn!=null)conn.close();
					}catch(Exception e) {}
				}
				//rowCount 변수에 들어 있는 값을 확인해서 작업의 성공 여부를 리턴해줌
				if(rowCount>0) {
					return true;
				}else {
					return false;
				}	
				
	}
	
	//매개 변수에 전달된 MemberDto 객체에 담긴 회원 한명의 정보를 수정하는 메소드
	public boolean update(MemberDto dto) {
		//필요한 객체를 담을 지역변수 미리 만들기
		Connection conn=null;
		PreparedStatement pstmt=null;
		//변경된 row 갯수를 저장할 변수를 0을 대입하여 미리 만들어두기
		int rowCount=0;
		try {
			//Connection 객체의 참조값 얻어내기
			conn=new DBConnector().getConn();
			//실행할 미완성의 sql 문
			String sql= """
						Update member
						set name=?, addr=?
						where num=?
					""";
			//미완성의 sql 문을 전달하면서 PreparedStatement객체의 참조값 얻어내기
			pstmt = conn.prepareStatement(sql);
			//?에 값 바인딩하기
			pstmt.setString(1, dto.getName());
			pstmt.setString(2, dto.getAddr());
			pstmt.setInt(3,	dto.getNum());
			//sql문 실행하고 추가(Insert)되거나, 변경(Update)되거나, 삭제(Delete)된 row의 갯수(int 값)를 리턴 받음
			rowCount= pstmt.executeUpdate();
		}catch(SQLException se) {
			se.printStackTrace();
		}finally {
			try {
				if(pstmt!=null)pstmt.close();
				if(conn!=null)conn.close();
			}catch(Exception e) {}
		}
		//rowCount 변수에 들어 있는 값을 확인해서 작업의 성공 여부를 리턴해줌
		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 {
			//우리가 설계한 클래스로 객체생성후 Connection 객체 얻어내기
			conn=new DBConnector().getConn();
			String sql="""
				SELECT num, name, addr
				from member
			""";
			pstmt=conn.prepareStatement(sql);
			rs=pstmt.executeQuery();
			while(rs.next()) {
				int num=rs.getInt("num");
				String name=rs.getString("name");
				String addr=rs.getString("addr");
				//select 된 row 하나의 정보를 MemberDto 객체에 담는다.
				MemberDto dto=new MemberDto();
				dto.setNum(num);
				dto.setName(name);
				dto.setAddr(addr);
			
				//부서의 정보가 담긴 DeptDto 객체를 ArrayList 객체에 누적 시킨다.
				list.add(dto);
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
		
		return list;
	}
	
	
	//매개변수에 전달된 번호에 해당하는 회원 한명의 정보를 리턴하는 메소드
	public MemberDto getData(int num) {
		//memberdto 객체를 담을 변수를 미리 선언
			MemberDto dto=null;
			
			//필요한 객체를 담을 지역변수 미리 만들기
			Connection conn=null;
			PreparedStatement pstmt=null;
			ResultSet rs=null;
			try {
				//Connection 객체의 참조값 얻어내기
				conn=new DBConnector().getConn();
				//실행할 미완성의 sql 문
				String sql= """
							select name, addr 
							from member
							where num=?
						""";
				//미완성의 sql 문을 전달하면서 PreparedStatement객체의 참조값 얻어내기
				pstmt = conn.prepareStatement(sql);
				pstmt.setInt(1, num);
				rs=pstmt.executeQuery();
				//만일 select 된 row가 있다면 if 안으로 들어가서 실행, 없으면 바깥으로 빠져서 null return
				if(rs.next()) {
					//MemberDto 객체를 생성해서
					dto=new MemberDto();
					//select 된 정보를 담는다
					dto.setNum(num);
					dto.setName(rs.getString("name"));
					dto.setAddr(rs.getString("addr"));
					
				}
			}catch(SQLException se) {
				se.printStackTrace();
			}finally {
				try {
					if(pstmt!=null)pstmt.close();
					if(conn!=null)conn.close();
					if(rs!=null)rs.close();
				}catch(Exception e) {}
			}
			return dto;			
	}
	
}