5. 모든 회원 정보 보기
(Eclipse) MemberNBoardMainApp
case "5": // 모든 회원 정보 보기
List<MemberDTO> memberList = mbrCtrl.selectAllMember();
if(memberList == null) {
System.out.println(">> 현재 가입된 회원이 1명도 없습니다. << \n");
}
else {
System.out.println("-----------------------------------------------------------------------------------------------------");
System.out.println("아이디\t암호\t\t성명\t주소\t\t가입일자\t\t생년월일\t\t나이\t성별\t포인트");
System.out.println("-----------------------------------------------------------------------------------------------------");
for(MemberDTO mbr:memberList) {
System.out.println(mbr);
}
System.out.print("\n\n");
}
(Eclipse)InterMemberCtrl
List<MemberDTO> selectAllMember();
(Eclipse)MemberCtrl
@Override
public List<MemberDTO> selectAllMember() {
List<MemberDTO> memberList = null;
memberList = mbrdao.selectAllMember();
return memberList;
}
(Eclipse)InterMemberDAO
List<MemberDTO> selectAllMember();
(Eclipse)MemberDAO
@Override
public List<MemberDTO> selectAllMember() {
List<MemberDTO> memberList = new ArrayList<MemberDTO>();
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "myorauser", "eclass");
String sql = "select no, userid, passwd, name, address\n"
+ " , substr(birthday, 1, 4) || '-' || substr(birthday, 5, 2) || '-' || substr(birthday, 7) AS birthday\n"
+ " , to_char(registerday, 'yyyy-mm-dd hh24:mi:ss') AS registerday\n" + " , gender, point\n"
+ "from jdbc_tbl_member\n" + "where status = 1 ";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
int cnt = 0;
while (rs.next()) {
cnt++;
if(cnt == 1)
memberList = new ArrayList<MemberDTO>();
int no = rs.getInt("no");
String userid = rs.getString("userid");
String passwd = rs.getString("passwd");
String name = rs.getString("name");
String address = rs.getString("address");
String birthday = rs.getString("birthday");
String registerday = rs.getString("registerday");
int gender = rs.getInt("gender");
int point = rs.getInt("point");
MemberDTO mbrdto = new MemberDTO();
mbrdto.setNo(no);
mbrdto.setUserid(userid);
mbrdto.setPasswd(passwd);
mbrdto.setName(name);
mbrdto.setAddress(address);
mbrdto.setBirthday(birthday);
mbrdto.setRegisterday(registerday);
mbrdto.setGender(gender);
mbrdto.setPoint(point);
memberList.add(mbrdto);
}
} catch (ClassNotFoundException e) {
System.out.println(">> ojdbc6.jar 파일이 없습니다. <<");
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return memberList;
}
-- memberDTO의 toString 메소드 재정의를 해 주어야 한다.
(Eclipse)InterMemberDTO
String toString();
(Eclipse)MemberDTO
public String toString() {
StringBuilder sb = new StringBuilder();
String strGender = "";
if(gender == 1)
strGender = "남자";
else
strGender = "여자";
Calendar currentDate = Calendar.getInstance();
int currentYear = currentDate.get(Calendar.YEAR);
int birthYear = Integer.parseInt(birthday.substring(0, 4));
int age = currentYear - birthYear + 1;
sb.append(userid + "\t" + passwd + "\t" + name + "\t");
sb.append(address + "\t" + registerday.subSequence(0, 10) + "\t" + birthday + "\t");
sb.append(age + "\t" + strGender + "\t" + point + "\t");
return sb.toString();
6. 성별 조회
(Eclipse)MemberNBoardMainApp
case "6": // 성별 조회
String gender = "";
genderSubmenu(sc);
do {
gender = sc.nextLine();
gender = gender.trim();
if(!("1".equals(gender) || "2".equals(gender))) {
System.out.println(">> 남자는 1, 여자는 2로 선택하세요.");
System.out.print("▷ 남녀 선택 : ");
}
else
break;
} while(true);
memberList = mbrCtrl.selectMemberByGender(gender);
if (memberList == null) {
String strGender = ("1".equals(gender))?"남자":"여자";
System.out.println(">> 현재 가입된 " + strGender + "회원이 1명도 없습니다. << \n");
}
else {
System.out.println(
"-----------------------------------------------------------------------------------------------------");
System.out.println("아이디\t암호\t\t성명\t주소\t\t가입일자\t\t생년월일\t\t나이\t성별\t포인트");
System.out.println(
"-----------------------------------------------------------------------------------------------------");
for (MemberDTO mbr : memberList) {
System.out.println(mbr);
}
System.out.print("\n\n");
}
break;
(Eclipse)MemberNBoardMainApp
List<MemberDTO> selectMemberByGender(String gender);
(Eclipse)MemberCtrl
@Override
public List<MemberDTO> selectMemberByGender(String gender) {
List<MemberDTO> memberList = null;
memberList = mbrdao.selectMemberByGender(gender);
return memberList;
}
(Eclipse)InterMemberDAO
List<MemberDTO> selectMemberByGender(String gender);
(Eclipse)MemberDAO
@Override
public List<MemberDTO> selectMemberByGender(String paraGender) {
List<MemberDTO> memberList = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "myorauser", "eclass");
String sql = "select no, userid, passwd, name, address\n"
+ " , substr(birthday, 1, 4) || '-' || substr(birthday, 5, 2) || '-' || substr(birthday, 7) AS birthday\n"
+ " , to_char(registerday, 'yyyy-mm-dd hh24:mi:ss') AS registerday\n" + " , gender, point\n"
+ "from jdbc_tbl_member\n" + "where status = 1 and gender = ? \n"
+ "order by no desc";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, paraGender);
rs = pstmt.executeQuery();
int cnt = 0;
while (rs.next()) {
cnt++;
if(cnt == 1)
memberList = new ArrayList<MemberDTO>();
int no = rs.getInt("no");
String userid = rs.getString("userid");
String passwd = rs.getString("passwd");
String name = rs.getString("name");
String address = rs.getString("address");
String birthday = rs.getString("birthday");
String registerday = rs.getString("registerday");
int gender = rs.getInt("gender");
int point = rs.getInt("point");
MemberDTO mbrdto = new MemberDTO();
mbrdto.setNo(no);
mbrdto.setUserid(userid);
mbrdto.setPasswd(passwd);
mbrdto.setName(name);
mbrdto.setAddress(address);
mbrdto.setBirthday(birthday);
mbrdto.setRegisterday(registerday);
mbrdto.setGender(gender);
mbrdto.setPoint(point);
memberList.add(mbrdto);
}
} catch (ClassNotFoundException e) {
System.out.println(">> ojdbc6.jar 파일이 없습니다. <<");
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return memberList;
}
7. 연령대별 검색
(Eclipse)MemberNBoardMainApp
case "7": // 연령대별 검색
int ageLine = 0;
do {
try {
System.out.print("\n ▷ 검색하고자 하는 연령대 : ");
ageLine = Integer.parseInt(sc.nextLine());
if(!(ageLine == 10 ||
ageLine == 20 ||
ageLine == 30 ||
ageLine == 40 ||
ageLine == 50 ||
ageLine == 60 ||
ageLine == 70 ||
ageLine == 80 ||
ageLine == 90)) {
System.out.println(">> 연령대가 20대면 20, 30대면 30으로 입력해 주세요. <<");
}
else
break;
} catch(NumberFormatException e) {
System.out.println(">> 숫자만 입력하세요. <<");
}
} while (true);
memberList = mbrCtrl.selectMemberByAgeLine(ageLine);
if (memberList == null) {
System.out.println(">> 현재 가입된 회원 중 연령대가 " + ageLine + "대인 회원은 1명도 없습니다. << \n");
}
else {
System.out.println(
"-----------------------------------------------------------------------------------------------------");
System.out.println("아이디\t암호\t\t성명\t주소\t\t가입일자\t\t생년월일\t\t나이\t성별\t포인트");
System.out.println(
"-----------------------------------------------------------------------------------------------------");
for (MemberDTO mbr : memberList) {
System.out.println(mbr);
}
System.out.print("\n\n");
}
break;
(Eclipse)InterMemberCtrl
List<MemberDTO> selectMemberByAgeLine(int ageLine);
(Eclipse)MemberCtrl
@Override
public List<MemberDTO> selectMemberByAgeLine(int ageLine) {
List<MemberDTO> memberList = null;
memberList = mbrdao.selectMemberByGender(ageLine);
return memberList;
(Eclipse)InterMemberDAO
List<MemberDTO> selectMemberByGender(int ageLine);
(Eclipse)MemberDAO
@Override
public List<MemberDTO> selectMemberByGender(int ageLine) {
List<MemberDTO> memberList = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "myorauser", "eclass");
String sql = "select no, userid, passwd, name, address\n"
+ " , substr(birthday, 1, 4) || '-' || substr(birthday, 5, 2) || '-' || substr(birthday, 7) AS birthday\n"
+ " , to_char(registerday, 'yyyy-mm-dd hh24:mi:ss') AS registerday\n" + " , gender, point\n"
+ "from jdbc_tbl_member\n" + "where status = 1 and "
+ "trunc((extract(year from sysdate) - substr(birthday, 1, 4) + 1),-1) = ? \n"
+ "order by no desc";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, ageLine);
rs = pstmt.executeQuery();
int cnt = 0;
while (rs.next()) {
cnt++;
if(cnt == 1)
memberList = new ArrayList<MemberDTO>();
int no = rs.getInt("no");
String userid = rs.getString("userid");
String passwd = rs.getString("passwd");
String name = rs.getString("name");
String address = rs.getString("address");
String birthday = rs.getString("birthday");
String registerday = rs.getString("registerday");
int gender = rs.getInt("gender");
int point = rs.getInt("point");
MemberDTO mbrdto = new MemberDTO();
mbrdto.setNo(no);
mbrdto.setUserid(userid);
mbrdto.setPasswd(passwd);
mbrdto.setName(name);
mbrdto.setAddress(address);
mbrdto.setBirthday(birthday);
mbrdto.setRegisterday(registerday);
mbrdto.setGender(gender);
mbrdto.setPoint(point);
memberList.add(mbrdto);
}
} catch (ClassNotFoundException e) {
System.out.println(">> ojdbc6.jar 파일이 없습니다. <<");
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return memberList;
}
-- 5번, 6번, 7번은 모두 회원 정보를 가져오는 것이므로 비슷한 코드를 반복한다. 따라서 메소드로 만들어 재사용하도록 하자.
(Eclipse)MemberNBoardMainApp main method 밖
public static void printMemberInfo(List<MemberDTO> memberList) {
System.out.println(
"-----------------------------------------------------------------------------------------------------");
System.out.println("아이디\t암호\t\t성명\t주소\t\t가입일자\t\t생년월일\t\t나이\t성별\t포인트");
System.out.println(
"-----------------------------------------------------------------------------------------------------");
for (MemberDTO mbr : memberList) {
System.out.println(mbr);
}
System.out.print("\n\n");
}
-- 메소드 안 코드가 있던 자리에 원래 있던 코드를 제거하고 printMemberInfo(memberList); 를 넣는다.
8. 내 정보 수정1
(Eclipse)MemberNBoardMainApp
case "8": // 내 정보 수정
if (loginuser == null) {
System.out.println(">> 먼저 로그인하세요. <<");
continue;
} else {
System.out.println("\n" + loginuser.showMemberInfo());
n = mbrCtrl.updateMember(loginuser, sc);
if (n == 1)
System.out.println(">> 내 정보 수정하기 성공했습니다. <<");
else {
System.out.println(">> 내 정보 수정하기 실패 또는 취소했습니다. <<");
}
}
break;
(Eclipse)InterMemberCtrl
int updateMember(MemberDTO loginuser, Scanner sc);
(Eclipse)MemberCtrl
@Override
public int updateMember(MemberDTO loginuser, Scanner sc) {
int n = 0;
System.out.print("▷ 암호 : ");
String passwd = sc.nextLine();
if(!"".equals(passwd.trim())) {
loginuser.setPasswd(passwd);
}
System.out.print("▷ 성명 : ");
String name = sc.nextLine();
if(!"".equals(name.trim())) {
loginuser.setName(name);
}
System.out.print("▷ 주소 : ");
String address = sc.nextLine();
if(!"".equals(address.trim())) {
loginuser.setAddress(address);
}
n = mbrdao.updateMember(loginuser, sc);
return n;
}
(Eclipse)InterMemberDAO
int updateMember(MemberDTO loginuser, Scanner sc);
(Eclipse)MemberDAO
@Override
public int updateMember(MemberDTO loginuser, Scanner sc) {
int result = 0;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "myorauser", "eclass");
conn.setAutoCommit(false);
String sql = " update jdbc_tbl_member set passwd = ? "
+ " , name = ? "
+ " , address = ? "
+ "where userid = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, loginuser.getPasswd());
pstmt.setString(2, loginuser.getName());
pstmt.setString(3, loginuser.getAddress());
pstmt.setString(4, loginuser.getUserid());
result = pstmt.executeUpdate();
do {
System.out.print(">> 정말로 회원 정보 수정을 하시겠습니까? [Y/N] => ");
String yn = sc.nextLine();
if (result == 1 && ("Y".equals(yn) || "y".equals(yn))) {
conn.commit();
break;
} else if (result == 1 && ("N".equals(yn) || "n".equals(yn))) {
conn.rollback();
result = 0;
break;
}
} while (true);
} catch (ClassNotFoundException e) {
System.out.println(">> ojdbc6.jar 파일이 없습니다. <<");
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}
9. 내 정보 수정2
(Eclipse)MemberDAO
@Override
public int updateMember2(MemberDTO loginuser, Scanner sc) {
int n = 0;
System.out.print("▷ 암호 : ");
String passwd = sc.nextLine();
if("".equals(passwd.trim())) {
passwd = loginuser.getPasswd();
}
System.out.print("▷ 성명 : ");
String name = sc.nextLine();
System.out.print("▷ 주소 : ");
String address = sc.nextLine();
Map<String, String> paraMap = new HashMap<String, String>();
paraMap.put("passwd", passwd);
paraMap.put("name", name);
paraMap.put("address", address);
paraMap.put("userid", loginuser.getUserid());
n = mbrdao.updateMember2(paraMap, sc);
if(n==1) { // 사용자 정보 변경을 완료(성공)했다라면
loginuser.setPasswd(passwd);
loginuser.setName(name);
loginuser.setAddress(address);
}
return n;
}
(Eclipse)InterMemberCtrl
int updateMember2(MemberDTO loginuser, Scanner sc);
(Eclipse)MemberCtrl
@Override
public int updateMember2(MemberDTO loginuser, Scanner sc) {
int n = 0;
System.out.print("▷ 암호 : ");
String passwd = sc.nextLine();
System.out.print("▷ 성명 : ");
String name = sc.nextLine();
System.out.print("▷ 주소 : ");
String address = sc.nextLine();
Map<String, String> paraMap = new HashMap<String, String>();
paraMap.put("passwd", passwd);
paraMap.put("name", name);
paraMap.put("address", address);
paraMap.put("userid", loginuser.getUserid());
n = mbrdao.updateMember2(paraMap, sc);
if(n==1) { // 사용자 정보 변경을 완료(성공)했다라면
loginuser.setPasswd(passwd);
loginuser.setName(name);
loginuser.setAddress(address);
}
return n;
}
(Eclipse)InterMemberDAO
int updateMember2(Map<String, String> paraMap, Scanner sc);
(Eclipse)MemberDAO
@Override
public int updateMember2(Map<String, String> paraMap, Scanner sc) {
int result = 0;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "myorauser", "eclass");
conn.setAutoCommit(false);
String sql = " update jdbc_tbl_member set passwd = ? " + " , name = ? " + " , address = ? "
+ "where userid = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, paraMap.get("passwd"));
pstmt.setString(2, paraMap.get("name"));
pstmt.setString(3, paraMap.get("address"));
pstmt.setString(4, paraMap.get("userid"));
result = pstmt.executeUpdate();
do {
System.out.print(">> 정말로 회원 정보 수정을 하시겠습니까? [Y/N] => ");
String yn = sc.nextLine();
if (result == 1 && ("Y".equals(yn) || "y".equals(yn))) {
conn.commit();
break;
} else if (result == 1 && ("N".equals(yn) || "n".equals(yn))) {
conn.rollback();
result = 0;
break;
}
} while (true);
} catch (ClassNotFoundException e) {
System.out.println(">> ojdbc6.jar 파일이 없습니다. <<");
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}
과제1 ▷▷ 9. 내 정보 수정2의 경우 8. 내 정보 수정1과 달리 name 값 등을 null로 입력하면 오류가 발생한다. 오류가 발생하지 않도록 고쳐 보자.
(Eclipse)MemberCtrl
@Override
public int updateMember2(MemberDTO loginuser, Scanner sc) {
int n = 0;
System.out.print("▷ 암호 : ");
String passwd = sc.nextLine();
if("".equals(passwd.trim())) {
passwd = loginuser.getPasswd();
}
System.out.print("▷ 성명 : ");
String name = sc.nextLine();
if("".equals(name.trim())) {
name = loginuser.getName();
}
System.out.print("▷ 주소 : ");
String address = sc.nextLine();
if("".equals(address.trim())) {
address = loginuser.getAddress();
}
과제2 ▷▷ 10. 회원 탈퇴를 만들어 보자.
(Eclipse)MemberNBoardMainApp
case "10": // 회원 탈퇴
if(loginuser == null) {
System.out.println(">> 먼저 로그인 하세요. <<");
} else {
n = mbrCtrl.deleteMember(loginuser, sc);
if(n == 1) {
System.out.println(">> 회원 탈퇴를 성공했습니다. <<");
loginuser = null;
}
else
System.out.println(">> 회원 탈퇴를 실패 또는 취소했습니다. <<");
}
break;
case "100": // 프로그램 종료
break;
default:
System.out.println(">> 메뉴에 없는 번호를 선택하셨습니다. \n");
break;
}
} while (!"100".equals(strMenuNo));
System.out.println(">>> 프로그램을 종료합니다. <<<");
sc.close();
}
(Eclipse)InterMemberCtrl
int deleteMember(MemberDTO loginuser, Scanner sc);
(Eclipse)MemberCtrl
@Override
public int deleteMember(MemberDTO loginuser, Scanner sc) {
int n = 0;
System.out.print("▷ 아이디 : ");
String userid = sc.nextLine();
System.out.print("▷ 암호 : ");
String passwd = sc.nextLine();
if(loginuser.getUserid().equals(userid) && loginuser.getPasswd().equals(passwd)) {
n = mbrdao.deleteMember(loginuser, sc);
}
else
System.out.println(">> 아이디와 암호가 일치해야 탈퇴할 수 있습니다. <<");
return n;
}
(Eclipse)InterMemberDAO
int deleteMember(MemberDTO loginuser, Scanner sc);
(Eclipse)MemberDAO
@Override
public int deleteMember(MemberDTO loginuser, Scanner sc) {
int result = 0;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "myorauser", "eclass");
conn.setAutoCommit(false);
String sql = "delete from jdbc_tbl_member\n"+
"where userid = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, loginuser.getUserid());
result = pstmt.executeUpdate();
do {
System.out.print(">> 정말로 회원 탈퇴를 하시겠습니까? [Y/N] => ");
String yn = sc.nextLine();
if (result == 1 && ("Y".equals(yn) || "y".equals(yn))) {
conn.commit();
break;
} else if (result == 1 && ("N".equals(yn) || "n".equals(yn))) {
conn.rollback();
result = 0;
break;
}
} while (true);
} catch (ClassNotFoundException e) {
System.out.println(">> ojdbc6.jar 파일이 없습니다. <<");
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}