Spring/Model1 _2(MVC)

0825 JSP - MySQL - DELETE ~ 객체, 자바빈

jeoniee 2022. 8. 25. 17:51
728x90
반응형

 

Runtime 에러 

혹시나 mySql 을 켰을 때, runtime 에러가 난다면  DB가 꺼져 있어서 그런 것이다.

 

실행 - service 에 들어가서 Mysql 80 더블클릭 => 실행 시켜준다.

 

mySQL 스키마 = > 새로고침

Admin                => Startup 

 

누르면 다시 DB가 연결 된다. .! 


 

 

 

구별하기위해서

구조에 들어가서 주민번호에 UQ를 선택한다! 

 

 

 

처음부터 테이블 설계할때부터 제약 조건을 줘야한다.

하지만 처음에 안했기 때문에 강제로 걸어줘야 하는 것. 

 

 

 

중복되는 정보가 있을 경우. 삭제하는 과정을 배울 것이다. 

 

 

 

 

 

이클립스에서 deleteForm 실행 

 

주민번호는 개인정보이기 때문에 post 방식을 쓸 것

<!-- 	사용자 이름, 주민번호 입력  -->

<form action="deletePro.jsp" method="post">
	이름 : <input type = "text" name = "name"><br>
	주민번호 : <input type = "text" name = "jumin"><br>
	
	<input type = "submit" value = "탈퇴하기">

정보는 MySql DB에 있음. 

 

deletePro 페이지 생성 
- 회원정보 삭제

 

1. 회원정보가 필요 (deleteForm.jsp 전달, 한글 처리 (form 태그가 post 방식이라서)
2. 디비에서 삭제
3. 드라이버 로드
4. 디비 연결
5. SQl 작성 & pstmt 객체 생성
6. SQL 실행
7. 데이터가 있을 경우에만 회원 삭제 
8. SQL 작성 (delete) & pstmt 객체 9. SQL 실행

 

 

외워야한다 무족권........아니면 죽음뿐...

 

 

 

 

1. 한글 처리 

request.setCharacterEncoding("UTF-8");



2. 전달 정보 저장 

String name = request.getParameter("name");
String jumin = request.getParameter("jumin");



3.디비연결정보

final String DRIVER = "com.mysql.cj.jdbc.Driver";
final String DBURL = "jdbc:mysql://localhost:3306/jspdb";
final String DBID = "root";
final String DBPW = "1234";



1. 드라이버 로드

Class.forName(DRIVER);




2. 디비 연결

Connection con = DriverManager.getConnection(DBURL,DBID,DBPW);


 
3.SQL 작성 & pstmt 객체

String sql = "Select jumin from itwill_member where name =?";
PreparedStatement pstmt = con.prepareStatement(sql);

 

 

?을 넣었으니까,  ??? 처리 해준다. 

pstmt.setString(1,name);

 

 

 

4. sql 실행 

ResultSet rs = pstmt.executeQuery();

 

 

 

5.데이터처리

if(rs.next()){

                 //회원 

              if(jumin.equals(rs.getString("jumin"))){
                //회원 - 주민번호 동일 => 삭제 
                // 3.sql & pstmt 다시 만들어야함 

                sql = "delete from itwill_member where jumin=?" ;

                pstmt = con.prepareStatement(sql);

                pstmt.setString(1, jumin);

               // 4. sql 실행 

                pstmt.executeUpdate();
             }
}else{
              //비회원
}

 

 

MySql 에서 Not null 걸어주기 

 

이렇게 해야 데이터가 저장 된다.

 

 

 

 

DB 삭제하기 

 

 

이클립스 - deleteForm으로 실행

mySql 에 있던 DB 값 하나를 입력했다.

 

kim, 

900101-1231231 

을 입력하고 탈퇴하기 를 클릭! 

 

 

했더니 

MySql 에서 kim 정보가 사라짐!!!!! 개신기(안신기함) 

 


강사님이 이걸 잘해야한다고 함

**CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말이다. 사용자 인터페이스가 갖추어야 할 기능(정보의 참조/검색/갱신)을 가리키는 용어로서도 사용된다. 

 

패키지명에 회사 도메인을 거꾸로 써라..??

com.naver.www.어쩌구

 


클래스 만들기 

Java Resources에 클래스 하나 만들어준다.

 

package com.itwillbs.test;

 데이터 -> 저장 -> 변수 
 코드 -> 저장 -> 메서드 
 데이터(같은 형태, 여러개) -> 저장 -> 배열 

public class TestClass {

/*
	 * 클래스 영역 - 변수 , 메서드 선언 해야함. 
	 */
	
	int age; // 객체의 속성 (변수) 
	
	public int getAge() {
		return age;
	}
	
	public static void main(String[] args) {
		//객체 생성 
		Phone p1 = new Phone();
		//p1.model ="폴드4";
		p1.setModel("폴드 4");
		p1.color ="black";
		p1.price =100;
		
		//p1.model = "아이폰13";
		
		
		Phone p2 = new Phone();
	//	p2.model = "아이폰14";
		p2.color = "silver";
		p2.price = 200;
		
		//Z플립4/green/150짜리 휴대폰 생성
		
		Phone p3 = new Phone();
	//	p3.model = "Z플립4";
		p3.color = "green";
		p3.price = 150;
		
		System.out.println(p1.getModel() + "의 가격은 " + p1.price+"입니다.");
		//System.out.println(p1.model + "의 가격은 " + p3.price+"입니다.");
	}

	}
		
	//휴대폰(phone) 객체 - 모델명(model), 색상(color), 가격(price)
	class Phone{
		//캡슐화. 
		private String model;
		
		String color;
		int price;
		
		//메서드
		//alt shift s + r
		public String getModel() {
			return model;
		}
		public void setModel(String model) {
			this.model = model;
		}
		
	class ATM{ //계좌정보 
		// private (접근지정자/제어자)는 클래스 안에서만 사용가능 
		private int money; // 잔액 저장 
		
		// alt shift s + r => setter(), getter() 생성 
		// => 은행원. 달라는 돈 꺼내주는 거임 
		public int getMoney() {
			return money;
		}

		public void setMoney(int money) {
			this.money = money;
		}
		
		
	}
		
		
		
}

 

'객체'란?

붕어빵.

내 눈앞에 보이는 모든 대상 .   

객체(object)란 간단히 이야기하자면 실생활에서 우리가 인식할 수 있는 사물로 설명할 수 있다.

이러한 객체의 상태(state)와 행동(behavior)을 구체화하는 형태의 프로그래밍이 바로 객체 지향 프로그래밍.

이때 객체를 만들어 내기 위한 설계도와 같은 개념을 클래스(class)라고 함.

 

 

객체 -1) 속성  (명사) - 변수

          2) 동작  (동사) - 메서드 

 

