Web/Java+Spring

JDBC - 입력/수정/조회/삭제

WakaraNai 2021. 5. 14. 01:20
728x90
반응형

입력

 

RoleDao.java에 addRole() 메소드 추가

// 입력
	public int addRole(Role role) {
		int insertCount = 0; // 반환값
		
		Connection conn = null;
		PreparedStatement ps = null;
		//  입력값은 결과값을 가져오지 않기에 resultset은 안 적음

		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		// 물음표가 들어간 쿼리는 완전한 쿼리문이 아니기에
		// 꼭 각각에 대한 바인딩이 필요
		String sql = "INSERT INTO role (role_id, description) VALUES ( ?, ? )";

		try {
			conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
			
			ps = conn.prepareStatement(sql);
			// 쿼리문에 바인딩하는 메소드
			ps.setInt(1, role.getRoleId());
			ps.setString(2, role.getDescription());
			// 쿼리가 실행됐을 때 받은 정수값 저장
			// 그저 입력 횟수일 뿐, DB 속 값이 아님
			insertCount = ps.executeUpdate();

		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return insertCount;
	}

 

 

 

JDBCExam2.java 생성 후 

role_id는 501, description은 CTO 데이터 추가

package kr.or.connect.jdbcexam;

import kr.or.connect.jdbcexam.dao.RoleDao;
import kr.or.connect.jdbcexam.dto.Role;

public class JDBCExam1 {

	public static void main(String[] args) {
		RoleDao dao = new RoleDao();
		Role role = dao.getRole(501);
		System.out.println(role);
	}

}

 

 

JDBCExam1.java에서

501로 role_id 조회하면 CTO가 출력됨

 

 

 

모두 조회

RoleDao.java에 getRoles() 메소드 추가

 

!! try-with-resolution 구문 잘 봐두기

// 모두 조회
	// 모든 Role 객체를 가져와야 하기에 List 반환형
	public List<Role> getRoles() {
		List<Role> list = new ArrayList<>();

		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

		String sql = "SELECT description, role_id FROM role order by role_id desc";
		
		
		// try-with-resources 구문
		// try()에서 객체 선언 및 할당. try()에서만 사용 가능
		// try을 벗어나면 자동적으로 각 객체들의 close() 호출 -> finally close() 필요X
		try (Connection conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
				PreparedStatement ps = conn.prepareStatement(sql)) {

			try (ResultSet rs = ps.executeQuery()) {

				while (rs.next()) { // 데이터가 여러 개이므로 while(rs.next())
					// role 객체 하나 생성해서 하나 담는 방식을 여러 번 반복
					String description = rs.getString(1);
					int id = rs.getInt("role_id");
					Role role = new Role(id, description);
					list.add(role); // list에 반복할때마다 Role인스턴스를 생성하여 list에 추가한다.
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return list;
	}

 

 

JDBCExam2.java 생성 후 실행

반환받은 리스트에서 원소 하나씩 출력

package kr.or.connect.jdbcexam;

import java.util.List;

import kr.or.connect.jdbcexam.dao.RoleDao;
import kr.or.connect.jdbcexam.dto.Role;

public class JDBCExam3 {

	public static void main(String[] args) {
		RoleDao dao = new RoleDao();
		List<Role> list = dao.getRoles();
		for(Role role : list) {
			System.out.println(role);
		}
	}

}

 

 

 

수정

updateRole()

// 수정
	public int updateRole(Role role) {
		int updateCount = 0;
		
		String sql = "update role set description = ? where role_id = ?";
		
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		
		try (Connection conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
				PreparedStatement ps = conn.prepareStatement(sql)) {
			
			ps.setString(1, role.getDescription());
			ps.setInt(2,  role.getRoleId());
			
			updateCount = ps.executeUpdate();

		}catch(Exception ex) {
			ex.printStackTrace();
		}
		
		return updateCount;
	}

 

main()

public static void main(String[] args) {
		//수정테스트
				int roleId = 501;
				String description = "CEE??";
				
				Role role = new Role(roleId, description);
				
				RoleDao dao = new RoleDao();
				int updateCount = dao.updateRole(role);

				System.out.println(updateCount);
			} 

CTO가 아닌 CEE??

 

 

삭제

deleteRole()

// 삭제
	public int deleteRole(Integer roleId) {
		int deleteCount = 0;

		String sql = "DELETE FROM role WHERE role_id = ?";

		
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		
		try (Connection conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
				PreparedStatement ps = conn.prepareStatement(sql)) {
			
			ps.setInt(1,  roleId);
			deleteCount = ps.executeUpdate();

		}catch(Exception ex) {
			ex.printStackTrace();
		}

		return deleteCount;
	}

 

main()

public static void main(String[] args) {
		// TODO Auto-generated method stub
		int roleId = 501;

		RoleDao dao = new RoleDao();
		int deleteCount = dao.deleteRole(roleId);

		System.out.println(deleteCount);
	}

 

 

사라진 roleId 501

728x90
반응형

'Web > Java+Spring' 카테고리의 다른 글

Web API 실습  (0) 2021.05.14
REST API 와 Web API, 상태 코드  (0) 2021.05.14
JDBC 준비  (0) 2021.05.14
Maven  (0) 2021.05.13
JSTL (JSP Standard Tag Library)  (0) 2021.05.10