Programming Language/Javascript, ...

[JDBC] MVC - Properties

Ma_Sand 2022. 4. 5. 19:55
반응형

Properties

   : key와 value를 String 타입으로 담는 Map 계열의 컬렉션이다.

    주로 외부 설정 파일을 읽어오거나 파일 형태로 출력할 때 사용한다.

 

  - Properties를 사용하는 이유

    : 기존 방식은 SQL문을 수정하려면, Java 내에 작성된 코드를 변경해야 하므로, 사용자가 프로그램을

      실행하는 와중에 프로그램 실행을 중단시켜야 하는 불편함이 있다. 그러나 Properties를 이용해 외부에서

      파일을 읽어오는 형태로 바꾸면 프로그램 실행을 중단시킬 필요 없이 외부 파일에서 SQL문을 변경시키면

      그 즉시 프로그램에 적용되어 유지보수에 편리해진다.

 

 

 

Run

public class Run {

	public static void main(String[] args) {
		// 1. 폴더 생성하기
//		File f = new File("resources");  // resources라는 폴더 생성
//		f.mkdir();
		
		// 2. Properties 객체에 저장 및 파일 출력하기
//		Properties prop = new Properties();
//		
//		prop.setProperty("driver", "oracle.jdbc.driver.OracleDriver");  
        // key: driver, value: oracle.jdbc.driver.OracleDriver
//		prop.setProperty("url", "jdbc:oracle:thin:@localhost:1521:xe");  
        // key: url, value: jdbc:oracle:thin:@localhost:1521:xe
//		prop.setProperty("username", "JDBC");  // Oracle SQL 계정명
//		prop.setProperty("password", "JDBC");  // Oracle SQL 계정 비밀번호
//		try {
//			prop.store(new FileOutputStream("resources/driver.properties"),"driver properties");
//			prop.storeToXML(new FileOutputStream("resources/driver.xml"), "driver xml");
//		} catch (FileNotFoundException e) {
//			e.printStackTrace();
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
		
		//----------------------------------------------------------------
//		try {  // 외부 파일을 읽어오기
//			prop.load(new FileInputStream("resources/driver.properties"));
//			
//			// 파일의 value값 출력하기
//			System.out.println(prop.getProperty("url"));
//			System.out.println(prop.getProperty("username"));
//			System.out.println(prop.getProperty("password"));
//			System.out.println(prop.getProperty("driver"));
//			
//		} catch (FileNotFoundException e) {
//			e.printStackTrace();
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
		//----------------------------------------------------------------
		
		// 4. 외부 파일을 읽어온 것을 실행하기
		new MemberView().mainMenu();
	}
}

 

 

 

Template

public class JDBCTemplate {