'클래스' 란?  

붕어빵 틀.

객체의 동작을 코드로 만든 것

객체를 생성하기 위한 자바코드(설계도)

자바에서는 이러한 설계도인 클래스를 가지고, 여러 객체를 생성하여 사용.

 

클래스는 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메소드(method)로 구성됨.

즉, 필드(field)란 클래스에 포함된 변수(variable)를 의미

또한, 메소드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합.

=> [사용자 정의 타입]

 

'메모리'

클래스도 객체를 만들기 위한 뭔가가 필요함. 실행을 도와주는..


 붕어빵틀 -> 가열 -> 붕어빵
 클래스 -> 메모리 올리기 (인스턴스화) -> 객체 (인스턴스)

 

public class TestClass {
	
    클래스 영역 - 변수 , 메서드 선언 해야함
    
    int age; 객체의 속성 (변수) 
    
    public int getAge() {  객체의 동작 (메서드)
		return age;
}

내가 만든 age라는 변수를 return 함 

 

 

휴대폰 객체 만들기

모델명(model), 색상(color), 가격(price)

public static void main(String[] args) {
		객체 생성 
		Phone p1 = new Phone();
		p1.model ="폴드4";
		p1.color ="black";
		p1.price =100;
		
		p1.model = "아이폰13";
		
		
		Phone p2 = new Phone();
		p2.model = "아이폰14";
		p2.color = "silver";
		p2.price = 200;
		
		Z플립4/green/150짜리 휴대폰 생성
		
		Phone p3 = new Phone();
		p3.model = "Z플립4";
		p3.color = "green";
		p3.price = 150;
		
		System.out.println(p1.model + "의 가격은 " + p1.price+"입니다.");
		System.out.println(p1.model + "의 가격은 " + p3.price+"입니다.");
	}

	}
		
	휴대폰(phone) 객체 - 모델명(model), 색상(color), 가격(price)
	class Phone{
		캡슐화. 
		private String model;
		
		String color;
		int price;

클래스 캡슐화?

 

객체. 즉, 클래스의 내부 변수와 메소드를 하나로 패키징하는 특징이다. 객체에 선언된 변수나 메소드가 구분없이 중구난방으로 접근할 수 있다면 정상적인 객체로 보기 어렵다.

 

연관된 목적을 가지는 변수와 함수를 하나의 클래스로 묶어 외부에서 쉽게 접근하지 못하도록 은닉하는 것이다.
캡슐화는 중요한 데이터를 쉽게 바꾸지 못하도록 할 때 사용한다.

 


PRIVATE 멤버 변수 

메서드

alt shift s + r 

public String getModel() {
			return model;
		}
		public void setModel(String model) {
			this.model = model;
		}

이게 뭘까? 

외부 접근이 안되는 변수에 값을 넣어주는 것

자바에서는 이렇게 클래스 멤버변수에 직접 접근하는 코드를 막기 위해 Private 기능을 제공한다.

Private 멤버는 외부에서 값을 직접적으로 대입시킬 수 없음!

 

getModel()    =    GETTER 

정보를 가져와서 return 함 

 

setmodel()   =    SETTER 

model 이란 정보를 받아와서 설정하는 것   

 

 

 

 

넣기 = get

꺼내기 = set

 

Phone p1 = new Phone();
		p1.setModel("폴드 4");
		p1.color ="black";
		p1.price =100;
        
        
        
System.out.println(p1.getModel() + "의 가격은 " + p1.price+"입니다.");

 

 

 

계좌정보 class 만들기

 

private (접근지정자/제어자)는 클래스 안에서만 사용가능

 alt shift s + r => setter(), getter() 생성 => 은행원같은 개념. 달라는 돈 꺼내주는 것.

class ATM{      계좌정보 
		private int money; 잔액 저장 
	
		public int getMoney() {
			return money;
		}

		public void setMoney(int money) {
			this.money = money;
		}

 

 

 

PUBLIC , PRIVATE 멤버 변수의 차이

 

Private 멤버는 class 외부에서 접근할 수 없는 변수를

Public 멤버는 class 외부에서 접근할 수 있는 변수를 의미한다.

 

 

 

 

자바빈

JSP에서 객체를 가져오기 위한 기법으로 데이터 전달 오브젝트 파일 DTO(Data Transfer Object)라고도 한다. 자바로 작성된 컴포넌트들 즉, 클래스(Class)를 일반적으로 말한다.

 

왜 사용할까?

디자인 부분과 비즈니스 로직 부분을 분리하기 위함이다. 편리함 증대 

 

자바빈 설계규약 

 

*bean 이란,  객체  를 뜻한다. 

 

 

 

javaBean 클래스 생성 
<h1>javaBean1.jsp</h1>
		
<!-- 		아이디 정보를 입력받아서, javaBeanPro1.jsp 페이지로 전달 -->


<form action = "javaBeanPro1.jsp" >
아이디 : <input type = "text" name = "id" > <br>
	<input type = "submit" value = "전달하기">

 

javaBeanPro1.jsp 로 넘겨주기
<h1>javaBeanPro1.jsp</h1>
<% 
	String id = request.getParameter("id");
%>
	아이디 : <%=id %><br>

 

 

Java resources에 패키지, 클래스 추가 해주기 (자바빈 만드는 과정)

 

alt shift s + r

package com.itwillbs.javabean;

public class JavaBean1 {
	 자바빈의 역할을 할 클래스 -> 정보를 한번에 저장 
	
	private String id;
	
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	} 
}

 

 

자바빈 사용해서 정보 저장 / 처리해보자! 
자바빈 객체 생성하기 

자바빈이라고 하는 객체를 새로 하나 만들어라,

JavaBean1 jb = new JavaBean1();

 

제일 위에 보면, <%@page import="com.itwillbs.javabean.JavaBean1"%> 이라고 되어있다!

자바빈은 외부의 파일이기 때문에 import 해서 가져와야한다.

 

import - > class 선언과 같다. 

 

 

자바빈에 객체 정보를 저장 
jb.setId(request.getParameter("id"));

 

 

저장된 정보 출력 

 

아이디2: <%=jb.getId() %><br>

 

 

 

액션태그 - 자바빈 객체 
자바빈 객체 생성(JSP코드)

 

 

<jsp:useBean id = "객체명" class = "객체위치" />

 

	<jsp:useBean id = "jb2" class="com.itwillbs.javabean.JavaBean1" />

위에 jb가 있기 때문에, jb 라고 쓰면 중복 오류가 난다. 

 

 

 

자바빈에 객체 정보를 저장

 

<jsp:setProperty property="객체의 변수명" name="객체명" param="파라메터명"/>

 

<jsp:setProperty property="id" name="jb2" param="id"/>

 

 

 

property, param 값이 동일 한 경우, param 값 생략 가능

 

<jsp:setProperty property="id" name="jb2" />

 

 

자바빈에 저장된 객체 정보 출력

 

<jsp:getProperty property="id" name="jb2"/>

 

 

객체 정보가 많아졌을 때

 

Property = "*" 

데이터가 하나 밖에 없어서, 그전이나 자바빈이나 효율적이라는 생각이 들지 않음. 

하지만, property 값에 * 를 넣는다면 ( param이 property와 같으면 생략이니 이것은 같다는 뜻이다), 전부 값이 다 나옴 

 

전달되는 모든 파라메터 값을 모든 변수에 저장 가능

 

<jsp:setProperty property="*" name="jb2" />

 

 

다른 강의도 찾아보고 연습해볼 것! 

728x90
반응형