	public static Connection getConnection() {
		// 3. 외부 설정 파일을 읽어오기 위해 Properties 객체 생성하기
		Properties prop = new Properties();
		
		// Connection 객체 변수 생성
		Connection conn = null;
		
		try {
			prop.load(new FileInputStream("resources/driver.properties"));  
            // load()로 파일 읽어오기
			
			
			Class.forName(prop.getProperty("driver"));  // 동적 방식
			// Class.forName("oracle.jdbc.driver.OracleDriver");  // 정적 방식(기존 방식)
			
            // getProperty()로 가져오기 - 동적 방식
			conn = DriverManager.getConnection(prop.getProperty("url")  
					                         , prop.getProperty("username")
					                         , prop.getProperty("password"));
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return conn;
	}
	

	public static void close(Connection conn) {
		try {
			if(conn != null && !conn.isClosed()) {				
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void close(Statement stmt) {  
		try {
			if(stmt != null && !stmt.isClosed()) {
				stmt.close();				
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void close(ResultSet rset) {
		try {
			if(rset != null && !rset.isClosed()) {
				rset.close();				
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void commit(Connection conn) {
		try {
			if(conn != null && !conn.isClosed()) {
				conn.commit();				
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void rollback(Connection conn) {
		try {
			if(conn != null && !conn.isClosed()) {
				conn.rollback();				
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

 

 

 

VO

public class Member {
	//DB 테이블의 컬럼 정보와 유사하게 작성한다.
    private int userNo;//	USERNO NUMBER PRIMARY KEY,
    private String userId;//    USERID VARCHAR2(20) UNIQUE NOT NULL,
    private String userPw;//    USERPW VARCHAR2(20) NOT NULL,
    private String userName;//    USERNAME VARCHAR2(20) NOT NULL,
    private String gender;//    GENDER CHAR(1) CHECK (GENDER IN('M', 'F')),
    private int age;//    AGE NUMBER,
    private String email;//    EMAIL VARCHAR2(30),
    private String phone;//    PHONE CHAR(11),
    private String address;//    ADDRESS VARCHAR2(100),
    private String hobby;//    HOBBY VARCHAR2(50),
    private Date enrollDate;//    ENROLLDATE DATE DEFAULT SYSDATE NOT NULL
    
	public Member() {
		super();
	}

	public Member(int userNo, String userId, String userPw, String userName, String gender, int age, String email,
			String phone, String address, String hobby, Date enrollDate) {
		super();
		this.userNo = userNo;
		this.userId = userId;
		this.userPw = userPw;
		this.userName = userName;
		this.gender = gender;
		this.age = age;
		this.email = email;
		this.phone = phone;
		this.address = address;
		this.hobby = hobby;
		this.enrollDate = enrollDate;
	}
	
	// 회원 추가용 생성자(userNo와 enrollDate 제외한 매개변수 생성자)
	public Member(String userId, String userPw, String userName, String gender, int age, String email, String phone,
			String address, String hobby) {
		super();
		this.userId = userId;
		this.userPw = userPw;
		this.userName = userName;
		this.gender = gender;
		this.age = age;
		this.email = email;
		this.phone = phone;
		this.address = address;
		this.hobby = hobby;
	}

	public Member(String userId, String userPw, String email, String phone, String address) {
		super();
		this.userId = userId;
		this.userPw = userPw;
		this.email = email;
		this.phone = phone;
		this.address = address;
	}

	public int getUserNo() {
		return userNo;
	}
	public void setUserNo(int userNo) {
		this.userNo = userNo;
	}
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public String getUserPw() {
		return userPw;
	}
	public void setUserPw(String userPw) {
		this.userPw = userPw;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getHobby() {
		return hobby;
	}
	public void setHobby(String hobby) {
		this.hobby = hobby;
	}
	public Date getEnrollDate() {
		return enrollDate;
	}
	public void setEnrollDate(Date enrollDate) {
		this.enrollDate = enrollDate;
	}

	@Override
	public String toString() {
		return "Member [userNo=" + userNo + ", userId=" + userId + ", userPw=" + userPw + ", userName=" + userName
				+ ", gender=" + gender + ", age=" + age + ", email=" + email + ", phone=" + phone + ", address="
				+ address + ", hobby=" + hobby + ", enrollDate=" + enrollDate + "]";
	}
}

 

 

 

View

public class MemberView {
	// 전역으로 쓸 수 있는 Scanner 객체 생성
	private Scanner sc = new Scanner(System.in);
	
	// 전역으로 MemberController에 요청할 수 있는 객체 생성
	private MemberController mc = new MemberController();

	public void mainMenu() {
		// 프로그램 종료 전까지 메뉴 선택을 반복하기 위해 while문으로 감싸기
		while(true) {
			System.out.println("========회원관리 프로그램=========");
			System.out.println("1. 회원 추가");
			System.out.println("2. 회원 전체 조회");
			System.out.println("3. 회원 아이디로 검색");
			System.out.println("4. 회원 이름 검색");
			System.out.println("5. 회원 정보 변경");
			System.out.println("6. 회원 탈퇴");
			System.out.println("0. 프로그램 종료");
			System.out.println("==============================");
			System.out.println("원하는 메뉴 번호를 입력하세요. ");
			int menu = sc.nextInt();
			sc.nextLine();
			
			switch(menu) {
			case 1: insertMember(); break;
			case 2: selectAll(); break;
			case 3: searchById(); break;
			case 4: searchByName(); break;
			case 5: updateMember(); break;
			case 6: deleteMember(); break;
			case 0: System.out.println("프로그램을 종료합니다."); return;  
            // break;를 쓰면 스위치문에서만 벗어나고 다시 반복됨
			default: System.out.println("메뉴번호를 잘못 입력하였습니다.");
			}
		}
	}


	// 회원 추가용 화면
	// 추가하고자 하는 회원의 정보를 입력받아 추가 '요청'할 수 있는 화면

	// 1. 회원 추가 화면
	public void insertMember() {
		System.out.println("-------회원 추가-------");
		// 입력
		// 회원번호(시퀀스) enrollDate(default SYSDATE) 두 컬럼에 대해서 입력받지 않는다.
		System.out.println("아이디: ");
		String userId = sc.nextLine();
		System.out.println("비밀번호: ");
		String userPw = sc.nextLine();
		System.out.println("이름: ");
		String userName = sc.nextLine();
		System.out.println("성별: ");
		String gender = sc.nextLine().toUpperCase();
		System.out.println("나이: ");
		int age = sc.nextInt();
		sc.nextLine();
		System.out.println("이메일: ");
		String email = sc.nextLine();
		System.out.println("휴대번호: (- 없이 숫자만 입력)");
		String phone = sc.nextLine();
		System.out.println("주소: ");
		String address = sc.nextLine();
		System.out.println("취미: ");
		String hobby = sc.nextLine();
		
		// 입력받은 정보를 매개변수로 넘겨서 회원 추가 요청 - Controller에 있는 메소드를 호출한다.
		mc.insertMember(userId, userPw, userName, gender, age, email, phone, address, hobby);
	}
	
	// 2. 회원 전체 조회 화면
	public void selectAll() {
		System.out.println("--------회원 전체 조회--------");
		
		// Controller에 회원 전체 조회 요청
		mc.selectAll();
	}

	// 3. 회원 아이디로 검색하는 화면
	public void searchById() {
		System.out.println("-------회원 아이디로 검색-------");
		System.out.println("검색할 회원의 아이디 입력: ");
		String userId = sc.nextLine();
		
		// 입력한 아이디로 Controller에 요청하기
		mc.searchById(userId);
	}
	
	// 4. 회원 이름으로 검색하는 화면
	public void searchByName() {
		System.out.println("--------회원 이름으로 검색--------");
		System.out.println("검색할 회원의 이름 입력: ");
		String userName = sc.nextLine();
		
		mc.searchByName(userName);
		
	}
	
	// 5. 회원 정보를 수정하는 화면
	public void updateMember() {
		System.out.println("---------회원 정보 변경---------");
		
		// 변경할 회원의 아이디
		System.out.println("변경할 회원의 아이디: ");
		String userId = sc.nextLine();
		
		// 변경할 정보들
		System.out.println("변경할 비밀번호 입력: ");
		String userPw = sc.nextLine();
		System.out.println("변경할 이메일 입력: ");
		String email = sc.nextLine();
		System.out.println("변경할 휴대번호 입력: ");
		String phone = sc.nextLine();
		System.out.println("변경할 주소 입력: ");
		String address = sc.nextLine();
		
		// 회원 정보 수정 요청
		mc.updateMember(userId, userPw, email, phone, address);
	}
	
	// 6. 회원 탈퇴하는 화면
	public void deleteMember() {
		System.out.println("---------회원 탈퇴---------");
		
		System.out.println("회원 탈퇴할 아이디: ");
		String userId = sc.nextLine();
		
		mc.deleteMember(userId);
	}
	
	//---------------------------------------------------
	// 서비스 요청 시 사용자가 보게될 응답 화면
	
	// 서비스 요청 성공 시 응답 화면
	public void displaySuccess(String message) {

		System.out.println("서비스 요청 성공: " + message);
	}

	// 서비스 요청 실패시 응답 화면
	public void displayFail(String message) {
		System.out.println("서비스 요청 실패: " + message);
		
	}

	// 전체 조회 결과가 없을 때 응답 화면
	public void displayNoData(String message) {
		System.out.println(message);
	}

	// 전체 조회 결과가 있을 때 응답 화면
	public void displayList(ArrayList<Member> list) {
		System.out.println("조회된 결과는 " + list.size() + "건입니다.");
//		for(int i = 0; i < list.size(); i++) {
//			System.out.println(list.get(i));
//		}
		
		// 향상된 for문   for each문
		for(Member m : list) {  // for(반환할타입 변수명 : 반복할저장소(컬렉션/배열))
			System.out.println(m);
		}
	}

	// 조회결과가 하나일 때
	public void displayOne(Member m) {
		System.out.println("조회된 결과는 다음과 같습니다.");
		System.out.println(m);
	}
}

 

 

 

Controller

public class MemberController {

	public void insertMember(String userId, String userPw, String userName, String gender, int age, String email,
			String phone, String address, String hobby) {
		
		Member m = new Member(userId, userPw, userName, gender, age, email, phone, address, hobby);
		
		int result = new MemberService().insertMember(m);
		
		if(result > 0) {
			new MemberView().displaySuccess("회원 추가 성공");
		} else {
			new MemberView().displayFail("회원 추가 실패");
		}
	}

	// 사용자의 회원 전체 조회 요청을 처리해주는 메소드
	public void selectAll() {
		
		// 결과값을 담을 변수
		// SELECT - ResultSet -> ArrayList<Member>
		
		ArrayList<Member> list = new MemberService().selectAll();

		// DAO에서 작업을 끝마친 결과를 전달받아 해당 결과를 토대로 어떤 화면을 보여줄 지 정하여 view에 전달한다.
		
		// 조회결과가 있는지 없는지 판단 후 사용자가 보게될 화면을 지정한다.
		if(list.isEmpty()) { // list가 비어있어 true인 경우
			new MemberView().displayNoData("전체 조회 결과가 없습니다.");
		} else {  // list 조회된 경우 list에 Member가 담겨있음
			new MemberView().displayList(list);
			// toString()을 오버라이딩하여 목록이 죽 나온다.
			// 만약 toString()이 오버라이딩되지 않으면 주소값만 출력된다.
		}
	}

	// 사용자가 입력한 아이디로 검색 요청을 처리해주는 메소드
	public void searchById(String userId) {
		Member m = new MemberService().searchById(userId);
		
		if(m == null) {
			new MemberView().displayNoData(userId+"에 해당하는 조회 결과가 없습니다.");
		} else {
			new MemberView().displayOne(m);
		}
	}


	// 사용자가 입력한 이름으로 검색 요청을 처리해주는 메소드
	public void searchByName(String userName) {
		ArrayList<Member> list = new MemberService().searchByName(userName);
		
		if(list == null) {
			new MemberView().displayNoData(userName + "에 해당하는 조회 결과가 없습니다.");
		} else {
			new MemberView().displayList(list);
		}
	}

	// 사용자가 입력한 정보들을 변경 요청을 처리해주는 메소드
	public void updateMember(String userId, String userPw, String email, String phone, String address) {
		 Member m = new Member(userId, userPw, email, phone, address);
		 int result = new MemberService().updateMember(m);
		
		if(result > 0) {
			new MemberView().displaySuccess("삽입에 성공했습니다.");
		} else {
			new MemberView().displayFail("삽입에 실패했습니다.");
		}
	}

	// 사용자가 입력한 정보들을 삭제 요청 처리해주는 메소드
	public void deleteMember(String userId) {
		int result = new MemberService().deleteMember(userId);
		
		if(result > 0) {
			new MemberView().displaySuccess("회원 정보가 삭제되었습니다.");
		} else {
			new MemberView().displayFail("회원 정보 삭제에 실패했습니다.");
		}
	}
}

 

 

 

Service

public class MemberService {

	public int insertMember(Member m) {
		// Connection 객체 만들어주기
		Connection conn = JDBCTemplate.getConnection();
		
		// DAO를 호출하는 데 Controller에게 전달받은 요청값과 커넥션을 같이 넘긴다.
		int result = new MemberDao().insertMember(conn, m);
		
		// 결과에 따른 트랜잭션 처리해주기
		if(result > 0) {
			JDBCTemplate.commit(conn);
		} else {
			JDBCTemplate.rollback(conn);
		}
		// Connection 객체 반납하기
		JDBCTemplate.close(conn);
		
		return result;
	}

	// 전체 조회하기 위한 DB 접속
	public ArrayList<Member> selectAll() {
		Connection conn = JDBCTemplate.getConnection();
		
		ArrayList<Member> list = new MemberDao().selectAll(conn);
		
		// 조회 구문은 트랜잭션 처리를 할 필요가 없다.
		
		// Connection 객체 반납하기
		JDBCTemplate.close(conn);
		
		return list;
	}

	public Member searchById(String userId) {
		Connection conn = JDBCTemplate.getConnection();
		
		Member m = new MemberDao().searchById(conn, userId);
		
		// 조회 구문에서는 트랜잭션 처리X
		
		JDBCTemplate.close(conn);
		
		return m;
	}

	public ArrayList<Member> searchByName(String userName) {
		Connection conn = JDBCTemplate.getConnection();
		
		ArrayList<Member> list = new MemberDao().searchByName(conn, userName);
		
	    JDBCTemplate.close(conn);
	    
	    return list;
	}

	public int updateMember(Member m) {
		Connection conn = JDBCTemplate.getConnection();
		
		int result = new MemberDao().updateMember(conn, m);
		
		if(result > 0) {
			JDBCTemplate.commit(conn);
		} else {
		    JDBCTemplate.rollback(conn);
		}
		
		JDBCTemplate.close(conn);
		
		return result;
	}

	public int deleteMember(String userId) {
		Connection conn = JDBCTemplate.getConnection();
		
		int result = new MemberDao().deleteMember(conn, userId);
		
		if(result > 0) {
			JDBCTemplate.commit(conn);
		} else {
			JDBCTemplate.rollback(conn);
		}
		JDBCTemplate.close(conn);
		return result;
	}
}

 

 

 

DAO

public class MemberDao {

	// 매 메소드마다 반복되는 구문들은 필드로 빼놓는다.
	private Properties prop = new Properties();
	
	public MemberDao() {
		try {
			prop.loadFromXML(new FileInputStream("resources/query.xml"));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public int insertMember(Connection conn, Member m) { 
		int result = 0;
		PreparedStatement pstmt = null;  
		
		String sql = prop.getProperty("insertMember");
		
		try {
			pstmt = conn.prepareStatement(sql);
			
			// 미완성된 SQL문 완성시켜주기
			pstmt.setString(1, m.getUserId());
			pstmt.setString(2, m.getUserPw());
			pstmt.setString(3, m.getUserName());
			pstmt.setString(4, m.getGender());
			pstmt.setInt(5, m.getAge());
			pstmt.setString(6, m.getEmail());
			pstmt.setString(7, m.getPhone());
			pstmt.setString(8, m.getAddress());
			pstmt.setString(9, m.getHobby());
			
			result = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
				// PreparedStatement 객체 반납
				JDBCTemplate.close(pstmt);
		}	
		return result; 
	}
	
	public ArrayList<Member> selectAll(Connection conn){
		
		Statement stmt = null;
		ResultSet rset = null;
		
	
		ArrayList<Member> list = new ArrayList<>(); 
		
		// 실행할 SQL문
		String sql = prop.getProperty("selectAll");
		
		try {
			stmt = conn.createStatement();
			
			rset = stmt.executeQuery(sql);
			
			// SELECT문은 여러 행이 나올 수 있으므로 while문을 사용한다.
            // (if문X -> if문은 단 하나의 조회만 가져올 때 사용)
			while(rset.next()) {
				Member m = new Member();

				// rset에 받아온 값을 m에 세팅하고, list에 차례대로 담는다.
				m.setUserNo(rset.getInt("USERNO"));
				m.setUserId(rset.getString("USERID"));
				m.setUserPw(rset.getString("USERPW"));
				m.setUserName(rset.getString("USERNAME"));
				m.setGender(rset.getString("GENDER"));
				m.setAge(rset.getInt("AGE"));
				m.setEmail(rset.getString("EMAIL"));
				m.setPhone(rset.getString("PHONE"));
				m.setAddress(rset.getString("ADDRESS"));
				m.setHobby(rset.getString("HOBBY"));
				m.setEnrollDate(rset.getDate("ENROLLDATE"));
				
				list.add(m);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
				JDBCTemplate.close(rset);
				JDBCTemplate.close(stmt);
				JDBCTemplate.close(conn);
		}
		return list;
	}
	
	// 사용자에게 입력받은 아이디로 해당 회원이 있는지 정보 검색 처리하는 메소드
	public Member searchById(Connection conn, String userId) {
		PreparedStatement pstmt = null;
		ResultSet rset = null;
		Member m = null;
		
		String sql = prop.getProperty("searchById");
		
		try {
			pstmt = conn.prepareStatement(sql);
			
			pstmt.setString(1, userId);
			
			rset = pstmt.executeQuery();
			
            // 아이디가 unique 제약조건이 있으므로 행은 1 또는 0이므로 if문으로.
			if(rset.next()) {
				m = new Member(rset.getInt("USERNO")
						     , rset.getString("USERID")
						     , rset.getString("USERPW")
						     , rset.getString("USERNAME")
						     , rset.getString("GENDER")
						     , rset.getInt("AGE")
						     , rset.getString("EMAIL")
						     , rset.getString("PHONE")
						     , rset.getString("ADDRESS")
						     , rset.getString("HOBBY")
						     , rset.getDate("ENROLLDATE"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCTemplate.close(rset);
			JDBCTemplate.close(pstmt);
		}
		return m;
	}

	public ArrayList<Member> searchByName(Connection conn, String userName) {
		PreparedStatement pstmt = null;
		ResultSet rset = null;

		ArrayList<Member> list = new ArrayList<>();  
        // 같은 이름이 존재할 수 있으므로 ArrayList로 담는다.
		
		String sql = prop.getProperty("searchByName");
		
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, userName);
			rset = pstmt.executeQuery();
			
			while(rset.next()) {
				list.add(new Member(rset.getInt("USERNO")
						     , rset.getString("USERID")
						     , rset.getString("USERPW")
						     , rset.getString("USERNAME")
						     , rset.getString("GENDER")
						     , rset.getInt("AGE")
						     , rset.getString("EMAIL")
						     , rset.getString("PHONE")
						     , rset.getString("ADDRESS")
						     , rset.getString("HOBBY")
						     , rset.getDate("ENROLLDATE")));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCTemplate.close(rset);
			JDBCTemplate.close(pstmt);
		} 
		return list;
	}

	public int updateMember(Connection conn, Member m) {
		PreparedStatement pstmt = null;
		int result = 0;
		
		String sql = prop.getProperty("updateMember");
		
		try {
			pstmt = conn.prepareStatement(sql);
			
			pstmt.setString(1, m.getUserPw());
			pstmt.setString(2, m.getEmail());
			pstmt.setString(3, m.getPhone());
			pstmt.setString(4, m.getAddress());
			pstmt.setString(5, m.getUserId());
			
			result = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCTemplate.close(pstmt);
		}
		return result;
	}

    public int deleteMember(Connection conn, String userId) {
		PreparedStatement pstmt = null;
		int result = 0;
		
		String sql = prop.getProperty("deleteMember");
		
		try {
			pstmt = conn.prepareStatement(sql);
			
			pstmt.setString(1, userId);
			
			result = pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCTemplate.close(conn);
		}
    	return result;
    }
}

 

 

 

query.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

<properties>

<comment>query xml</comment>

    <entry key="insertMember">
        INSERT INTO MEMBER 
        VALUES(SEQ_USERNO.NEXTVAL, ?, ?, ?, ?, ?, ?, ?, ?, ?, DEFAULT)
    </entry>
    
    <entry key="selectAll">
        SELECT * FROM MEMBER ORDER BY USERNO
    </entry>
    
    <entry key="searchById">
        SELECT * 
        FROM MEMBER 
        WHERE USERID = ?
    </entry>
    
    <entry key="searchByName">
        SELECT * 
        FROM MEMBER 
        WHERE USERNAME LIKE '%'||?||'%'
    </entry>
    
    <entry key="updateMember">
        UPDATE MEMBER 
        SET USERPW = ?
	      , EMAIL = ?
	      , PHONE = ?
	      , ADDRESS = ?
	    WHERE USERID = ?
    </entry>
    
    <entry key="deleteMember">
        DELETE FROM MEMBER 
        WHERE USERID = ?
    </entry>
    
</properties>
반응형